{"metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","settings":"","results":{"codes":[]},"params":[]},"next":{"description":"","pages":[]},"title":"Integração iOS - CocoaPods","type":"basic","slug":"sdk-ios-cocoa-pods","excerpt":"","body":"[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Essa implementação da SDK contempla apenas apps iOS desenvolvidos em SWIFT. [Caso seu app seja desenvolvido em Objective-c acesse esse link ](\\nhttps://inngage.readme.io/v1.0/docs/integração-ios-cocoapods-objective-c)\",\n  \"title\": \"Compatibilidade\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"1 - Instalação\"\n}\n[/block]\nPara instalação da biblioteca, utilize o CocoaPods. No arquivo de **Podfile** adicione a seguinte linha para o projeto principal:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"pod 'Inngage/Core'\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nPara os targets projetos de extensão, como **Notification Service Extension** e **Notification Content Extension**, que trabalha com os códigos específicos de notificação remota, insira a seguinte linha:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"pod 'Inngage/NotificationExtension'\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nO projeto é separado em 2 modulos, o **Core** que possui seu escopo para gerenciamento de push notifications quando o aplicativo é aberto, e o** NotificationExtension** que gerencia os Push Notifications de bandeja, assim como Rich Push Notification.\n\nAinda no arquivo de Podfile, insira o seguinte post script, para desabilitar validações cujo não sejam designadas para API na compilação dos frameworks de extensão:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"post_install do |installer|\\n  installer.pods_project.targets.each do |target|\\n    target.build_configurations.each do |config|\\n      config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'\\n    end\\n  end\\nend\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nDepois só executar o comando **pod install** no terminal, na pasta do projeto. A partir deste momento será utilizado o arquivo com a extensão **.xcworkspace**.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"No projeto Example pode se verificar como o arquivo de Podfile foi escrito e atribuido os códigos descritos.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"2 - Configuração\"\n}\n[/block]\n## **Projeto**\n\nÉ necessário configurar o projeto para que possua o **Capabilities**, que se encontra no arquivo **.xcproject** aberto direto pela raiz do projeto no **Xcode** na aba **Signing & Capabilities**. Habilitando o **Push Notification** e o **Background modes** os atributos **Background fetch** e **Remote notifications**.\n\n\n##  **Handle Notification** \n\nNo projeto, no arquivo **AppDelegate** é necessário fazer algumas configurações para o funcionamento do SDK, para sincronia com a plataforma Inngage.\n\nÉ necessário importar o SDK: \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"#import <Inngage/PushNotificationManager.h>\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nIncluindo as seguintes variáveis de classe.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"var pushNotificationManager = PushNotificationManager.sharedInstance()\\nvar userInfoDictionary: [String: Any]?\\n\\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\\n\\n    pushNotificationManager?.inngageAppToken = \\\"APP_TOKEN\\\"\\n    pushNotificationManager?.inngageApiEndpoint = \\\"https://api.inngage.com.br/v1\\\"\\n    pushNotificationManager?.defineLogs = true\\n    pushNotificationManager?.enabledShowAlertWithUrl = false\\n    pushNotificationManager?.enabledAlert = false\\n\\n    if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [String: Any] {\\n        self.userInfoDictionary = userInfo\\n    }\\n\\n    return true\\n}\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nÉ necessário inserir o Token disponibilizado no console do Inngage para o direcionamento das chamadas do seu applicativo. Algumas variáveis estão disponíveis para configuração do SDK.\n\n**defineLogs (BOOL)**: Permite a visualização dos logs no console do Xcode.\n**enabledAlert (BOOL)**: Quando enviado um Push Notification sem URL, caso o usuário abra a notificação, quando o aplicativo estiver em modo ativo, será mostrado um alerta padrão do sistema, com o titulo e o texto da notificação enviada.\n**enabledShowAlerWithUrl (BOOL)**: Quando enviado um push notification contendo uma URL, o mesmo não mostra um Alert caso seja definido com o valor false. Esse atributo funciona quando o atributo enabledAlert possui o valor true.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings\\n                                                                                       *)notificationSettings\\n{\\n    [application registerForRemoteNotifications];\\n    \\n    [manager handlePushRegisterForRemoteNotifications:notificationSettings];\\n}\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\nAdicione as seguintes linhas de código na sua aplicação\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"//Este trecho realizará o registro do usuário na API de push notification, assim como as informações de device do mesmo, para disponibilização de novos push.\\n\\nfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\\n\\n    let userInfo = [\\\"name\\\": \\\"XXX\\\"]\\n\\n    pushNotificationManager?.handlePushRegistration(deviceToken, identifier: \\\"USER_IDENTIFIER\\\", customField: userInfo)\\n\\n    if let userInfoDictionary = userInfoDictionary {\\n        pushNotificationManager?.handlePushReceived(userInfoDictionary, messageAlert: true)\\n    }\\n}\\n\\n//Este trecho registrará os casos de falha do registro de push notification.\\n\\nfunc application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {\\n    pushNotificationManager?.handlePushRegistrationFailure(error)\\n}\\n\\n\\n\\n//Este trecho de código enviará o log para o servidor da Inngage sobre o recebimento do push.\\n\\nfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: :::at:::escaping (UIBackgroundFetchResult) -> Void) {\\n    pushNotificationManager?.handlePushReceived(userInfo, messageAlert: true)\\n}\\nN\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\n## **Notification Service Extension**\n\nNo projeto, é necessário configurar uma nova extensão no seu arquivo raiz .xcodeproj diretamente pelo Xcode. Assim adicionando a extensão de Notification Service Extension.\n\nUma nova sequência de arquivos será gerada. Caso o projeto seja na linguagem Objective-C, deverá ser adicionado o seguinte código no seguinte método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {\\n    self.contentHandler = contentHandler\\n    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)\\n    \\n    NotificationManager.prepareNotification(with: request, andBestAttempt: bestAttemptContent) { [weak self] (bestAttemptContent) in\\n        if let bestAttemptContent = bestAttemptContent {\\n            self?.contentHandler?(bestAttemptContent)\\n        }\\n    }\\n}\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>.\"\n}\n[/block]\n\nEste trecho de código irá realizar a configuração das notificações remotas quando chegarem para o usuário final.\n\n\n## **Notification Content Extension**\n\n\nNo projeto, é necessário configurar uma nova extensão no seu arquivo raiz .xcodeproj diretamente pelo Xcode. Assim adicionando a extensão de .\n\nUma nova sequência de arquivos será gerada. Caso o projeto seja na linguagem Swift, deverá ser adicionado o seguinte código no seguinte método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"func didReceive(_ notification: UNNotification) {\\n    NotificationManager.prepareNotificationContent(with: notification, andViewController: self)\\n}\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>.\"\n}\n[/block]\nNo arquivo de **Info.plist** é necessário informar um novo atributo, na seguinte categoria: **NSExtension-> NSExtensionAttributes**, com a seguinte chave **UNNotificationExtensionUserInteractionEnabled** e valor **YES**. Esse atributo permitirá que Rich Push Notifications tenham interações pelo usuário.\n\nEstre trecho de código irá realizar a configuração de Rich Push Notifications quando houver interação do usuário por force touch ou long press na bandeja de notificações do sistema. Assim podendo ser apresentado para o usuário imagens (jpg, png, gif) e videos (mp4).\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Disponibilizamos um projeto sample com a implementação da SDK. Você pode acessa-lo aqui:\\n[https://github.com/inngage/inngage-ios](https://github.com/inngage/inngage-ios)\",\n  \"title\": \"Projeto Sample\"\n}\n[/block]","updates":[],"order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"_id":"601d7af389334400281ea8e5","createdAt":"2021-02-05T17:05:55.662Z","user":"5724b9982ad0bc17001227fa","category":{"sync":{"isSync":false,"url":""},"pages":[],"title":"iOS","slug":"ios","order":2,"from_sync":false,"reference":false,"_id":"577ead2ca74eb40e00d97bca","__v":0,"createdAt":"2016-07-07T19:27:40.133Z","project":"57240e292887bb0e00bb9d93","version":"57240e292887bb0e00bb9d96"},"version":{"version":"1.0","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["57240e292887bb0e00bb9d97","57241b7deae5090e00ee6249","57241c06eae5090e00ee624a","57242abb2ad0bc170012279b","5734d18c7b9859320047f4b1","57688cc71f818b0e00695efb","577ead2ca74eb40e00d97bca","57b66af649a12a0e007b461b","597e5f8f13505b0014251a79","59964eb2f824b4000f961fbe","5a15ab12f2643f001ee8737c","5ab1151799750500797334e0","5c597e8b0abe110014bf1a11","5e395a05470bc3002d78d886","5e42a9647515f300509a594d","5f5e716dcc85f9004a4fa193","5f6dd615c624d800180bd237","5f984feb8aed05003a0032dc","60ac0e9c4c04970016613c6c"],"_id":"57240e292887bb0e00bb9d96","createdAt":"2016-04-30T01:45:13.341Z","project":"57240e292887bb0e00bb9d93","releaseDate":"2016-04-30T01:45:13.341Z","__v":19},"project":"57240e292887bb0e00bb9d93","__v":0,"parentDoc":null}

