{"metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","settings":"","results":{"codes":[]},"params":[]},"next":{"description":"","pages":[]},"title":"Integração iOS - CocoaPods Objective-C","type":"basic","slug":"integração-ios-cocoapods-objective-c","excerpt":"","body":"[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\": \":::at:::interface AppDelegate (){\\n    PushNotificationManager *manager;\\n    NSDictionary *userInfoDict;\\n}\",\n      \"language\": \"swift\"\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\\n    \\n  [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:\\n                                                                        (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];\\n    \\n  manager = [PushNotificationManager sharedInstance];\\n    \\n  manager.inngageAppToken = @\\\"APP_TOKEN\\\";\\n  manager.inngageApiEndpoint = @\\\"https://api.inngage.com.br/v1\\\";\\n  manager.defineLogs = YES;\\n  manager.enabledShowAlertWithUrl = NO;\\n  manager.enabledAlert = NO;\\n\\n  userInfoDict = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];\\n\\n  return YES;\\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]\nEste 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[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)application:(UIApplication *)application\\ndidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\\n\\n    NSDictionary *jsonBody = @{ @\\\"Nome\\\":@\\\"XXX\\\" };\\n    \\n    [manager handlePushRegistration:deviceToken identifier: @\\\"USER_IDENTIFIER\\\" customField:jsonBody];\\n    \\n    if (userInfoDict != nil)\\n    {\\n        [manager handlePushReceived:userInfoDict messageAlert:YES];\\n        \\n    }\\n}\\n- (void)application:(UIApplication *)application\\ndidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {\\n    NSLog(@\\\"Registration for remote notification failed with error: %@\\\", error.localizedDescription);\\n    \\n    [manager handlePushRegistrationFailure:error];\\n    \\n}\\n\\n- (void)application:(UIApplication *)application\\ndidReceiveRemoteNotification:(NSDictionary *)userInfo {\\n    \\n    [manager handlePushReceived:userInfo messageAlert:YES];\\n}\",\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\": \"- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {\\n    self.contentHandler = contentHandler;\\n    self.bestAttemptContent = [request.content mutableCopy];\\n\\n    [NotificationManager prepareNotificationWithRequest:request andBestAttemptContent: self.bestAttemptContent andCompletionHander:^(UNNotificationContent *bestAttemptContent) {\\n        self.contentHandler(bestAttemptContent);\\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 Objective-C, deverá ser adicionado o seguinte código no seguinte método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"- (void)didReceiveNotification:(UNNotification *)notification {\\n    [NotificationManager prepareNotificationContentWithNotification: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).","updates":[],"order":2,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"_id":"601e6ddeba05970061cc281a","createdAt":"2021-02-06T10:22:22.018Z","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}

Integração iOS - CocoaPods Objective-C


[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": "@interface AppDelegate (){\n PushNotificationManager *manager;\n NSDictionary *userInfoDict;\n}", "language": "swift" } ] } [/block] [block:code] { "codes": [ { "code": "- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n \n [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:\n (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];\n \n manager = [PushNotificationManager sharedInstance];\n \n manager.inngageAppToken = @\"APP_TOKEN\";\n manager.inngageApiEndpoint = @\"https://api.inngage.com.br/v1\";\n manager.defineLogs = YES;\n manager.enabledShowAlertWithUrl = NO;\n manager.enabledAlert = NO;\n\n userInfoDict = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];\n\n return YES;\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] 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. [block:code] { "codes": [ { "code": "- (void)application:(UIApplication *)application\ndidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {\n\n NSDictionary *jsonBody = @{ @\"Nome\":@\"XXX\" };\n \n [manager handlePushRegistration:deviceToken identifier: @\"USER_IDENTIFIER\" customField:jsonBody];\n \n if (userInfoDict != nil)\n {\n [manager handlePushReceived:userInfoDict messageAlert:YES];\n \n }\n}\n- (void)application:(UIApplication *)application\ndidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {\n NSLog(@\"Registration for remote notification failed with error: %@\", error.localizedDescription);\n \n [manager handlePushRegistrationFailure:error];\n \n}\n\n- (void)application:(UIApplication *)application\ndidReceiveRemoteNotification:(NSDictionary *)userInfo {\n \n [manager handlePushReceived:userInfo messageAlert:YES];\n}", "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": "- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {\n self.contentHandler = contentHandler;\n self.bestAttemptContent = [request.content mutableCopy];\n\n [NotificationManager prepareNotificationWithRequest:request andBestAttemptContent: self.bestAttemptContent andCompletionHander:^(UNNotificationContent *bestAttemptContent) {\n self.contentHandler(bestAttemptContent);\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 Objective-C, deverá ser adicionado o seguinte código no seguinte método: [block:code] { "codes": [ { "code": "- (void)didReceiveNotification:(UNNotification *)notification {\n [NotificationManager prepareNotificationContentWithNotification: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).