Notificações por push

Como ativar as Notificações por push.

Configurar notificação por push no iOS

Há três etapas para ativar as notificações por push:

  1. Configure notificações por push na conta do desenvolvedor do Apple.
  2. Ative notificações por push no xCode.
  3. Ative notificações por push no aplicativo com o SDK do Marketo.

Configurar notificações por push na conta de desenvolvedor do Apple

  1. Faça logon no Apple Developer Member Center.
  2. Clique em "Certificados, Identificadores e Perfis".
  3. Clique na pasta "Certificados->Todos" abaixo de "iOS, tvOS, watchOS".
  4. Selecione o "+" na tela superior esquerda ao lado dos certificados
  5. Ative a caixa de seleção "Apple Push Notification service SSL (Sandbox & Production)" e clique em "Continuar".
  6. Selecione o identificador de aplicativo que você está usando para compilar o aplicativo.
  7. Crie e faça upload do CSR para gerar o certificado de push.
  8. Baixe o certificado no computador local e clique duas vezes para instalá-lo.
  9. Abra "Acesso ao chaveiro", clique com o botão direito no certificado e exporte 2 itens para o arquivo .p12. cadeia_de_chaves
  10. Faça upload desse arquivo por meio do Marketo Admin Console para configurar as notificações.
  11. Atualizar perfis de provisionamento de aplicativo.

Ativar notificações por push no xCode

Ativar o recurso de notificação por push no projeto xCode.

Ativar notificações por push no aplicativo com o SDK do Marketo

Adicione o seguinte código ao arquivo AppDelegate.m para entregar notificações por push aos dispositivos do cliente.

Observação - Se estiver usando a extensão Adobe Launch, use ALMarketo como nome de classe

Importar sequência em AppDelegate.h.

Objetivo C
code language-none
#import <UserNotifications/UserNotifications.h>
Swift
code language-none
import UserNotifications

Adicione UNUserNotificationCenterDelegate a AppDelegate como mostrado abaixo.

Objetivo C
code language-none
@interface AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate>
Swift
code language-none
class AppDelegate: UIResponder, UIApplicationDelegate , UNUserNotificationCenterDelegate

Iniciar serviço de notificação por push. Para ativar a notificação por push, adicione o código abaixo.

Objetivo C
code language-objectivec
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
            if(!error){
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                });
            }
        }];

    return YES;
}
Swift
code language-none
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound,    .badge]) { granted, error in
            if let error = error {
                print("\(error.localizedDescription)")
            } else {
                DispatchQueue.main.async {
                    application.registerForRemoteNotifications()
                }
            }
        }

        return true
}

Chame esse método para iniciar o processo de registro com o Apple Push Service. Se o registro for bem-sucedido, o aplicativo chamará o método application:didRegisterForRemoteNotificationsWithDeviceToken: do objeto delegado do aplicativo e passará um token de dispositivo.

Se o registro falhar, o aplicativo chamará o método application:didFailToRegisterForRemoteNotificationsWithError: do delegado do aplicativo.

Registrar token de push com o Marketo. Para receber notificações por push do Marketo, você deve registrar o token do dispositivo no Marketo.

Objetivo C
code language-none
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Register the push token with Marketo
    [[Marketo sharedInstance] registerPushDeviceToken:deviceToken];
}
Swift
code language-none
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    // Register the push token with Marketo
    Marketo.sharedInstance().registerPushDeviceToken(deviceToken)
}

O token também pode ter seu registro cancelado quando o usuário fizer logout.

Objetivo C
code language-none
[[Marketo sharedInstance] unregisterPushDeviceToken];
Swift
code language-none
Marketo.sharedInstance().unregisterPushDeviceToken

Para registrar novamente o token de push, extraia o código da etapa 3 em um método AppDelegate e chame do método de logon ViewController.

Lidar com a notificação por push. Para receber notificações por push do Marketo, você deve registrar o token do dispositivo no Marketo.

Objetivo C
code language-none
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [[Marketo sharedInstance] handlePushNotification:userInfo];
}
Swift
code language-none
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    Marketo.sharedInstance().handlePushNotification(userInfo)
}

Adicione o seguinte método no AppDelegate

Ao usar esse método, você pode apresentar alertas, sons ou aumentar o selo enquanto o aplicativo está em primeiro plano. Você deve chamar o completionHandler de sua escolha neste método.

Objetivo C
code language-none
-(void)userNotificationCenter:(UNUserNotificationCenter *)center
    willPresentNotification:(UNNotification *)notification
        withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{

    completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
Swift
code language-none
func userNotificationCenter(_ center: UNUserNotificationCenter,
            willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (
    UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .sound,.badge])
}

Lidar com notificações por push recebidas recentemente no AppDelegate

O método será chamado no delegado quando o usuário responder à notificação abrindo o aplicativo, descartando a notificação ou escolhendo um UNNotificationAction. O delegado deve ser definido antes que o aplicativo retorne de applicationDidFinishLaunching:.

Objetivo C
code language-none
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {
    [[Marketo sharedInstance] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];
}
Swift
code language-none
func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler
                                completionHandler: @escaping () -> Void) {
        Marketo.sharedInstance().userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
}

