From 152496e10a7c876f41894ff71b6b08ccc95a641d Mon Sep 17 00:00:00 2001 From: "o.korniienko" Date: Wed, 14 Sep 2022 15:44:58 +0200 Subject: [PATCH 1/5] RDGMS-391 --- .github/workflows/build.yml | 2 +- PushSDK.podspec | 2 +- PushSDK.xcodeproj/project.pbxproj | 4 + .../UserInterfaceState.xcuserstate | Bin 39078 -> 50185 bytes PushSDK/PushSDK.swift | 16 +- PushSDK/PushSDKFirebase.swift | 152 +++++++- PushSDK/core/JsonParser.swift | 359 ++++++++---------- PushSDK/core/Notifications.swift | 60 +++ PushSDK/firebase/FireBaseHelpers.swift | 2 +- PushSDK/settings/PushConstants.swift | 2 +- README.md | 2 +- 11 files changed, 386 insertions(+), 215 deletions(-) create mode 100644 PushSDK/core/Notifications.swift diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1157f7..d5044eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,7 +2,7 @@ name: Build on: push: branches: - - gmsapi + - main pull_request: types: [opened, synchronize, reopened] jobs: diff --git a/PushSDK.podspec b/PushSDK.podspec index 2da89f9..ae8ba4d 100644 --- a/PushSDK.podspec +++ b/PushSDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "PushSDK" - s.version = "1.0.0.45" + s.version = "1.1.0.1" s.summary = "SDK for sending push messages to iOS devices." s.homepage = "https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS" diff --git a/PushSDK.xcodeproj/project.pbxproj b/PushSDK.xcodeproj/project.pbxproj index f85c025..b0302c5 100644 --- a/PushSDK.xcodeproj/project.pbxproj +++ b/PushSDK.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 016F280528D2063D00F7D1A1 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016F280428D2063D00F7D1A1 /* Notifications.swift */; }; 01FCADDA28C0C15E00D77FA4 /* PushSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01FCADD128C0C15E00D77FA4 /* PushSDK.framework */; }; 01FCADDF28C0C15E00D77FA4 /* PushSDKTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01FCADDE28C0C15E00D77FA4 /* PushSDKTests.swift */; }; 01FCADE028C0C15E00D77FA4 /* PushSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 01FCADD428C0C15E00D77FA4 /* PushSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -36,6 +37,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 016F280428D2063D00F7D1A1 /* Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = ""; }; 01FCADD128C0C15E00D77FA4 /* PushSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PushSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 01FCADD428C0C15E00D77FA4 /* PushSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PushSDK.h; sourceTree = ""; }; 01FCADD928C0C15E00D77FA4 /* PushSDKTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PushSDKTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -147,6 +149,7 @@ 01FCADF128C0C27D00D77FA4 /* DataSaver.swift */, 01FCADF228C0C27D00D77FA4 /* Parser.swift */, 01FCADF328C0C27D00D77FA4 /* JsonParser.swift */, + 016F280428D2063D00F7D1A1 /* Notifications.swift */, ); path = core; sourceTree = ""; @@ -364,6 +367,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 016F280528D2063D00F7D1A1 /* Notifications.swift in Sources */, 01FCAE0128C0C27D00D77FA4 /* DataStructures.swift in Sources */, 01FCADFB28C0C27D00D77FA4 /* PushConstants.swift in Sources */, 01FCADFD28C0C27D00D77FA4 /* AnswerBuilder.swift in Sources */, diff --git a/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate b/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate index a7c9b995c79d906a33284e6df83a85418a3f967d..35e2054eb4a5558c837986e814083a41edb7f4ac 100644 GIT binary patch literal 50185 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 sces1peePH8O50ceM(|IYybZ`Zy3UqW(T@c;k- literal 39078 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 AQvd(} diff --git a/PushSDK/PushSDK.swift b/PushSDK/PushSDK.swift index 8a31c64..111c3f7 100644 --- a/PushSDK/PushSDK.swift +++ b/PushSDK/PushSDK.swift @@ -37,7 +37,7 @@ public class PushSDK { private let log = SwiftyBeaver.self private let parserClassAdapter = PusherKParser.init() private let pushRestServer = PushAPI.init() - //private let funNotificator = PushNotification.init() + private let funNotificator = PushNotification.init() let answerBuilder = AnswerBuilder.init() @@ -303,4 +303,18 @@ public class PushSDK { } + //check if notification permitted (Sync procedure) + public func areNotificationsEnabled() -> Bool { + + let semaphore = DispatchSemaphore(value: 0) + funNotificator.areNotificationsEnabled { (notificationStatus) in + debugPrint(notificationStatus) + PushKConstants.notificationPermission = notificationStatus + semaphore.signal() + } + semaphore.wait() + return PushKConstants.notificationPermission + } + + } diff --git a/PushSDK/PushSDKFirebase.swift b/PushSDK/PushSDKFirebase.swift index b88a4fa..62f1351 100644 --- a/PushSDK/PushSDKFirebase.swift +++ b/PushSDK/PushSDKFirebase.swift @@ -43,7 +43,6 @@ public class PushSDKFirebase: UIResponder, UIApplicationDelegate { public func fbInitApplication(didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?){ - // Override point for customization after application launch. //fbInitApplication0 PushKConstants.logger.debug("Call fbInitApplication: fbInitApplication0") @@ -78,14 +77,13 @@ public class PushSDKFirebase: UIResponder, UIApplicationDelegate { //fbInitApplication2 PushKConstants.logger.debug("Call fbInitApplication: fbInitApplication2") - // If you are receiving a notification message while your app is in the background, - // this callback will not be fired till the user taps on the notification launching the application. + // With swizzling disabled you must let Messaging know about the message, for Analytics - // Messaging.messaging().appDidReceiveMessage(userInfo) - // Print message ID. - if let messageID = userInfo[gcmMessageIDKey] { - PushKConstants.logger.debug("Message ID: \(messageID)") + Messaging.messaging().appDidReceiveMessage(userInfo) + + if let gcmMessageID = userInfo[gcmMessageIDKey] { + PushKConstants.logger.debug("gcm essage ID: \(gcmMessageID)") } // Print full message. @@ -93,7 +91,67 @@ public class PushSDKFirebase: UIResponder, UIApplicationDelegate { } + public func fbInitApplication(didReceiveRemoteNotification userInfo: [AnyHashable: Any], + fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { + //fbInitApplication3 + PushKConstants.logger.debug("Call fbInitApplication: fbInitApplication3") + + + // With swizzling disabled you must let Messaging know about the message, for Analytics + // Messaging.messaging().appDidReceiveMessage(userInfo) + + + if let gcmMessageID = userInfo[gcmMessageIDKey] { + PushKConstants.logger.debug("gcm message ID: \(gcmMessageID)") + + } + + // Print full message. + PushKConstants.logger.debug("userInfo: \(userInfo)") + + + guard let jsonData = try? JSONSerialization.data(withJSONObject: userInfo, options: []) else { return } + let jsonString = String(data: jsonData, encoding: .utf8) + PushKConstants.logger.debug("jsonString: \(jsonString ?? "empty")") + let newString = String(jsonString ?? "").replacingOccurrences(of: "\\", with: "", options: .literal, range: nil) + PushKConstants.logger.debug("newString: \(newString)") + let parsedMessage = PushServerAnswParser.messageIncomingJson(strResp: newString) + PushKConstants.logger.debug("parsedMessage: \(parsedMessage)") + + if (PushKConstants.enableNotificationFlag == true) { +// manualNotificator.pushNotificationManualWithImage( +// imageUrl: String(parsedMessage.message.image?.url ?? ""), +// contentTitle: String(parsedMessage.message.title ?? ""), +// contentBody: String(parsedMessage.message.body ?? ""), +// userInfo: userInfo) +// + } + + //here is delivery report sending + let messageId = parsedMessage.message.messageId + PushKConstants.logger.debug("messageId: \(messageId ?? "messageId error")") + + if (PushKConstants.enableDeliveryReportAutoFlag == true && PushKConstants.enableNotificationFlag == true) { + if (PushKConstants.deliveryReportLogicFlag == 1) { + let notificationStatus = pushAdapter.areNotificationsEnabled() + + if (notificationStatus == true) { + let drAnswer = self.pushAdapter.pushMessageDeliveryReport(messageId: messageId ?? "") + PushKConstants.logger.debug("delivery report answer: \(drAnswer)") + } + + } else if (PushKConstants.deliveryReportLogicFlag == 2) + { + let drAnswer = self.pushAdapter.pushMessageDeliveryReport(messageId: messageId ?? "") + PushKConstants.logger.debug("delivery report answer: \(drAnswer)") + } + } + + NotificationCenter.default.post(name: .receivePushKData, object: nil, userInfo: userInfo) + + completionHandler(UIBackgroundFetchResult.newData) + } public func fbInitApplication(didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { //fbInitApplication4 @@ -111,24 +169,31 @@ extension PushSDKFirebase: UNUserNotificationCenterDelegate{ willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo - + PushKConstants.logger.debug("userInfo: \(userInfo)") // With swizzling disabled you must let Messaging know about the message, for Analytics - // Messaging.messaging().appDidReceiveMessage(userInfo) - // Print message ID. - if let messageID = userInfo[gcmMessageIDKey] { - PushKConstants.logger.debug("Message ID: \(messageID)") + Messaging.messaging().appDidReceiveMessage(userInfo) + + if let gcmMessageID = userInfo[gcmMessageIDKey] { + PushKConstants.logger.debug("gcm message ID: \(gcmMessageID)") + } + + if #available(iOS 14.0, *){ + completionHandler([.banner, .list, .sound, .badge]) + }else{ + completionHandler([.alert, .sound, .badge]) } - completionHandler([.alert, .sound, .badge]) } public func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo - // Print message ID. - if let messageID = userInfo[gcmMessageIDKey] { - PushKConstants.logger.debug("Message ID: \(messageID)") + PushKConstants.logger.debug("userInfo: \(userInfo)") + + if let gcmMessageID = userInfo[gcmMessageIDKey] { + PushKConstants.logger.debug("gcm message ID: \(gcmMessageID)") } + Messaging.messaging().appDidReceiveMessage(userInfo) completionHandler() } } @@ -140,4 +205,59 @@ extension PushSDKFirebase { NotificationCenter.default.post(name: NSNotification.Name(rawValue: mySpecialNotificationKey), object: self) } + public func fb_remote_messaging(remoteMessage: NSDictionary) { + let fdf = remoteMessage as NSDictionary as? [String: AnyObject] + guard let jsonData = (try? JSONSerialization.data(withJSONObject: fdf ?? "", options: [])) else { return } + let jsonString = String(data: jsonData, encoding: .utf8) + let parsedMessage = PushServerAnswParser.messageIncomingJson(strResp: jsonString ?? "") + PushKConstants.logger.debug(parsedMessage) + let parsedMessageUserData = pushParser.messIdParser(messageFromPushServer: jsonString ?? "") + PushKConstants.logger.debug("parsedMessageUserData: \(parsedMessageUserData)") + + + if (PushKConstants.enableNotificationFlag == true) { +// manualNotificator.pushNotificationManualWithImage( +// imageUrl: String(parsedMessage.message.image?.url ?? ""), +// contentTitle: String(parsedMessage.message.title ?? ""), +// contentBody: String(parsedMessage.message.body ?? ""), +// userInfo: fdf ?? [:]) + } + + switch UIApplication.shared.applicationState { + case .active: + PushKConstants.logger.debug("active") + case .background: + PushKConstants.logger.debug("App is backgrounded.") + PushKConstants.logger.debug("Background time remaining = " + + "\(UIApplication.shared.backgroundTimeRemaining) seconds") + case .inactive: + PushKConstants.logger.debug("App is inactive.") + @unknown default: + PushKConstants.logger.debug("Fatal application error for UIApplication.shared.applicationState") + } + + if (PushKConstants.enableDeliveryReportAutoFlag == true && PushKConstants.enableNotificationFlag == true) { + if (PushKConstants.deliveryReportLogicFlag == 1) { + let notificationStatus = pushAdapter.areNotificationsEnabled() + + if (notificationStatus == true) { + let drAnswer = self.pushAdapter.pushMessageDeliveryReport(messageId: parsedMessageUserData) + PushKConstants.logger.debug("delivery report answer: \(drAnswer)") + } + + } else if (PushKConstants.deliveryReportLogicFlag == 2) + { + let drAnswer = self.pushAdapter.pushMessageDeliveryReport(messageId: parsedMessageUserData) + PushKConstants.logger.debug("delivery report answer: \(drAnswer)") + } + } + + NotificationCenter.default.post(name: .receivePushKData, object: nil, userInfo: fdf) + } + public func fb_token_messaging(didReceiveRegistrationToken fcmToken: String) { + PushKConstants.logger.debug("Firebase registration token: \(fcmToken)") + let dataDict:[String: String] = ["token": fcmToken] + NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict) + } + } diff --git a/PushSDK/core/JsonParser.swift b/PushSDK/core/JsonParser.swift index a1c980e..3684805 100644 --- a/PushSDK/core/JsonParser.swift +++ b/PushSDK/core/JsonParser.swift @@ -10,48 +10,17 @@ import Foundation class PushServerAnswParser { func registerJParse(strResp: String) -> RegisterJsonParse { - struct RegisterSession: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let token: String - } - - struct RegisterDevice: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let deviceId: Int - } - - struct RegisterProfile: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let userId: Int - let userPhone: String - let createdAt: String - } - - struct FullRegister: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let session: RegisterSession - let profile: RegisterProfile - let device: RegisterDevice - } - + PushKConstants.logger.debug("registerJParse start: strResp: \(strResp)") - guard let jsonData = strResp.data(using: .utf8) else { return RegisterJsonParse(deviceId: "", token: "", userId: 0, userPhone: "", createdAt: "")} - //let jsonData = JSON.self(using: .utf8)! do { + let jsonData = Data(strResp.utf8) let parsedJson: FullRegister = try JSONDecoder().decode(FullRegister.self, from: jsonData) PushKConstants.logger.debug(parsedJson.session.token) let res = RegisterJsonParse.init(deviceId: String(parsedJson.device.deviceId), token: parsedJson.session.token, userId: parsedJson.profile.userId, userPhone: parsedJson.profile.userPhone, createdAt: parsedJson.profile.createdAt) return res } catch { + PushKConstants.logger.debug("registerJParse error: \(error.localizedDescription)") let res = RegisterJsonParse.init(deviceId: "unknown", token: "unknown_token", userId: 0, userPhone: "0", createdAt: "") return res } @@ -59,126 +28,58 @@ class PushServerAnswParser { - func updateregistrationJParse(strResp: String) -> UpdateRegJsonParse - { - struct RegisterUpdate: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let deviceId: Int - } + func updateregistrationJParse(strResp: String) -> UpdateRegJsonParse { - guard let jsonData = strResp.data(using: .utf8) else { return UpdateRegJsonParse(deviceId: "")} - //let jsonData = JSON.self(using: .utf8)! + PushKConstants.logger.debug("updateregistrationJParse start: strResp: \(strResp)") do { + let jsonData = Data(strResp.utf8) let parsedJson: RegisterUpdate = try JSONDecoder().decode(RegisterUpdate.self, from: jsonData) let res = UpdateRegJsonParse.init(deviceId: String(parsedJson.deviceId)) return res } catch { + PushKConstants.logger.debug("updateregistrationJParse error: \(error.localizedDescription)") let res = UpdateRegJsonParse.init(deviceId: "unknown") return res } } - func getDeviceListJson(strResp: String) -> PushKGetDeviceList - { + func getDeviceListJson(strResp: String) -> PushKGetDeviceList { - struct PushKGetDeviceListParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var id : Int - var osType: String - var osVersion: String - var deviceType: String - var deviceName: String - var sdkVersion: String - var createdAt: String - var updatedAt: String - } - - struct DevListRespAll: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - let devices: [PushKGetDeviceListParse] - } + PushKConstants.logger.debug("getDeviceListJson start: strResp: \(strResp)") - guard let jsonData = strResp.data(using: .utf8) else { return PushKGetDeviceList(devices: [])} do { - let parsedJson: DevListRespAll = try JSONDecoder().decode(DevListRespAll.self, from: jsonData) + let jsonData = Data(strResp.utf8) + let parsedJson: DevListRespAll = try JSONDecoder().decode(DevListRespAll.self, from: jsonData) - var devPushK: [PushKGetDevice] = [] + var devPushK: [PushKGetDevice] = [] - for i in parsedJson.devices - { - let dev1: PushKGetDevice = PushKGetDevice.init(id: i.id, osType: i.osType, osVersion: i.osVersion, deviceType: i.deviceType, deviceName: i.deviceName, sdkVersion: i.sdkVersion, createdAt: i.createdAt, updatedAt: i.updatedAt) - devPushK.append(dev1) - } + for i in parsedJson.devices{ + let dev1: PushKGetDevice = PushKGetDevice.init(id: i.id, osType: i.osType, osVersion: i.osVersion, deviceType: i.deviceType, deviceName: i.deviceName, sdkVersion: i.sdkVersion, createdAt: i.createdAt, updatedAt: i.updatedAt) + devPushK.append(dev1) + } - let res = PushKGetDeviceList.init(devices: devPushK) - return res + let res = PushKGetDeviceList.init(devices: devPushK) + return res } catch { + PushKConstants.logger.debug("getDeviceListJson error: \(error.localizedDescription)") let res = PushKGetDeviceList.init(devices: []) return res } } - func getMessageHistoryJson(strResp: String) -> MessagesListResponse - { - - struct ImageResponseParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var url: String?=nil - } - - struct ButtonResponseParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var text: String?=nil - var url: String?=nil - } - - struct PushKMessageListParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var phone: String?=nil - var messageId: String?=nil - var title: String?=nil - var body: String?=nil - var image: ImageResponseParse?=nil - var button: ButtonResponseParse?=nil - var time: String?=nil - var partner: String?=nil - } + func getMessageHistoryJson(strResp: String) -> MessagesListResponse{ - struct MessagesListRespAll: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var limitDays: Int?=nil - var limitMessages: Int?=nil - var lastTime: Int?=nil - var messages: [PushKMessageListParse] - } - - - - guard let jsonData = strResp.data(using: .utf8) else { return MessagesListResponse(limitDays: 0, limitMessages: 0, lastTime: 0, messages: [])} + PushKConstants.logger.debug("getMessageHistoryJson start: strResp: \(strResp)") do { + let jsonData = Data(strResp.utf8) let parsedJson: MessagesListRespAll = try JSONDecoder().decode(MessagesListRespAll.self, from: jsonData) var messListPushK: [MessagesResponseStr] = [] - for i in parsedJson.messages - { + for i in parsedJson.messages{ let elem3: ImageResponse = ImageResponse.init(url: i.image?.url) let elem2: ButtonResponse = ButtonResponse.init(text: i.button?.text, url: i.button?.url) let elem1: MessagesResponseStr = MessagesResponseStr.init(phone: i.phone, messageId: i.messageId, title: i.title, body: i.body, image: elem3, button: elem2, time: i.time, partner: i.partner) @@ -188,7 +89,7 @@ class PushServerAnswParser { let res = MessagesListResponse.init(limitDays: parsedJson.limitDays, limitMessages: parsedJson.limitMessages, lastTime: parsedJson.lastTime, messages: messListPushK) return res } catch { - //handle error + PushKConstants.logger.debug("getMessageHistoryJson error: \(error.localizedDescription)") let res = MessagesListResponse.init(limitDays: 0, limitMessages: 0, lastTime: 0, messages: []) return res } @@ -200,75 +101,13 @@ class PushServerAnswParser { { PushKConstants.logger.debug("messageIncomingJson start: strResp: \(strResp)") - let strRespTransform = strResp.replacingOccurrences(of: "\"{", with: "{", options: .literal, range: nil).replacingOccurrences(of: "}\"", with: "}", options: .literal, range: nil) - - - struct ButtonResponseParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var text: String?=nil - var url: String?=nil - } - - struct MessApsData: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - enum CodingKeys: String, CodingKey { - case contentavailable = "content-available" - } - var contentavailable: Int? = 0 - } - - struct ImageResponseParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var url: String?=nil - } - - struct PushKMessageListParse: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - var image: ImageResponseParse?=nil - var button: ButtonResponseParse?=nil - var partner: String?=nil - var phone: String?=nil - var messageId: String?=nil - var time: String?=nil - var body: String?=nil - var title: String?=nil - } - - struct FullFirebaseMessage: Decodable { - enum Category: String, Decodable { - case swift, combine, debugging, xcode - } - enum CodingKeys: String, CodingKey { - case gcmmessageid = "gcm.message_id" - case message = "message" - case googlecsenderid = "google.c.sender.id" - case aps = "aps" - case source = "source" - } - var aps: MessApsData?=nil - var googlecsenderid: String? = "" - var message: PushKMessageListParse?=nil - var gcmmessageid: String? = "" - var source: String? = "" - } - - - PushKConstants.logger.debug("messageIncomingJson before decoding: strRespTransform: \(strRespTransform)") - - - guard let jsonData = strRespTransform.data(using: .utf8) else { return FullFirebaseMessageStr(aps: MessApsDataStr(contentAvailable: 0), message: MessagesResponseStr(phone: "", messageId: "", title: "", body: "", image: ImageResponse(url: ""), button: ButtonResponse(text: "", url: ""), time: "", partner: ""),googleCSenderId: "", gcmMessageId: "")} - - PushKConstants.logger.debug("messageIncomingJson transformed to data") - do { + let strRespReplaced = strResp.replacingOccurrences(of: "\"{", with: "{").replacingOccurrences(of: "}\"", with: "}") + PushKConstants.logger.debug("messageIncomingJson before decoding: strRespTransform: \(strRespReplaced)") + + let jsonData = Data(strRespReplaced.utf8) + PushKConstants.logger.debug("messageIncomingJson transformed to data") + let parsedJson: FullFirebaseMessage = try JSONDecoder().decode(FullFirebaseMessage.self, from: jsonData) PushKConstants.logger.debug("messageIncomingJson parsedJson: \(parsedJson)") @@ -287,7 +126,7 @@ class PushServerAnswParser { return res } catch { - //handle error + PushKConstants.logger.debug("getMessageHistoryJson error: \(error.localizedDescription)") let res = FullFirebaseMessageStr.init(aps: MessApsDataStr(contentAvailable: 0), message: MessagesResponseStr(phone: "", messageId: "", title: "", body: "", image: ImageResponse(url: ""), button: ButtonResponse(text: "", url: ""), time: "", partner: ""), googleCSenderId: "", @@ -297,7 +136,141 @@ class PushServerAnswParser { } +} - + +// DECODALE SRUCTURS + +// related to message parsing +struct ButtonResponseParse: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + var text: String?=nil + var url: String?=nil +} + +struct MessApsData: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + enum CodingKeys: String, CodingKey { + case contentavailable = "content-available" + } + var contentavailable: Int? = 0 +} + +struct ImageResponseParse: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + var url: String?=nil +} + +struct PushKMessageListParse: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + var image: ImageResponseParse?=nil + var button: ButtonResponseParse?=nil + var partner: String?=nil + var phone: String?=nil + var messageId: String?=nil + var time: String?=nil + var body: String?=nil + var title: String?=nil +} + +struct FullFirebaseMessage: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + enum CodingKeys: String, CodingKey { + case gcmmessageid = "gcm.message_id" + case message = "message" + case googlecsenderid = "google.c.sender.id" + case aps = "aps" + case source = "source" + } + var aps: MessApsData?=nil + var googlecsenderid: String? = "" + var message: PushKMessageListParse?=nil + var gcmmessageid: String? = "" + var source: String? = "" +} + + +struct MessagesListRespAll: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + var limitDays: Int?=nil + var limitMessages: Int?=nil + var lastTime: Int?=nil + var messages: [PushKMessageListParse] +} + + +// registration parsing +struct RegisterSession: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let token: String +} + +struct RegisterDevice: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let deviceId: Int +} + +struct RegisterProfile: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let userId: Int + let userPhone: String + let createdAt: String +} + +struct FullRegister: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let session: RegisterSession + let profile: RegisterProfile + let device: RegisterDevice +} + +//registration update parsing +struct RegisterUpdate: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let deviceId: Int +} + +//get devices parsing +struct PushKGetDeviceListParse: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + var id : Int + var osType: String + var osVersion: String + var deviceType: String + var deviceName: String + var sdkVersion: String + var createdAt: String + var updatedAt: String +} + +struct DevListRespAll: Decodable { + enum Category: String, Decodable { + case swift, combine, debugging, xcode + } + let devices: [PushKGetDeviceListParse] } diff --git a/PushSDK/core/Notifications.swift b/PushSDK/core/Notifications.swift new file mode 100644 index 0000000..0959e57 --- /dev/null +++ b/PushSDK/core/Notifications.swift @@ -0,0 +1,60 @@ +// +// Notifications.swift +// PushSDK +// +// Created by o.korniienko on 14.09.22. +// + +import Foundation +import UserNotifications + + + +class PushNotification { + + + + func areNotificationsEnabled(completion:@escaping (Bool)->Swift.Void) { + var notificationStatus: Bool = false + let current = UNUserNotificationCenter.current() + current.getNotificationSettings(completionHandler: { permission in + switch permission.authorizationStatus { + case .authorized: + PushKConstants.logger.debug("User granted permission for notification") + notificationStatus = true + completion(notificationStatus) + break + case .denied: + PushKConstants.logger.debug("User denied notification permission") + notificationStatus = false + completion(notificationStatus) + break + case .notDetermined: + PushKConstants.logger.debug("Notification permission haven't been asked yet") + notificationStatus = false + completion(notificationStatus) + break + case .provisional: + // @available(iOS 12.0, *) + PushKConstants.logger.debug("The application is authorized to post non-interruptive user notifications.") + notificationStatus = true + completion(notificationStatus) + break + case .ephemeral: + // @available(iOS 14.0, *) + PushKConstants.logger.debug("The application is temporarily authorized to post notifications. Only available to app clips.") + notificationStatus = false + completion(notificationStatus) + break + @unknown default: + PushKConstants.logger.debug("Unknow Status") + notificationStatus = false + completion(notificationStatus) + break + } + }) + } +} + + + diff --git a/PushSDK/firebase/FireBaseHelpers.swift b/PushSDK/firebase/FireBaseHelpers.swift index 741fcc2..e4bf741 100644 --- a/PushSDK/firebase/FireBaseHelpers.swift +++ b/PushSDK/firebase/FireBaseHelpers.swift @@ -26,7 +26,7 @@ internal class PushSdkFirHelpers { }) - PushKConstants.logger.debug("answToken token: \(PushKConstants.firebaseRegistrationToken ?? "")") + PushKConstants.logger.debug("old token: \(PushKConstants.firebaseRegistrationToken ?? "")") let tokenFcm = String(Messaging.messaging().fcmToken ?? "") if (tokenFcm != "") { diff --git a/PushSDK/settings/PushConstants.swift b/PushSDK/settings/PushConstants.swift index 6402f01..980cd2b 100644 --- a/PushSDK/settings/PushConstants.swift +++ b/PushSDK/settings/PushConstants.swift @@ -28,7 +28,7 @@ public struct PushKConstants { let kOSType = "ios" static let serverSdkVersion = "2.3" - static let sdkVersion = "1.0.0.45" + static let sdkVersion = "1.1.0.1" static let devOSVersion = UIDevice.current.systemVersion static let deviceType = "\(UIDevice.current.model)" static let deviceType2 = "\(UIDevice.current.batteryLevel)" diff --git a/README.md b/README.md index 7de999d..7c17392 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ To update dependencies in the Podfile run - $ pod update.
To open your project run $ open ProjectName.xcworkspace
More about Cocoapods and Podfile here - https://cocoapods.org, https://guides.cocoapods.org/using/the-podfile.html and https://guides.cocoapods.org/using/using-cocoapods.html. -last actual SDK version: 1.0.0.45
+last actual SDK version: 1.1.0.1
To integrate PushSDK to your project with COCOAPODS (https://guides.cocoapods.org/using/the-podfile.html) add the next line in Podfile.
pod 'PushSDK', :git => 'https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS', :branch => 'gmsapi' From 333710ff6f34151019292279324f38161f9d649e Mon Sep 17 00:00:00 2001 From: "o.korniienko" Date: Fri, 16 Sep 2022 12:56:25 +0200 Subject: [PATCH 2/5] notification displaying --- .../UserInterfaceState.xcuserstate | Bin 50185 -> 53736 bytes PushSDK/PushSDK.swift | 42 ++++++++++ PushSDK/PushSDKFirebase.swift | 26 +++--- PushSDK/core/Notifications.swift | 79 ++++++++++++++++++ 4 files changed, 134 insertions(+), 13 deletions(-) diff --git a/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate b/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate index 35e2054eb4a5558c837986e814083a41edb7f4ac..1f751080211199986944a247fe456d26ba27a88a 100644 GIT binary patch literal 53736 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 sces1peePH8O50ceM(|IYybZ`Zy3UqW(T@c;k- diff --git a/PushSDK/PushSDK.swift b/PushSDK/PushSDK.swift index 111c3f7..e952cb9 100644 --- a/PushSDK/PushSDK.swift +++ b/PushSDK/PushSDK.swift @@ -316,5 +316,47 @@ public class PushSDK { return PushKConstants.notificationPermission } + //check if notification permitted (Async procedure) + public func areNotificationsEnabled(completion:@escaping (Bool)->Swift.Void) { + var notificationStatus: Bool = false + let current = UNUserNotificationCenter.current() + current.getNotificationSettings(completionHandler: { permission in + switch permission.authorizationStatus { + case .authorized: + PushKConstants.logger.debug("User granted permission for notification") + notificationStatus = true + completion(notificationStatus) + break + case .denied: + PushKConstants.logger.debug("User denied notification permission") + notificationStatus = false + completion(notificationStatus) + break + case .notDetermined: + PushKConstants.logger.debug("Notification permission haven't been asked yet") + notificationStatus = false + completion(notificationStatus) + break + case .provisional: + // @available(iOS 12.0, *) + PushKConstants.logger.debug("The application is authorized to post non-interruptive user notifications.") + notificationStatus = true + completion(notificationStatus) + break + case .ephemeral: + // @available(iOS 14.0, *) + PushKConstants.logger.debug("The application is temporarily authorized to post notifications. Only available to app clips.") + notificationStatus = false + completion(notificationStatus) + break + @unknown default: + PushKConstants.logger.debug("Unknow Status") + notificationStatus = false + completion(notificationStatus) + break + } + }) + } + } diff --git a/PushSDK/PushSDKFirebase.swift b/PushSDK/PushSDKFirebase.swift index 62f1351..74b6b5f 100644 --- a/PushSDK/PushSDKFirebase.swift +++ b/PushSDK/PushSDKFirebase.swift @@ -15,7 +15,7 @@ import FirebaseCore public class PushSDKFirebase: UIResponder, UIApplicationDelegate { let pushParser = PusherKParser.init() - //let manualNotificator = PushNotification.init() + let manualNotificator = PushNotification.init() let answerAdapter = PushServerAnswParser.init() let pushAdapter = PushSDK.init(basePushURL: PushKConstants.basePushURLactive) let gcmMessageIDKey = "gcm.message_id" @@ -120,12 +120,12 @@ public class PushSDKFirebase: UIResponder, UIApplicationDelegate { if (PushKConstants.enableNotificationFlag == true) { -// manualNotificator.pushNotificationManualWithImage( -// imageUrl: String(parsedMessage.message.image?.url ?? ""), -// contentTitle: String(parsedMessage.message.title ?? ""), -// contentBody: String(parsedMessage.message.body ?? ""), -// userInfo: userInfo) -// + manualNotificator.preparePushNotification( + imageUrl: String(parsedMessage.message.image?.url ?? ""), + contentTitle: String(parsedMessage.message.title ?? ""), + contentBody: String(parsedMessage.message.body ?? ""), + userInfo: userInfo) + } //here is delivery report sending @@ -193,7 +193,7 @@ extension PushSDKFirebase: UNUserNotificationCenterDelegate{ if let gcmMessageID = userInfo[gcmMessageIDKey] { PushKConstants.logger.debug("gcm message ID: \(gcmMessageID)") } - Messaging.messaging().appDidReceiveMessage(userInfo) + completionHandler() } } @@ -216,11 +216,11 @@ extension PushSDKFirebase { if (PushKConstants.enableNotificationFlag == true) { -// manualNotificator.pushNotificationManualWithImage( -// imageUrl: String(parsedMessage.message.image?.url ?? ""), -// contentTitle: String(parsedMessage.message.title ?? ""), -// contentBody: String(parsedMessage.message.body ?? ""), -// userInfo: fdf ?? [:]) + manualNotificator.preparePushNotification( + imageUrl: String(parsedMessage.message.image?.url ?? ""), + contentTitle: String(parsedMessage.message.title ?? ""), + contentBody: String(parsedMessage.message.body ?? ""), + userInfo: fdf ?? [:]) } switch UIApplication.shared.applicationState { diff --git a/PushSDK/core/Notifications.swift b/PushSDK/core/Notifications.swift index 0959e57..48adb46 100644 --- a/PushSDK/core/Notifications.swift +++ b/PushSDK/core/Notifications.swift @@ -12,7 +12,86 @@ import UserNotifications class PushNotification { + func preparePushNotification(imageUrl: String = "", + timeInterval: TimeInterval = 1.7, + contentTitle: String = "", + contentSubtitle: String = "", + contentBody: String, + userInfo: [AnyHashable: Any] + ) { + PushKConstants.logger.debug("makePushNotification input: imageUrl: \(imageUrl), timeInterval: \(timeInterval), contentTitle: \(contentTitle), contentSubtitle: \(contentSubtitle), contentBody: \(contentBody)") + + let content = UNMutableNotificationContent() + content.userInfo = userInfo + + if(contentBody != ""){ + content.body = contentBody + } + if(contentTitle != ""){ + content.title = contentTitle + } + if(contentSubtitle != ""){ + content.subtitle = contentSubtitle + } + content.sound = UNNotificationSound.default + content.categoryIdentifier = "pushKActionCategory" + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: false) + + if(imageUrl != ""){ + if let url = URL(string: imageUrl){ + Task{ + guard let data = NSData(contentsOf: url) else{ + PushKConstants.logger.debug("image getting error with url: \(url)") + makeNotification(content: content, trigger: trigger) + PushKConstants.logger.debug("notification without image was made") + return + } + + let fileIdentifier = ProcessInfo.processInfo.globallyUniqueString + let target = FileManager.default.temporaryDirectory.appendingPathComponent(fileIdentifier).appendingPathExtension(url.pathExtension) + + do{ + try data.write(to: target) + let attachment = try UNNotificationAttachment(identifier: fileIdentifier, url: target, options: nil) + content.attachments.append(attachment) + + makeNotification(content: content, trigger: trigger) + PushKConstants.logger.debug("notification with image was made") + + }catch{ + PushKConstants.logger.debug("error: \(error.localizedDescription)") + makeNotification(content: content, trigger: trigger) + PushKConstants.logger.debug("notification without image was made") + } + } + + }else{ + let request = UNNotificationRequest(identifier: Date().description, content: content, trigger: trigger) + + makeNotification(content: content, trigger: trigger) + PushKConstants.logger.debug("notification without image was made - url error") + } + + }else{ + + makeNotification(content: content, trigger: trigger) + PushKConstants.logger.debug("notification without image was made") + + } + + + } + func makeNotification(content: UNMutableNotificationContent, trigger: UNTimeIntervalNotificationTrigger){ + let request = UNNotificationRequest(identifier: Date().description, content: content, trigger: trigger) + + UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in + if let error = error { + PushKConstants.logger.error("UNUserNotificationCenter error: \(error.localizedDescription)") + } + }) + } func areNotificationsEnabled(completion:@escaping (Bool)->Swift.Void) { var notificationStatus: Bool = false From afb898fea688e443c7fbd1af705da9c106fd0f58 Mon Sep 17 00:00:00 2001 From: "o.korniienko" Date: Mon, 19 Sep 2022 10:27:18 +0200 Subject: [PATCH 3/5] clean line --- .../UserInterfaceState.xcuserstate | Bin 53736 -> 59495 bytes PushSDK/core/Notifications.swift | 2 -- 2 files changed, 2 deletions(-) diff --git a/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate b/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate index 1f751080211199986944a247fe456d26ba27a88a..1428dc5bfcf14bff90f0173cbf520e63503cdbf3 100644 GIT binary patch literal 59495 zcmeEvbzl@n*!RxNy4-DWClDN>Lcd2j^oyIXL4t8=W*wAS8`Wz8@PII zGj|<#J$D0l2X`lT7k4*z5BDJV2=^%WB=y^Y>SyU`x>8Ttl&i+)AFq2JLT z=ua$S3Hxzp+y(c*J#l{=j|bsVI1Ojwv3LT`!&C90_-JfliciER;q~}5d=@?%pN}uV zm*7kBmG~;W5pTlV@YVP_d_BGy--7SJcj9~TefS~#Fn%0AfuF(8;urBtco%*dzmDI) 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 j9CI#vjx|>`ci@|reaZB((OVLt_ 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 diff --git a/PushSDK/core/Notifications.swift b/PushSDK/core/Notifications.swift index 48adb46..4d25b90 100644 --- a/PushSDK/core/Notifications.swift +++ b/PushSDK/core/Notifications.swift @@ -67,8 +67,6 @@ class PushNotification { } }else{ - let request = UNNotificationRequest(identifier: Date().description, content: content, trigger: trigger) - makeNotification(content: content, trigger: trigger) PushKConstants.logger.debug("notification without image was made - url error") } From 6581b7354c1e652d93588ee8ea63d3fba6fb7acd Mon Sep 17 00:00:00 2001 From: Oleksii Korniienko Date: Mon, 19 Sep 2022 11:19:21 +0200 Subject: [PATCH 4/5] Update README.md --- README.md | 185 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 170 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 7c17392..0b97278 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,183 @@ # IOS PushSDK *** -Install and init Cocoapods.
+### Install and init Cocoapods.
Open a terminal window and run $ sudo gem install cocoapods to instal Cocoapods.
Then $ cd into your project directory and run $ pod init to create a Podfile. Important ! Before run $ pod init your project should be closed.
To update dependencies in the Podfile run - $ pod update.
To open your project run $ open ProjectName.xcworkspace
More about Cocoapods and Podfile here - https://cocoapods.org, https://guides.cocoapods.org/using/the-podfile.html and https://guides.cocoapods.org/using/using-cocoapods.html. -last actual SDK version: 1.1.0.1
+### Add sdk to your project. +Last actual SDK version: 1.1.0.1
To integrate PushSDK to your project with COCOAPODS (https://guides.cocoapods.org/using/the-podfile.html) add the next line in Podfile.
pod 'PushSDK', :git => 'https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS', :branch => 'gmsapi' *** +Important ! Before start using SDK, configure firebase project first and create App Id and APNS key. -* Example of PushSDK initializing +*** +## Add Firebase cloud messaging to your project +* Create a project at https://console.firebase.google.com/ (or use an existing one).
+![image](https://user-images.githubusercontent.com/46021248/190978818-899f7023-9855-4c79-ad03-efb933874e6f.png) +* Add new IOS app.
+![image](https://user-images.githubusercontent.com/46021248/190979252-99141b74-649e-4a46-a492-f3506c6976a1.png) +* Do not forget to download config file GoogleService-Info.plist and add it into the root of your project.
+![image](https://user-images.githubusercontent.com/46021248/190979329-1776b8b2-00e9-4202-94ff-c1c46f613405.png) +* Step 3 should be skipped.
+![image](https://user-images.githubusercontent.com/46021248/190979384-5b94a475-78af-49c0-8328-212ccef8c8cf.png) +* After that you need to create App Id and APNS key by following the [instruction](https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS/wiki/Creating-App-Id-and-APNS-key). + +# Using SDK +## Initialize firebase helper functions into your AppDelegate.swift: +```swift + import UIKit + import PushSDK + import SwiftyBeaver + import UserNotifications + + @UIApplicationMain + public class AppDelegate: UIResponder, UIApplicationDelegate{ + let fb_ad = PushSDKFirebase.init() + public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + FirebaseApp.configure() + fb_ad.fbInitApplication(didFinishLaunchingWithOptions: launchOptions) + application.registerForRemoteNotifications() + fb_ad.registerForPushNotifications() + UNUserNotificationCenter.current().delegate = self + + return true + } + + + func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { + fb_ad.fbInitApplication(didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler) + } + + public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { + fb_ad.fbInitApplication(didReceiveRemoteNotification: userInfo) + } + + public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void){ + fb_ad.fbInitApplication(didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler) + } + + public func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + fb_ad.fbInitApplication(didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) + } +} +``` + +## Configure processing incoming messages in ViewController.swift: +```swift +import UIKit +import PushSDK +import UserNotifications +import Alamofire +import JSON + +class ViewController: UIViewController { + + @IBOutlet var textOutput : UITextView! + +//PushSDK initialization + let pushAdapterSdk = PushSDK.init(basePushURL: "https://example.com/push/", enableNotification: true, enableDeliveryReportAuto: true, deliveryReportLogic: 1) + + override func viewDidLoad() { + super.viewDidLoad() + //register in notification center + NotificationCenter.default.addObserver(self, selector: #selector(onReceiveFromPushServer(_:)), name: .receivePushKData, object: nil) + UNUserNotificationCenter.current().delegate = self + } +} + +extension ViewController: UNUserNotificationCenterDelegate { + + //for displaying notification when app is in foreground + func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + //If you don't want to show notification when app is open, do something here else and make a return here. + //If you don't implement this delegate method, you will not see the notification on the specified controller. So, you have to implement this delegate and make sure the below line execute. i.e. completionHandler. + completionHandler([.alert, .badge, .sound]) + } + + // For handling tap and user actions + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { + completionHandler() + //UIApplication.shared.applicationIconBadgeNumber = 0 + } + + //processing incoming data message + @objc func onReceiveFromPushServer(_ notification: Notification) { + let incomMessage = PushSDK.parseIncomingPush(message: notification).messageFir + textOutput.text = textOutput.text + "\n" + incomMessage.message.toString() + } +} + +extension AppDelegate: UNUserNotificationCenterDelegate{ + public func userNotificationCenter(_ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + completionHandler([.alert, .sound, .badge]) + } + + public func userNotificationCenter(_ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void) { + completionHandler() + } +} +``` + +## An example of registration a device: +* Init pPushSDK +```swift +let pushAdapterSdk = PushSDK.init(basePushURL: "https://push.example.com/api/") +``` +* Make registration. +```swift +let registrator: PushKFunAnswerRegister = pushAdapterSdk.pushRegisterNew(user_phone: "375291234567", user_password: "1", x_push_sesion_id: PushKConstants.firebase_registration_token ?? "", x_push_ios_bundle_id: "12345678", X_Push_Client_API_Key: "test_key") +``` +* IMPORTANT. Then update registration. +```swift +pushAdapterSdk.pushUpdateRegistration() +``` + +### Some another example of PushSDK initializing ```swift let pushAdapterSdk = PushSDK.init(basePushURL: "https://push.example.com/api/", enableNotification: true, enableDeliveryReportAuto: true, deliveryReportLogic:1) ``` -*** *** -Notification/delivery reports control -You can enable/disable displaying notification and sending delivery reports with the following optional parameters in PushSDK: +## Notification/delivery reports control +### You can enable/disable displaying notification and sending delivery reports with the following optional parameters in PushSDK: - enableNotification: Bool - enable/disable display notification. Default is true (enabled) - enableDeliveryReportAuto: Bool - enable/disable sending delivery report. Default is true (enabled) - deliveryReportLogic: Int - working if enableNotification is true and enableDeliveryReportAuto is true. Options of deliveryReportLogic:
1 - if notification permitted in application settings, then send delivery report. Else not send report
2 - always send delivery report if receive message +### You can check notification permission with areNotificationsEnabled() public function. You can use it in synchronous and asynchronous ways.
+* synchronous: +```swift +let permission = pushAdapterSdk.areNotificationsEnabled() +``` +* asynchronous: +```swift +pushAdapterSdk.areNotificationsEnabled { (notificationStatus) in + debugPrint(notificationStatus) +} + +``` *** -#SDK functions description +# SDK functions description All this functions are available from PushSDK class For using it, create this class new instance first *** -* New device registration. Register your device on push server +* new device registration. Register your device on push server ```swift public func pushRegisterNew(userPhone: String, userPassword: String, xPushSessionId: String, xPushIOSBundleId: String, xPushClientAPIKey: String) -> PushKFunAnswerRegister @@ -45,7 +185,7 @@ public func pushRegisterNew(userPhone: String, userPassword: String, xPushIOSBun ``` *** -* Clear local device on server. This function clear on push server only locally saved device id +* clear local device on server. This function clear on push server only locally saved device id ```swift public func pushClearCurrentDevice()->PushKGeneralAnswerStruct ``` @@ -57,13 +197,13 @@ public func pushGetMessageHistory(periodInSeconds: Int) -> PushKFunAnswerGetMess ``` *** -* Check message queue +* check message queue ```swift public func pushCheckQueue() -> PushKFunAnswerGeneral ``` *** -* Get all devices from server +* get all devices from server ```swift public func pushGetDeviceAllFromServer() -> PushKFunAnswerGetDeviceList ``` @@ -81,26 +221,41 @@ public func pushSendMessageCallback(messageId: String, callbackText: String) -> ``` *** -* Send delivery report to server +* send delivery report to server ```swift public func pushMessageDeliveryReport(messageId: String) -> PushKGeneralAnswerStruct ``` *** -* Clear all devices registered with current msisdn +* clear all devices registered with current msisdn ```swift public func pushClearAllDevice()->PushKGeneralAnswerStruct ``` *** -* Parse incoming notification +* parse incoming notification ```swift public static func parseIncomingPush(message: Notification) -> PushKMess ``` *** -* Parse incoming notification UserInfo +* parse incoming notification UserInfo ```swift public static func parseIncomingPush(message: [AnyHashable : Any]) -> PushKMess ``` *** + +# SDK answers.
+200 - Ok. All processed successfully
+ +## Answers from remote server.
+401 - HTTP code (Client error) authentication error
+400 - HTTP code (Client error) request validation error
+500 - HTTP code (Server error)
+ + +## SDK errors
+700 - internal SDK error
+701 - incorrect input
+704 - not registered
+707 - registration already exists
From 6f7517ec431475787435e387eca977a0f5ab93d8 Mon Sep 17 00:00:00 2001 From: "o.korniienko" Date: Mon, 19 Sep 2022 15:58:06 +0200 Subject: [PATCH 5/5] update version --- PushSDK.podspec | 2 +- .../UserInterfaceState.xcuserstate | Bin 59495 -> 60798 bytes PushSDK/settings/PushConstants.swift | 4 ++-- README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PushSDK.podspec b/PushSDK.podspec index ae8ba4d..39d71ca 100644 --- a/PushSDK.podspec +++ b/PushSDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "PushSDK" - s.version = "1.1.0.1" + s.version = "1.1.1" s.summary = "SDK for sending push messages to iOS devices." s.homepage = "https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS" diff --git a/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate b/PushSDK.xcworkspace/xcuserdata/o.korniienko.xcuserdatad/UserInterfaceState.xcuserstate index 1428dc5bfcf14bff90f0173cbf520e63503cdbf3..2f2b3558fd4683c5ee66f9167e4f9ba211b4d9d4 100644 GIT binary patch delta 25523 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 delta 24913 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 Fe*v;s7ApV% diff --git a/PushSDK/settings/PushConstants.swift b/PushSDK/settings/PushConstants.swift index 980cd2b..06acdd4 100644 --- a/PushSDK/settings/PushConstants.swift +++ b/PushSDK/settings/PushConstants.swift @@ -28,7 +28,7 @@ public struct PushKConstants { let kOSType = "ios" static let serverSdkVersion = "2.3" - static let sdkVersion = "1.1.0.1" + static let sdkVersion = "1.1.1" static let devOSVersion = UIDevice.current.systemVersion static let deviceType = "\(UIDevice.current.model)" static let deviceType2 = "\(UIDevice.current.batteryLevel)" @@ -39,7 +39,7 @@ public struct PushKConstants { static let kPushClientAPIKey = UserDefaults.standard.string(forKey:"clientApiKey") static let FCMToken = UserDefaults.standard.string(forKey: "fcmToken") - static let branch = "master" + static let branch = "main" public static var messageBuffer = "" as String public static var basePushURLactive = "" as String diff --git a/README.md b/README.md index 0b97278..4625213 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ To open your project run $ open ProjectName.xcworkspace
More about Cocoapods and Podfile here - https://cocoapods.org, https://guides.cocoapods.org/using/the-podfile.html and https://guides.cocoapods.org/using/using-cocoapods.html. ### Add sdk to your project. -Last actual SDK version: 1.1.0.1
+Last actual SDK version: 1.1.1
To integrate PushSDK to your project with COCOAPODS (https://guides.cocoapods.org/using/the-podfile.html) add the next line in Podfile.
pod 'PushSDK', :git => 'https://github.com/GlobalMessageServices/BCS-GMS-SDK-IOS', :branch => 'gmsapi'