Integração iOS - CocoaPods Objective-C

1 - Instalação

Para instalação da biblioteca, utilize o CocoaPods. No arquivo de Podfile adicione a seguinte linha para o projeto principal:

pod 'Inngage/Core'

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:

pod 'Inngage/NotificationExtension'

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:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
    end
  end
end

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.

📘

No projeto Example pode se verificar como o arquivo de Podfile foi escrito e atribuido os códigos descritos.

2 - Configuração

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:

#import <Inngage/PushNotificationManager.h>

Incluindo as seguintes variáveis de classe.

@interface AppDelegate (){
    PushNotificationManager *manager;
    NSDictionary *userInfoDict;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
  [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:
                                                                        (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    
  manager = [PushNotificationManager sharedInstance];
    
  manager.inngageAppToken = @"APP_TOKEN";
  manager.inngageApiEndpoint = @"https://api.inngage.com.br/v1";
  manager.defineLogs = YES;
  manager.enabledShowAlertWithUrl = NO;
  manager.enabledAlert = NO;

  userInfoDict = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

  return YES;
}

É 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.

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings: (UIUserNotificationSettings
                                                                                       *)notificationSettings
{
    [application registerForRemoteNotifications];
    
    [manager handlePushRegisterForRemoteNotifications:notificationSettings];
}

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.

- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSDictionary *jsonBody = @{ @"Nome":@"XXX" };
    
    [manager handlePushRegistration:deviceToken identifier: @"USER_IDENTIFIER" customField:jsonBody];
    
    if (userInfoDict != nil)
    {
        [manager handlePushReceived:userInfoDict messageAlert:YES];
        
    }
}
- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Registration for remote notification failed with error: %@", error.localizedDescription);
    
    [manager handlePushRegistrationFailure:error];
    
}

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
    [manager handlePushReceived:userInfo messageAlert:YES];
}

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:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    [NotificationManager prepareNotificationWithRequest:request andBestAttemptContent: self.bestAttemptContent andCompletionHander:^(UNNotificationContent *bestAttemptContent) {
        self.contentHandler(bestAttemptContent);
    }];
}

Send Event

func application(_ application: UIApplication) {

		NSDictionary *eventValue = @{ @"produto":@"Bola de tenis" };
    [manager handleSendEvent:appToken identifier: @"USER_IDENTIFIER" ,eventName: @"nome do evento",conversionValue:10.0,registration:@"",conversionEvent:true,conversionNotId:@"EE432423reRTF" eventValues: eventValue];

 
}

Temos 3 valores que são obrigatórios para podermos ter uma boa performance e integração com Inngage

eventName: Define o nome que voce ira enviar para voce poder identificar de forma rápida na plataforma
appToken: Precisamos validar suas credenciais.
Identifier ou registration (Firebase token): usamos pra identificar o usuário, pelo menos uma deve ser informada;

Você também pode adicionar valores avançados para esse evento,
eventValues: Array com chave e valor com dados que serão anexados ao evento.

A API de eventos também pode receber um evento de conversão, para isso existem os campos:
conversion_event: True
conversion_value: Valor monetário da conversão (Padrão FLOAT 11000.00)
conversion_notid: Opção para enviar o ID Único da Notificação da Inngage (NOTID), que foi recebido pelo app no momento do Push, para assim atribuir uma conversão a determinado Push

🚧

É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>.

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:

- (void)didReceiveNotification:(UNNotification *)notification {
    [NotificationManager prepareNotificationContentWithNotification:notification andViewController:self];
}

🚧

É necessário importar a seguinte classe: #import <Inngage/NotificationManager.h>.

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).