Rastrear notificações por push

Se o aplicativo estiver sendo executado em segundo plano (ou não estiver ativo), o dispositivo receberá uma notificação por push, como mostrado abaixo. O Marketo rastreará quando o usuário tocar na notificação.

celular8

Se o dispositivo receber uma notificação por push, ela será passada para o retorno de chamada application:didReceiveRemoteNotification: no delegado do aplicativo.

Veja a seguir um registro de atividades do Marketo no Marketo que mostra eventos de aplicativo e eventos de notificação por push.

celular9

Configurar notificação por push no Android

  1. Adicione a seguinte permissão dentro da tag do aplicativo.

    Abra AndroidManifest.xml e adicione as seguintes permissões. Seu aplicativo deve solicitar as permissões "INTERNET" e "ACCESS_NETWORK_STATE". Se seu aplicativo já solicitar essas permissões, ignore esta etapa.

    code language-xml
    <uses‐permission android:name="android.permission.INTERNET"/>
    <uses‐permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    <!‐‐Following permissions are required for push notification.‐‐>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <!‐‐Keeps the processor from sleeping when a message is received.‐‐>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <permission android:name="<PACKAGE_NAME>.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="<PACKAGE_NAME>.permission.C2D_MESSAGE" />
    <!-- This app has permission to register and receive data message. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
  2. Configuração do FCM com HTTPv1 (o Google tem protocolo XMPP descontinuado em 12 de junho de 2023 e será removido em junho de 2024)

  • Habilitar MME FCM HTTPv1 no gerenciador de recursos do Marketo

    • Faça upload do arquivo Json da conta de serviço para o aplicativo em MLM.
    • É possível baixar o arquivo Json da conta de serviço no console do Firebase.   
    • Aguarde uma hora depois de fazer upload do arquivo Json da conta de serviço no Marketo antes de enviar as notificações por push.

Dispositivos de teste Android

Adicione a atividade Marketo no arquivo de manifesto dentro da tag do aplicativo.

<activity android:name="com.marketo.MarketoActivity"  android:configChanges="orientation|screenSize">
    <intent-filter android:label="MarketoActivity">
        <action  android:name="android.intent.action.VIEW"/>
        <category  android:name="android.intent.category.DEFAULT"/>
        <category  android:name="android.intent.category.BROWSABLE"/>
        <data android:host="add_test_device" android:scheme="mkto"/>
    </intent-filter/>
</activity/>

Registrar serviço de push do Marketo

  1. Para receber notificações por push do Marketo, você deve adicionar o serviço de mensagens do Firebase ao AndroidManifest.xml. Adicione antes de fechar a tag do aplicativo.

    code language-xml
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <service android:name=".MyFirebaseMessagingService">
    <intent-filter>
    <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
    </service>
    
  2. Adicione métodos SDK do Marketo no arquivo MyFirebaseMessagingService da seguinte maneira

    code language-java
    import com.marketo.Marketo;
    
    public class MyFirebaseMessagingService extends FirebaseMessagingService {
    
        @Override
        public void onNewToken(String s) {
            super.onNewToken(s);
            Marketo marketoSdk = Marketo.getInstance(this.getApplicationContext());
            marketoSdk.setPushNotificaitonToken(s);
            // Add your code here...
        }
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            Marketo marketoSdk = Marketo.getInstance(this.getApplicationContext());
            marketoSdk.showPushNotificaiton(remoteMessage);
            // Add your code here...
        }
    
    }
    

    Observação - Se estiver usando a extensão Adobe, adicione como abaixo

    code language-java
    import com.marketo.Marketo;
    
    public class MyFirebaseMessagingService extends FirebaseMessagingService {
    
        @Override
        public void onNewToken(String token) {
            super.onNewToken(token);
            ALMarketo.setPushNotificationToken(token);
            // Add your code here...
        }
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            ALMarketo.showPushNotification(remoteMessage);
            // Add your code here...
        }
    
    }
    

OBSERVAÇÃO: o SDK do FCM adiciona automaticamente todas as permissões necessárias, bem como a funcionalidade do receptor necessária. Remova os seguintes elementos obsoletos (e possivelmente prejudiciais, pois podem causar duplicação de mensagem) do manifesto do aplicativo se você tiver usado versões anteriores do SDK

<receiver android:name="com.marketo.MarketoBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <!‐‐Receives the actual messages.‐‐>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        <!‐‐Register to enable push notification‐‐>
        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
        <!‐‐‐Replace YOUR_PACKAGE_NAME with your own package name‐‐>
        <category android:name="YOUR_PACKAGE_NAME"/>
    </intent-filter>
</receiver>

