iOS SDK Cocoa Pods

ūüďė

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