Integração iOS - CocoaPods


[block:callout] { "type": "info", "body": "Essa implementação da SDK contempla apenas apps iOS desenvolvidos em SWIFT. [Caso seu app seja desenvolvido em Objective-c acesse esse link ](\nhttps://inngage.readme.io/v1.0/docs/integração-ios-cocoapods-objective-c)", "title": "Compatibilidade" } [/block] [block:api-header] { "title": "1 - Instalação" } [/block] Para instalação da biblioteca, utilize o CocoaPods. No arquivo de **Podfile** adicione a seguinte linha para o projeto principal: [block:code] { "codes": [ { "code": "pod 'Inngage/Core'", "language": "swift" } ] } [/block] Para os targets projetos de extensão, como **Notification Service Extension** e **Notification Content Extension**, que trabalha com os códigos específicos de notificação remota, insira a seguinte linha: [block:code] { "codes": [ { "code": "pod 'Inngage/NotificationExtension'", "language": "swift" } ] } [/block] O projeto é separado em 2 modulos, o **Core** que possui seu escopo para gerenciamento de push notifications quando o aplicativo é aberto, e o** NotificationExtension** que gerencia os Push Notifications de bandeja, assim como Rich Push Notification. Ainda no arquivo de Podfile, insira o seguinte post script, para desabilitar validações cujo não sejam designadas para API na compilação dos frameworks de extensão: [block:code] { "codes": [ { "code": "post_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'\n end\n end\nend", "language": "swift" } ] } [/block] Depois só executar o comando **pod install** no terminal, na pasta do projeto. A partir deste momento será utilizado o arquivo com a extensão **.xcworkspace**. [block:callout] { "type": "info", "body": "No projeto Example pode se verificar como o arquivo de Podfile foi escrito e atribuido os códigos descritos." } [/block] [block:api-header] { "title": "2 - Configuração" } [/block] ## **Projeto** É necessário configurar o projeto para que possua o **Capabilities**, que se encontra no arquivo **.xcproject** aberto direto pela raiz do projeto no **Xcode** na aba **Signing & Capabilities**. Habilitando o **Push Notification** e o **Background modes** os atributos **Background fetch** e **Remote notifications**. ## **Handle Notification** No projeto, no arquivo **AppDelegate** é necessário fazer algumas configurações para o funcionamento do SDK, para sincronia com a plataforma Inngage. É necessário importar o SDK: [block:code] { "codes": [ { "code": "#import <Inngage/PushNotificationManager.h>", "language": "swift" } ] } [/block] Incluindo as seguintes variáveis de classe. [block:code] { "codes": [ { "code": "var pushNotificationManager = PushNotificationManager.sharedInstance()\nvar userInfoDictionary: [String: Any]?\n\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n\n pushNotificationManager?.inngageAppToken = \"APP_TOKEN\"\n pushNotificationManager?.inngageApiEndpoint = \"https://api.inngage.com.br/v1\"\n pushNotificationManager?.defineLogs = true\n pushNotificationManager?.enabledShowAlertWithUrl = false\n pushNotificationManager?.enabledAlert = false\n\n if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [String: Any] {\n self.userInfoDictionary = userInfo\n }\n\n return true\n}", "language": "swift" } ] } [/block] É necessário inserir o Token disponibilizado no console do Inngage para o direcionamento das chamadas do seu applicativo. Algumas variáveis estão disponíveis para configuração do SDK. **defineLogs (BOOL)**: Permite a visualização dos logs no console do Xcode. **enabledAlert (BOOL)**: Quando enviado um Push Notification sem URL, caso o usuário abra a notificação, quando o aplicativo estiver em modo ativo, será mostrado um alerta padrão do sistema, com o titulo e o texto da notificação enviada. **enabledShowAlerWithUrl (BOOL)**: Quando enviado um push notification contendo uma URL, o mesmo não mostra um Alert caso seja definido com o valor false. Esse atributo funciona quando o atributo enabledAlert possui o valor true. [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings\n *)notificationSettings\n{\n [application registerForRemoteNotifications];\n \n [manager handlePushRegisterForRemoteNotifications:notificationSettings];\n}", "language": "swift" } ] } [/block] Adicione as seguintes linhas de código na sua aplicação [block:code] { "codes": [ { "code": "//Este trecho realizará o registro do usuário na API de push notification, assim como as informações de device do mesmo, para disponibilização de novos push.\n\nfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\n\n let userInfo = [\"name\": \"XXX\"]\n\n pushNotificationManager?.handlePushRegistration(deviceToken, identifier: \"USER_IDENTIFIER\", customField: userInfo)\n\n if let userInfoDictionary = userInfoDictionary {\n pushNotificationManager?.handlePushReceived(userInfoDictionary, messageAlert: true)\n }\n}\n\n//Este trecho registrará os casos de falha do registro de push notification.\n\nfunc application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {\n pushNotificationManager?.handlePushRegistrationFailure(error)\n}\n\n\n\n//Este trecho de código enviará o log para o servidor da Inngage sobre o recebimento do push.\n\nfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {\n pushNotificationManager?.handlePushReceived(userInfo, messageAlert: true)\n}\nN", "language": "swift" } ] } [/block] ## **Notification Service Extension** No projeto, é necessário configurar uma nova extensão no seu arquivo raiz .xcodeproj diretamente pelo Xcode. Assim adicionando a extensão de Notification Service Extension. Uma nova sequência de arquivos será gerada. Caso o projeto seja na linguagem Objective-C, deverá ser adicionado o seguinte código no seguinte método: [block:code] { "codes": [ { "code": "override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {\n self.contentHandler = contentHandler\n bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)\n \n NotificationManager.prepareNotification(with: request, andBestAttempt: bestAttemptContent) { [weak self] (bestAttemptContent) in\n if let bestAttemptContent = bestAttemptContent {\n self?.contentHandler?(bestAttemptContent)\n }\n }\n}", "language": "swift" } ] } [/block] [block:callout] { "type": "warning", "body": "É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>." } [/block] Este trecho de código irá realizar a configuração das notificações remotas quando chegarem para o usuário final. ## **Notification Content Extension** No projeto, é necessário configurar uma nova extensão no seu arquivo raiz .xcodeproj diretamente pelo Xcode. Assim adicionando a extensão de . Uma nova sequência de arquivos será gerada. Caso o projeto seja na linguagem Swift, deverá ser adicionado o seguinte código no seguinte método: [block:code] { "codes": [ { "code": "func didReceive(_ notification: UNNotification) {\n NotificationManager.prepareNotificationContent(with: notification, andViewController: self)\n}", "language": "swift" } ] } [/block] [block:callout] { "type": "warning", "body": "É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>." } [/block] No arquivo de **Info.plist** é necessário informar um novo atributo, na seguinte categoria: **NSExtension-> NSExtensionAttributes**, com a seguinte chave **UNNotificationExtensionUserInteractionEnabled** e valor **YES**. Esse atributo permitirá que Rich Push Notifications tenham interações pelo usuário. Estre trecho de código irá realizar a configuração de Rich Push Notifications quando houver interação do usuário por force touch ou long press na bandeja de notificações do sistema. Assim podendo ser apresentado para o usuário imagens (jpg, png, gif) e videos (mp4). [block:callout] { "type": "info", "body": "Disponibilizamos um projeto sample com a implementação da SDK. Você pode acessa-lo aqui:\n[https://github.com/inngage/inngage-ios](https://github.com/inngage/inngage-ios)", "title": "Projeto Sample" } [/block]