<!‐‐Marketo service to handle push registration and notification‐‐>
<service android:name="com.marketo.MarketoIntentService"/>
  1. Inicializar o Marketo Push Depois de salvar a configuração acima, você deve inicializar a Notificação por push do Marketo. Crie ou abra a classe Application e copie/cole o código abaixo. Você pode obter a ID do remetente no console Firebase.

    code language-java
    Marketo marketoSdk = Marketo.getInstance(getApplicationContext());
    
    // Enable push notification here. The push notification channel name can by any string
    marketoSdk.initializeMarketoPush(SENDER_ID,"ChannelName");
    

    Se estiver usando a Extensão Adobe Launch, use estas instruções

    code language-java
    // Enable push notification here. The push notification channel name can by any string
    ALMarketo.initializeMarketoPush(SENDER_ID,"ChannelName");
    

    Se você não tiver um SENDER_ID, habilite o Serviço de Cloud Messaging do Google completando as etapas detalhadas neste tutorial.

    O token também pode ter seu registro cancelado quando o usuário fizer logout.

    code language-java
    marketoSdk.uninitializeMarketoPush();
    

    Se estiver usando a extensão Adobe Launch, use a instrução abaixo

    code language-java
    ALMarketo.uninitializeMarketoPush();
    

    Observação: para registrar novamente o token de push, extraia o código da etapa 3 em um método AppDelegate e chame do método de logon ViewController.

  2. Definir ícone de notificação (opcional) Para configurar um ícone de notificação personalizado, o método a seguir deve ser chamado.

    code language-java
    MarketoConfig.Notification config = new MarketoConfig.Notification();
    // Optional bitmap for honeycomb and above
    config.setNotificationLargeIcon(bitmap);
    
    // Required icon Resource ID
    config.setNotificationSmallIcon(R.drawable.notification_small_icon);
    
    // Set the configuration
    //Use the static methods on ALMarketo class when using Adobe Extension
    Marketo.getInstance(context).setNotificationConfig(config);
    
    // Get the configuration set
    Marketo.getInstance(context).getNotificationConfig();
    

Solução de problemas

A configuração de mensagens de push móveis envolve muitas etapas e a coordenação de desenvolvedores e profissionais de marketing. Se você estiver com dificuldades, há algumas coisas simples que você pode verificar.

Depois de garantir que as coisas simples estejam corretas, você pode se aprofundar nos detalhes da programação.

A mensagem de push não está aparecendo

Primeiro, verifique se as mensagens de push estão desativadas no fone. Os usuários móveis podem controlar se recebem ou não mensagens para qualquer aplicativo específico. Geralmente, os desenvolvedores (e profissionais de marketing) desativarão essas mensagens em algum momento durante o desenvolvimento. Portanto, a primeira coisa a verificar é se o recipient desativou as mensagens de push para o seu aplicativo.

Segundo, o aplicativo já está aberto e ativo no dispositivo? Quando seu aplicativo é o aplicativo ativo no dispositivo, as mensagens por push móveis não aparecem na tela. Em vez disso, elas são exibidas na área "notificações locais" do aplicativo.

Exibir os logs de atividade no Marketo

O primeiro local a ser observado ao rastrear um erro é nos logs de atividade do Marketo. Você pode usar os logs de atividades para verificar se uma mensagem foi enviada.

No registro de atividades, verifique os registros de atividade de uma pessoa que deveria receber uma mensagem. Se a mensagem foi enviada, haverá um registro no log de atividades. Caso contrário, o problema provavelmente ocorre devido à configuração do certificado do iOS ou da chave da API do Android no Marketo.

O certificado ou a chave é inválido

Verifique novamente sua configuração para garantir que você tenha o certificado adequado carregado para Sandbox ou Produção. Às vezes, é melhor fazer com que o desenvolvedor reexporte os certificados (iOS) ou as chaves (Android) e, em seguida, recarregue-os no Marketo para garantir que estejam corretos.

Um certificado ou uma chave (iOS) está ausente no arquivo .p12

Ao exportar o certificado, exporte a chave e do certificado.

Provisionamento de perfis desatualizados (iOS)

Sempre que você adicionar um novo dispositivo, deverá atualizar os perfis de provisionamento e gerar novos certificados. Verifique se o projeto Xcode aponta para os perfis e certificados corretos e importe esses certificados para a Marketo.

Não é possível carregar o certificado do iOS (IOS)

Verifique se a senha usada ao exportar o certificado não contém espaços.  Por exemplo, em vez disso:

Hello World 123

use isto:

HelloWorld123

Solução de problemas de certificados iOS

Para aplicativos de sandbox, você pode usar um certificado "desenvolvedor" ou "universal". Mas para aplicativos de produção é necessário carregar um certificado válido de "distribuição" ou "universal".

Rejeição por push/token inválido

Um token de registro existente pode deixar de ser válido em vários cenários, incluindo:

  • Se o aplicativo cliente cancelar o registro no GCM.
  • Se o aplicativo cliente tiver o registro cancelado automaticamente, o que pode acontecer se o usuário desinstalar o aplicativo. Por exemplo, no iOS, se o Serviço de feedback APNS relatou o token APNS como inválido.
  • Se o token de registro expirar. Por exemplo, a Google pode decidir atualizar tokens de registro ou o token APNS expirou para dispositivos iOS.
  • Se o aplicativo cliente estiver atualizado, mas a nova versão não estiver configurada para receber mensagens.
recommendation-more-help
bb269a6d-047a-4bf7-9acd-23ad9a63dc59