{"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}