Integração iOS - CocoaPods

📘

Compatibilidade

Essa implementação da SDK contempla apenas apps iOS desenvolvidos em SWIFT. Caso seu app seja desenvolvido em Objective-c acesse esse link

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.

var pushNotificationManager = PushNotificationManager.sharedInstance()
var userInfoDictionary: [String: Any]?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    pushNotificationManager?.inngageAppToken = "APP_TOKEN"
    pushNotificationManager?.inngageApiEndpoint = "https://api.inngage.com.br/v1"
    pushNotificationManager?.defineLogs = true
    pushNotificationManager?.enabledShowAlertWithUrl = false
    pushNotificationManager?.enabledAlert = false

    if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [String: Any] {
        self.userInfoDictionary = userInfo
    }

    return true
}

É 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];
}

Adicione as seguintes linhas de código na sua aplicação

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

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    let userInfo = ["name": "XXX"]

    pushNotificationManager?.handlePushRegistration(deviceToken, identifier: "USER_IDENTIFIER", customField: userInfo)

    if let userInfoDictionary = userInfoDictionary {
        pushNotificationManager?.handlePushReceived(userInfoDictionary, messageAlert: true)
    }
}

//Este trecho registrará os casos de falha do registro de push notification.

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    pushNotificationManager?.handlePushRegistrationFailure(error)
}



//Este trecho de código enviará o log para o servidor da Inngage sobre o recebimento do push.

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    pushNotificationManager?.handlePushReceived(userInfo, messageAlert: true)
}
N

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:

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    self.contentHandler = contentHandler
    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
    
    NotificationManager.prepareNotification(with: request, andBestAttempt: bestAttemptContent) { [weak self] (bestAttemptContent) in
        if let bestAttemptContent = bestAttemptContent {
            self?.contentHandler?(bestAttemptContent)
        }
    }
}

Send Event

func application(_ application: UIApplicationdid, RegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

    let eventValue = ["produto": "Bola de tenis"]

    pushNotificationManager?.handleSendEvent(deviceToken, 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 Swift, deverá ser adicionado o seguinte código no seguinte método:

func didReceive(_ notification: UNNotification) {
    NotificationManager.prepareNotificationContent(with: 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).

📘

Projeto Sample

Disponibilizamos um projeto sample com a implementação da SDK. Você pode acessa-lo aqui:
https://github.com/inngage/inngage-ios