{"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","625010e649ff260020328542"],"_id":"57240e292887bb0e00bb9d96","createdAt":"2016-04-30T01:45:13.341Z","project":"57240e292887bb0e00bb9d93","releaseDate":"2016-04-30T01:45:13.341Z","__v":20},"project":"57240e292887bb0e00bb9d93","__v":0,"parentDoc":null}