Ir para o conteúdo

Notificações por push

As notificações por push permitem que você envie notificações do seu app quando eventos importantes ocorrerem. Você pode enviar uma notificação por push quando tiver novas mensagens instantâneas para entregar, alertas de notícias de última hora para enviar ou o episódio mais recente do programa de TV favorito do seu usuário pronto para ele baixar para visualização offline. Elas também são mais eficientes do que a busca em segundo plano, já que seu aplicativo só é iniciado quando necessário.

Pré-requisitos

Antes de poder usar esse recurso, você precisará integrar o Braze Web SDK.

Protocolos de push

As notificações web push são implementadas usando o padrão push do W3C, que é compatível com a maioria dos principais navegadores. Para saber mais sobre padrões de protocolo push específicos e compatibilidade com navegadores, você pode consultar os recursos da Apple, Mozilla e Microsoft.

Configurando notificações por push

Etapa 1: Configure seu service worker

No arquivo service-worker.js do seu projeto, adicione o snippet a seguir e defina a opção de inicialização manageServiceWorkerExternally como true ao inicializar o SDK web.

Etapa 2: Registre o navegador

Para solicitar imediatamente permissões de push a um usuário para que o navegador possa receber notificações por push, chame braze.requestPushPermission(). Para verificar primeiro se o push é compatível com o navegador do usuário, chame braze.isPushSupported().

Você também pode enviar um prompt de push suave ao usuário antes de solicitar a permissão de push, para exibir sua própria interface relacionada a push.

Etapa 3: Desative o skipWaiting (opcional)

O arquivo do service worker da Braze chamará automaticamente skipWaiting durante a instalação. Se quiser desativar essa funcionalidade, adicione o código a seguir ao arquivo do service worker, após importar a Braze:

Cancelando a inscrição de um usuário

Para cancelar a inscrição de um usuário, chame braze.unregisterPush().

Domínios alternativos

Para integrar o web push, seu domínio deve ser seguro, o que geralmente significa https, localhost e outras exceções conforme definido no padrão W3C de push. Você também precisa conseguir registrar um Service Worker na raiz do seu domínio, ou pelo menos conseguir controlar os cabeçalhos HTTP desse arquivo. Este artigo explica como integrar o Web Push da Braze em um domínio alternativo.

Casos de uso

Se você não conseguir atender a todos os critérios descritos no padrão W3C de push, pode usar este método para adicionar uma caixa de diálogo de solicitação de push ao seu website. Isso pode ser útil se você quiser permitir que seus usuários façam a aceitação a partir de um website http ou de um popup de extensão do navegador que esteja impedindo a exibição da solicitação de push.

Considerações

Tenha em mente que, como muitas soluções alternativas na web, os navegadores evoluem continuamente e este método pode não ser viável no futuro. Antes de continuar, verifique se:

  • Você possui um domínio seguro separado (https://) e permissões para registrar um Service Worker nesse domínio.
  • Os usuários estão conectados ao seu website, o que garante que os tokens por push sejam associados ao perfil correto.

Configurando um domínio alternativo de push

Para tornar o exemplo a seguir mais claro, usaremos http://insecure.com e https://secure.com como nossos dois domínios, com o objetivo de fazer com que os visitantes se registrem para push em http://insecure.com. Este exemplo também pode ser aplicado a um esquema chrome-extension:// para a página de popup de uma extensão do navegador.

Etapa 1: Iniciar o fluxo de solicitação

Em insecure.com, abra uma nova janela para o seu domínio seguro usando um parâmetro de URL para passar o ID externo da Braze do usuário atualmente conectado.

http://insecure.com

<button id="opt-in">Opt-In For Push</button>
<script>
// the same ID you would use with `braze.changeUser`:
const user_id = getUserIdSomehow();
// pass the user ID into the secure domain URL:
const secure_url = `https://secure.com/push-registration.html?external_id=${user_id}`;

// when the user takes some action, open the secure URL in a new window
document.getElementById("opt-in").onclick = function(){
    if (!window.open(secure_url, 'Opt-In to Push', 'height=500,width=600,left=150,top=150')) {
        window.alert('The popup was blocked by your browser');
    } else {
        // user is shown a popup window
        // and you can now prompt for push in this window
    }
}
</script>

Etapa 2: Registrar para push

Neste ponto, secure.com abrirá uma janela popup na qual você poderá inicializar o SDK Web da Braze para o mesmo ID de usuário e solicitar a permissão do usuário para Web push.

https://secure.com/push-registration.html

Etapa 3: Comunicar entre domínios (opcional)

Agora que os usuários podem fazer a aceitação a partir desse fluxo originado em insecure.com, pode ser interessante modificar seu site com base no fato de o usuário já ter feito a aceitação ou não. Não faz sentido pedir ao usuário que se registre para push se ele já estiver registrado.

Você pode usar iFrames e a API postMessage para se comunicar entre seus dois domínios.

insecure.com

No nosso domínio insecure.com, vamos solicitar ao domínio seguro (onde o push está de fato registrado) informações sobre o registro de push do usuário atual:

<!-- Create an iframe to the secure domain and run getPushStatus onload-->
<iframe id="push-status" src="https://secure.com/push-status.html" onload="getPushStatus()" style="display:none;"></iframe>

<script>
function getPushStatus(event){
    // send a message to the iframe asking for push status
    event.target.contentWindow.postMessage({type: 'get_push_status'}, 'https://secure.com');
    // listen for a response from the iframe's domain
    window.addEventListener("message", (event) => {
        if (event.origin === "http://insecure.com" && event.data.type === 'set_push_status') {
            // update the page based on the push permission we're told
            window.alert(`Is user registered for push? ${event.data.isPushPermissionGranted}`);
        }
    }
}
</script>

secure.com/push-status.html

Perguntas frequentes (FAQ)

Service workers

E se eu não conseguir registrar um service worker no diretório raiz?

Por padrão, um service worker só pode ser usado dentro do mesmo diretório em que foi registrado. Por exemplo, se o arquivo do service worker estiver em /assets/service-worker.js, só seria possível registrá-lo em example.com/assets/* ou em um subdiretório da pasta assets, mas não na página inicial (example.com/). Por esse motivo, recomenda-se hospedar e registrar o service worker no diretório raiz (como https://example.com/service-worker.js).

Se você não conseguir registrar um service worker no domínio raiz, uma abordagem alternativa é usar o cabeçalho HTTP Service-Worker-Allowed ao servir o arquivo do service worker. Ao configurar seu servidor para retornar Service-Worker-Allowed: / na resposta do service worker, isso instruirá o navegador a ampliar o escopo e permitir que ele seja usado a partir de um diretório diferente.

Posso criar um service worker usando um Tag Manager?

Não, os service workers devem ser hospedados no servidor do seu site e não podem ser carregados via Tag Manager.

Segurança do site

O HTTPS é obrigatório?

Sim. Os padrões da web exigem que o domínio que solicita permissão para notificações por push seja seguro.

Quando um site é considerado “seguro”?

Um site é considerado seguro se corresponder a um dos seguintes padrões de origem segura. As notificações web push da Braze são construídas com base nesse padrão aberto, de modo que ataques man-in-the-middle são prevenidos.

  • (https, , *)
  • (wss, *, *)
  • (, localhost, )
  • (, .localhost, *)
  • (, 127/8, )
  • (, ::1/128, *)
  • (file, *, —)
  • (chrome-extension, *, —)

E se um site seguro não estiver disponível?

Embora a melhor prática do setor seja tornar todo o seu site seguro, clientes que não conseguem proteger o domínio do site podem contornar esse requisito usando um modal seguro. Leia mais no nosso guia sobre o uso de domínio push alternativo ou veja uma demonstração funcional.

Pré-requisitos

Antes de usar este recurso, você precisará integrar o SDK Android da Braze.

Recursos integrados

Os seguintes recursos estão integrados ao SDK Android da Braze. Para usar qualquer outro recurso de notificação por push, você precisará configurar as notificações por push para seu app.

Recurso Descrição
Push Stories As Push Stories para Android estão integradas ao SDK Android da Braze por padrão. Para saber mais, consulte Push Stories.
Push Primers As Campaigns de push primer incentivam seus usuários a ativar as notificações por push em seus dispositivos para o seu app. Isso pode ser feito sem personalização do SDK usando nosso push primer sem código.

Sobre o ciclo de vida da notificação por push

O fluxograma a seguir mostra como a Braze lida com o ciclo de vida da notificação por push, como solicitações de permissão, geração de token e entrega de mensagens.

---
config:
  theme: neutral
---
flowchart TD

%% Permission flow
subgraph Permission[Push Permissions]
    B{Android version of the device?}
    B -->|Android 13+| C["requestPushPermissionPrompt() called"]
    B -->|Android 12 and earlier| D[No permissions required]

    %% Connect Android 12 path to Braze state
    D --> H3[Braze: user subscription state]
    H3 --> J3[Defaults to 'subscribed' when user profile created]

    C --> E{Did the user grant push permission?}
    E -->|Yes| F[POST_NOTIFICATIONS permission granted]
    E -->|No| G[POST_NOTIFICATIONS permission denied]

    %% Braze subscription state updates
    F --> H1[Braze: user subscription state]
    G --> H2[Braze: user subscription state]

    H1 --> I1{Automatically opt in after permission granted?}
    I1 -->|true| J1[Set to 'opted-in']
    I1 -->|false| J2[Remains 'subscribed']

    H2 --> K1[Remains 'subscribed'<br/>or 'unsubscribed']

    %% Subscription state legend
    subgraph BrazeStates[Braze subscription states]
        L1['Subscribed' - default state<br/>when user profile created]
        L2['Opted-in' - user explicitly<br/>wants push notifications]
        L3['Unsubscribed' - user explicitly<br/>opted out of push]
    end

    %% Note about user-level states
    note1[Note: These states are user-level<br/>and apply across all devices for the user]

    %% Connect states to legend
    J1 -.-> L2
    J2 -.-> L1
    J3 -.-> L1
    K1 -.-> L3
    note1 -.-> BrazeStates
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
  theme: neutral
---
flowchart TD

%% Token generation flow
subgraph Token[Token Generation]
    H["Braze SDK initialized"] --> Q{Is FCM auto-registration enabled?}
    Q -->|Yes| L{Is required configuration present?}
    Q -->|No| M[No FCM token generated]
    L -->|Yes| I[Generate FCM token]
    L -->|No| M
    I --> K[Register token with Braze]

    %% Configuration requirements
    subgraph Config[Required configuration]
        N['google-services.json' file is present]
        O['com.google.firebase:firebase-messaging' in gradle]
        P['com.google.gms.google-services' plugin in gradle]
    end

    %% Connect config to check
    N -.-> L
    O -.-> L
    P -.-> L
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
  theme: neutral
  fontSize: 10
---
flowchart TD

subgraph Display[Push Display]
    %% Push delivery flow
    W[Push sent to FCM servers] --> X{Did FCM receive push?}
    X -->|App is terminated| Y[FCM cannot deliver push to the app]
    X -->|Delivery conditions met| X1[App receives push from FCM]
    X1 --> X2[Braze SDK receives push]
    X2 --> R[Push type?]

    %% Push Display Flow
    R -->|Standard push| S{Is push permission required?}
    R -->|Silent push| T[Braze SDK processes silent push]
    S -->|Yes| S1{Did the user grant push permission?}
    S -->|No| V[Notification is shown to the user]
    S1 -->|Yes| V
    S1 -->|No| U[Notification is not shown to the user]
end

%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px

class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass

Configurando notificações por push

Limites de frequência

A API do Firebase Cloud Messaging (FCM) tem um limite de frequência padrão de 600.000 requisições por minuto. Se você atingir esse limite, a Braze tentará novamente automaticamente em alguns minutos. Para solicitar um aumento, entre em contato com o Firebase Support.

Etapa 1: Adicione o Firebase ao seu projeto

Primeiro, adicione o Firebase ao seu projeto Android. Para instruções passo a passo, consulte o guia de configuração do Firebase do Google.

Etapa 2: Adicione o Cloud Messaging às suas dependências

Em seguida, adicione a biblioteca do Cloud Messaging às dependências do seu projeto. No seu projeto Android, abra o build.gradle e adicione a seguinte linha ao bloco dependencies.

implementation "google.firebase:firebase-messaging:+"

Suas dependências devem ficar parecidas com o seguinte:

dependencies {
  implementation project(':android-sdk-ui')
  implementation "com.google.firebase:firebase-messaging:+"
}

Etapa 3: Ative a API do Firebase Cloud Messaging

No Google Cloud, selecione o projeto que seu app Android está usando e ative a Firebase Cloud Messaging API.

API do Firebase Cloud Messaging ativada

Etapa 4: Crie uma conta de serviço

Em seguida, crie uma nova conta de serviço para que a Braze possa fazer chamadas de API autorizadas ao registrar tokens FCM. No Google Cloud, acesse Service Accounts e escolha seu projeto. Na página Service Accounts, selecione Create Service Account.

Página inicial de contas de serviço de um projeto com "Create Service Account" destacado.

Insira um nome, ID e descrição para a conta de serviço e selecione Create and continue.

No campo Role, encontre e selecione Firebase Cloud Messaging API Admin na lista de papéis. Para um acesso mais restrito, crie um papel personalizado com a permissão cloudmessaging.messages.create e escolha-o na lista. Quando terminar, selecione Done.

Formulário "Grant this service account access to project" com "Firebase Cloud Messaging API Admin" selecionado como papel.

Etapa 5: Gere credenciais JSON

Em seguida, gere credenciais JSON para sua conta de serviço FCM. No Google Cloud IAM & Admin, acesse Service Accounts e escolha seu projeto. Localize a conta de serviço FCM que você criou anteriormente, e selecione  Actions > Manage Keys.

Página inicial de contas de serviço do projeto com o menu "Actions" aberto.

Selecione Add Key > Create new key.

Conta de serviço selecionada com o menu "Add Key" aberto.

Escolha JSON e selecione Create. Se você criou sua conta de serviço usando um ID de projeto do Google Cloud diferente do ID do seu projeto FCM, será necessário atualizar manualmente o valor atribuído a project_id no seu arquivo JSON.

Lembre-se de onde você baixou a chave—você precisará dela na próxima etapa.

Formulário para criar uma chave privada com "JSON" selecionado.

Etapa 6: Faça upload das suas credenciais JSON na Braze

Em seguida, faça upload das suas credenciais JSON no dashboard da Braze. Na Braze, selecione  Settings > App Settings.

Menu "Settings" aberto na Braze com "App Settings" destacado.

Em Push Notification Settings do seu app Android, escolha Firebase, selecione Upload JSON File e faça upload das credenciais que você gerou anteriormente. Quando terminar, selecione Save.

Formulário de "Push Notification Settings" com "Firebase" selecionado como provedor de push.

Etapa 7: Configure o registro automático de tokens

Quando um dos seus usuários aceitar notificações por push, seu app precisa gerar um token FCM no dispositivo dele antes de você poder enviar notificações por push. Com o SDK da Braze, você pode ativar o registro automático de tokens FCM para cada dispositivo de usuário nos arquivos de configuração da Braze do seu projeto.

Primeiro, acesse o Firebase Console, abra seu projeto e selecione  Settings > Project settings.

Projeto Firebase com o menu "Settings" aberto.

Selecione Cloud Messaging e, em Firebase Cloud Messaging API (V1), copie o número no campo Sender ID.

Página "Cloud Messaging" do projeto Firebase com o "Sender ID" destacado.

Em seguida, abra seu projeto no Android Studio e use o Sender ID do Firebase para ativar o registro automático de tokens FCM no seu braze.xml ou BrazeConfig.

Para configurar o registro automático de tokens FCM, adicione as seguintes linhas ao seu arquivo braze.xml:

<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

Substitua FIREBASE_SENDER_ID pelo valor que você copiou das configurações do seu projeto Firebase. Seu braze.xml deve ficar parecido com o seguinte:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string translatable="false" name="com_braze_api_key">12345ABC-6789-DEFG-0123-HIJK456789LM</string>
  <bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">603679405392</string>
</resources>

Para configurar o registro automático de tokens FCM, adicione as seguintes linhas ao seu BrazeConfig:

.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")

Substitua FIREBASE_SENDER_ID pelo valor que você copiou das configurações do seu projeto Firebase. Seu BrazeConfig deve ficar parecido com o seguinte:

BrazeConfig brazeConfig = new BrazeConfig.Builder()
  .setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
  .setCustomEndpoint("sdk.iad-01.braze.com")
  .setSessionTimeout(60)
  .setHandlePushDeepLinksAutomatically(true)
  .setGreatNetworkDataFlushInterval(10)
  .setIsFirebaseCloudMessagingRegistrationEnabled(true)
  .setFirebaseCloudMessagingSenderIdKey("603679405392")
  .build();
Braze.configure(this, brazeConfig);
val brazeConfig = BrazeConfig.Builder()
  .setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
  .setCustomEndpoint("sdk.iad-01.braze.com")
  .setSessionTimeout(60)
  .setHandlePushDeepLinksAutomatically(true)
  .setGreatNetworkDataFlushInterval(10)
  .setIsFirebaseCloudMessagingRegistrationEnabled(true)
  .setFirebaseCloudMessagingSenderIdKey("603679405392")
  .build()
Braze.configure(this, brazeConfig)

Usando vários projetos Firebase

Se o seu app usa vários projetos Firebase, siga estas etapas:

  1. Mantenha o push da Braze no projeto Firebase padrão inicializado a partir do google-services.json do seu app.
  2. Se você usa um serviço de mensagens Firebase personalizado, conclua a etapa Registrar IDs de instalação em serviços de mensagens Firebase personalizados.
  3. Se o seu app obtém um token por push de outra forma, defina manualmente registeredPushToken conforme mostrado na dica anterior.

Para detalhes de versão, consulte os changelogs do SDK.

Etapa 8: Remova requisições automáticas na sua classe Application

Para evitar que a Braze dispare requisições de rede desnecessárias toda vez que você enviar notificações por push silenciosas, remova quaisquer requisições de rede automáticas configuradas no método onCreate() da sua classe Application. Para saber mais, consulte Android Developer Reference: Application.

Exibindo notificações

Etapa 1: Registrar o Braze Firebase Messaging Service

Você pode criar um Firebase Messaging Service novo, existente ou não Braze. Escolha o que melhor atende às suas necessidades.

A Braze inclui um serviço para lidar com o recebimento de push e intents de abertura. Nossa classe BrazeFirebaseMessagingService precisa ser registrada no seu AndroidManifest.xml:

<service android:name="com.braze.push.BrazeFirebaseMessagingService"
  android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT" />
  </intent-filter>
</service>

Nosso código de notificação também usa BrazeFirebaseMessagingService para lidar com o rastreamento de ações de abertura e clique. Esse serviço deve ser registrado no AndroidManifest.xml para funcionar corretamente. Além disso, lembre-se de que a Braze prefixa as notificações do nosso sistema com uma chave exclusiva para que renderizemos apenas notificações enviadas pelos nossos sistemas. Você pode registrar serviços adicionais separadamente para renderizar notificações enviadas por outros serviços FCM. Consulte o AndroidManifest.xml no app de exemplo de push do Firebase.

Se você já tem um Firebase Messaging Service registrado, pode passar objetos RemoteMessage para a Braze via BrazeFirebaseMessagingService.handleBrazeRemoteMessage(). Esse método só exibirá uma notificação se o objeto RemoteMessage tiver sido originado da Braze e será ignorado com segurança caso contrário.

Registrar Installation IDs em serviços Firebase Messaging personalizados

Se você está usando o firebase-messaging v25.1.0 ou posterior, o registro do Firebase usa o Firebase Installation ID. No seu serviço Firebase Messaging personalizado, sobrescreva onRegistered e defina registeredPushToken.

public class MyFirebaseMessagingService extends FirebaseMessagingService {
  @Override
  public void onRegistered(String installationId) {
    super.onRegistered(installationId);
    Braze.getInstance(this).setRegisteredPushToken(installationId);
  }

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
      // This Remote Message originated from Braze and a push notification was displayed.
      // No further action is needed.
    } else {
      // This Remote Message did not originate from Braze.
      // No action was taken and you can safely pass this Remote Message to other handlers.
    }
  }
}
class MyFirebaseMessagingService : FirebaseMessagingService() {
  override fun onRegistered(installationId: String) {
    super.onRegistered(installationId)
    Braze.getInstance(this).registeredPushToken = installationId
  }

  override fun onMessageReceived(remoteMessage: RemoteMessage?) {
    super.onMessageReceived(remoteMessage)
    if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
      // This Remote Message originated from Braze and a push notification was displayed.
      // No further action is needed.
    } else {
      // This Remote Message did not originate from Braze.
      // No action was taken and you can safely pass this Remote Message to other handlers.
    }
  }
}

Se você tem outro Firebase Messaging Service que também gostaria de usar, pode especificar um Firebase Messaging Service de fallback para ser chamado caso seu aplicativo receba um push que não seja da Braze.

No seu braze.xml, especifique:

<bool name="com_braze_fallback_firebase_cloud_messaging_service_enabled">true</bool>
<string name="com_braze_fallback_firebase_cloud_messaging_service_classpath">com.company.OurFirebaseMessagingService</string>

ou defina via configuração em tempo de execução:

BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setFallbackFirebaseMessagingServiceEnabled(true)
        .setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
        .build();
Braze.configure(this, brazeConfig);
val brazeConfig = BrazeConfig.Builder()
        .setFallbackFirebaseMessagingServiceEnabled(true)
        .setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
        .build()
Braze.configure(this, brazeConfig)

Etapa 2: Adequar os ícones pequenos às diretrizes de design

Para informações gerais sobre ícones de notificação do Android, consulte a Visão geral de notificações.

A partir do Android N, você deve atualizar ou remover os ativos de ícones pequenos de notificação que envolvam cores. O sistema Android (não o SDK da Braze) ignora todos os canais não alfa e de transparência em ícones de ação e no ícone pequeno de notificação. Em outras palavras, o Android converterá todas as partes do ícone pequeno de notificação para monocromático, exceto as regiões transparentes.

Para criar um ativo de ícone pequeno de notificação que seja exibido corretamente:

  • Remova todas as cores da imagem, exceto branco.
  • Todas as outras regiões não brancas do ativo devem ser transparentes.

Os ícones grande e pequeno a seguir são exemplos de ícones projetados corretamente:

Um ícone pequeno aparecendo no canto inferior de um ícone grande ao lado de uma mensagem que diz "Hey I'm on my way to the bar but.."

Etapa 3: Configurar os ícones de notificação

Especificando ícones no braze.xml

A Braze permite que você configure seus ícones de notificação especificando recursos drawable no seu braze.xml:

<drawable name="com_braze_push_small_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>
<drawable name="com_braze_push_large_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>

Definir um ícone pequeno de notificação é obrigatório. Se você não definir um, a Braze usará o ícone do aplicativo como ícone pequeno de notificação por padrão, o que pode não ter uma aparência ideal.

Definir um ícone grande de notificação é opcional, mas recomendado.

Especificando a cor de destaque do ícone

A cor de destaque do ícone de notificação pode ser substituída no seu braze.xml. Se a cor não for especificada, a cor padrão será o mesmo cinza que o Lollipop usa para notificações do sistema.

<integer name="com_braze_default_notification_accent_color">0xFFf33e3e</integer>

Você também pode usar uma referência de cor opcionalmente:

<color name="com_braze_default_notification_accent_color">@color/my_color_here</color>

Para permitir que a Braze abra automaticamente seu app e quaisquer deep links quando uma notificação por push for clicada, defina com_braze_handle_push_deep_links_automatically como true no seu braze.xml:

<bool name="com_braze_handle_push_deep_links_automatically">true</bool>

Esse flag também pode ser definido via configuração em tempo de execução:

BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setHandlePushDeepLinksAutomatically(true)
        .build();
Braze.configure(this, brazeConfig);
val brazeConfig = BrazeConfig.Builder()
        .setHandlePushDeepLinksAutomatically(true)
        .build()
Braze.configure(this, brazeConfig)

Se você quiser lidar com deep links de forma personalizada, precisará criar um retorno de chamada de push que escute os intents de push recebido e aberto da Braze. Para saber mais, consulte Usando um retorno de chamada para eventos de push.

Tratamento de notificações em primeiro plano

Por padrão, quando uma notificação por push chega enquanto o app está em primeiro plano no Android, o sistema a exibe automaticamente. Para que a Braze processe a carga útil da notificação por push (para rastreamento de análises, tratamento de deep links e processamento personalizado), encaminhe os dados de push recebidos para a Braze dentro do seu método FirebaseMessagingService.onMessageReceived.

Como funciona

Quando você chama BrazeFirebaseMessagingService.handleBrazeRemoteMessage, a Braze determina se a carga útil é uma notificação por push da Braze e, se for, cria e exibe a notificação com o método NotificationManagerCompat. Diferentemente do iOS, o Android exibe notificações independentemente de o app estar em primeiro plano ou em segundo plano.

package com.example.push;

import com.braze.push.BrazeFirebaseMessagingService;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        // Let Braze process the payload and display the notification
        if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
            // Braze successfully handled the push notification
        } else {
            // Handle non-Braze messages
        }
    }
}
package com.example.push

import com.braze.push.BrazeFirebaseMessagingService
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        super.onMessageReceived(remoteMessage)

        // Let Braze process the payload and display the notification
        if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
            // Braze successfully handled the push notification
        } else {
            // Handle non-Braze messages
        }
    }
}

Para saber mais, consulte o exemplo de integração Firebase no repositório do SDK Android da Braze.

Personalização do comportamento em primeiro plano

Se você quiser personalizar o comportamento em primeiro plano, como suprimir a notificação do sistema ou exibir uma interface no app, você pode:

  • Usar subscribeToPushNotificationEvents para reagir a eventos de push e tratar deep links com o método BrazeNotificationUtils.routeUserWithNotificationOpenedIntent. Para saber mais, consulte o exemplo de push Firebase.
  • Criar e publicar sua própria notificação usando um IBrazeNotificationFactory personalizado, ou suprimir a notificação ao não chamar notificationManager.notify no seu fluxo de tratamento.

Para saber mais sobre personalização de notificações, consulte Fábrica de notificação personalizada.

Siga as instruções encontradas na documentação para desenvolvedores Android sobre deep linking caso ainda não tenha adicionado deep links ao seu app. Para saber mais sobre o que são deep links, consulte nosso artigo de perguntas frequentes.

O dashboard da Braze suporta a configuração de deep links ou URLs web em Campaigns de notificação por push e Canvas que serão abertos quando a notificação for clicada.

A configuração "On Click Behavior" no dashboard da Braze com "Deep Link Into Application" selecionado no menu suspenso.

Personalização do comportamento da back stack

O SDK Android, por padrão, colocará a activity principal do launcher do app host na back stack ao seguir deep links de push. A Braze permite que você defina uma activity personalizada para abrir na back stack no lugar da activity principal do launcher ou desabilite a back stack completamente.

Por exemplo, para definir uma activity chamada YourMainActivity como a activity da back stack usando a configuração em tempo de execução:

BrazeConfig brazeConfig = new BrazeConfig.Builder()
        .setPushDeepLinkBackStackActivityEnabled(true)
        .setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
        .build();
Braze.configure(this, brazeConfig);
val brazeConfig = BrazeConfig.Builder()
        .setPushDeepLinkBackStackActivityEnabled(true)
        .setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
        .build()
Braze.configure(this, brazeConfig)

Veja a configuração equivalente no seu braze.xml. O nome da classe deve ser o mesmo retornado por Class.forName().

<bool name="com_braze_push_deep_link_back_stack_activity_enabled">true</bool>
<string name="com_braze_push_deep_link_back_stack_activity_class_name">your.package.name.YourMainActivity</string>

Etapa 5: Definir canais de notificação

O SDK Android da Braze suporta canais de notificação do Android. Se uma notificação da Braze não contiver o ID de um canal de notificação ou contiver um ID de canal inválido, a Braze exibirá a notificação com o canal de notificação padrão definido no SDK. Os usuários da empresa usam os canais de notificação do Android na plataforma para agrupar notificações.

Para definir o nome visível ao usuário do canal de notificação padrão da Braze, use BrazeConfig.setDefaultNotificationChannelName().

Para definir a descrição visível ao usuário do canal de notificação padrão da Braze, use BrazeConfig.setDefaultNotificationChannelDescription().

Atualize quaisquer Campaigns de API com o parâmetro do objeto de push Android para incluir o campo notification_channel. Se esse campo não for especificado, a Braze enviará a carga útil da notificação com o ID do canal de fallback do dashboard.

Além do canal de notificação padrão, a Braze não criará nenhum canal. Todos os outros canais devem ser definidos programaticamente pelo app host e então inseridos no dashboard da Braze.

O nome e a descrição padrão do canal também podem ser configurados no braze.xml.

<string name="com_braze_default_notification_channel_name">Your channel name</string>
<string name="com_braze_default_notification_channel_description">Your channel description</string>

Etapa 6: Testar exibição e análises de notificações

Teste de exibição

Neste ponto, você deve conseguir ver notificações enviadas pela Braze. Para testar, acesse a página Campaigns no dashboard da Braze e crie uma Campaign de Push Notification. Escolha Android Push e projete sua mensagem. Em seguida, clique no ícone de olho no criador para abrir o remetente de teste. Insira o ID de usuário ou endereço de e-mail do seu usuário atual e clique em Send Test. Você deve ver a notificação por push aparecer no seu dispositivo.

A guia "Test" de uma Campaign de notificação por push no dashboard da Braze.

Para problemas relacionados à exibição de push, consulte nosso guia de solução de problemas.

Teste de análises

Neste ponto, você também deve ter o registro de análises para aberturas de notificações por push. Clicar na notificação quando ela chegar deve fazer com que as Aberturas Diretas na página de resultados da Campaign aumentem em 1. Consulte nosso artigo de relatórios de push para um detalhamento sobre análises de push.

Para problemas relacionados às análises de push, consulte nosso guia de solução de problemas.

Teste via linha de comando

Se você quiser testar notificações no app e notificações por push via interface de linha de comando, pode enviar uma única notificação pelo terminal usando cURL e a API de envio de mensagens. Você precisará substituir os seguintes campos pelos valores corretos para o seu caso de teste:

  • YOUR_API_KEY (Acessar Settings > API Keys.)
  • YOUR_EXTERNAL_USER_ID (Pesquise um perfil na página Search Users.)
  • YOUR_KEY1 (opcional)
  • YOUR_VALUE1 (opcional)
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
  "external_user_ids":["YOUR_EXTERNAL_USER_ID"],
  "messages": {
    "android_push": {
      "title":"Test push title",
      "alert":"Test push",
      "extra": {
        "YOUR_KEY1":"YOUR_VALUE1"
      }
    }
  }
}' https://rest.iad-01.braze.com/messages/send

Este exemplo usa a instância US-01. Se você não está nesta instância, substitua o endpoint US-01 pelo seu endpoint.

Notificações por push de conversa

Aba de notificações do Android mostrando uma seção de Conversas com três notificações de conversa agrupadas de diferentes contatos.

A iniciativa de pessoas e conversas é uma iniciativa de longo prazo do Android que visa elevar pessoas e conversas nas superfícies do sistema do telefone. Essa prioridade é baseada no fato de que a comunicação e a interação com outras pessoas ainda é a área funcional mais valorizada e importante para a maioria dos usuários do Android em todos os perfis demográficos.

Requisitos de uso

  • Esse tipo de notificação requer o SDK Android da Braze v15.0.0+ e dispositivos com Android 11+.
  • Dispositivos ou SDKs não compatíveis farão fallback para uma notificação por push padrão.

Esse recurso está disponível apenas pela REST API da Braze. Consulte o objeto push para Android para saber mais.

Erros de cota excedida do FCM

Quando o limite do Firebase Cloud Messaging (FCM) é excedido, o Google retorna erros de “cota excedida”. O limite padrão do FCM é de 600.000 solicitações por minuto. A Braze tenta reenviar as mensagens seguindo as práticas recomendadas pelo Google. No entanto, um grande volume desses erros pode prolongar o tempo de envio em vários minutos. Para mitigar o impacto potencial, a Braze enviará um alerta informando que o limite de frequência está sendo excedido e as medidas que você pode tomar para evitar os erros.

Para verificar seu limite atual, acesse Google Cloud Console > APIs & Services > Firebase Cloud Messaging API > Quotas & System Limits ou visite a página de cotas da API do FCM.

Práticas recomendadas

Recomendamos estas práticas para manter o volume desses erros baixo.

Solicitar um aumento de limite de frequência ao FCM

Para solicitar um aumento de limite de frequência ao FCM, você pode entrar em contato com o Suporte do Firebase diretamente ou fazer o seguinte:

  1. Acesse a página de cotas da API do FCM.
  2. Localize a cota Send requests per minute.
  3. Selecione Edit Quota.
  4. Insira um novo valor e envie sua solicitação.

Aplicar um limite de frequência no espaço de trabalho

Você pode aplicar um limite de frequência no espaço de trabalho para notificações por push do Android. Isso pode ajudar a regular a taxa de entrega das suas mensagens enviadas. Para saber mais, consulte Limites de frequência de envio de mensagens do espaço de trabalho.

Limites de frequência

As notificações por push têm limite de frequência, portanto, não tenha medo de enviar quantas forem necessárias para o seu aplicativo. O iOS e os servidores do serviço de Notificações por Push da Apple (APN) controlarão a frequência com que elas são entregues, e você não terá problemas por enviar muitas. Se suas notificações por push forem limitadas, elas poderão sofrer postergação até a próxima vez que o dispositivo enviar um pacote keep-alive ou receber outra notificação.

Configurando notificações por push

Etapa 1: Faça upload do seu token APNs

Antes de enviar uma notificação por push para iOS usando a Braze, você precisa fazer upload do seu arquivo de notificação por push .p8, conforme descrito na documentação do desenvolvedor da Apple:

  1. Na sua conta de desenvolvedor da Apple, acesse Certificates, Identifiers & Profiles.
  2. Em Keys, selecione All e clique no botão adicionar (+) no topo da página.
  3. Em Key Description, insira um nome único para a chave de assinatura.
  4. Em Key Services, selecione a caixa de seleção serviço de Notificações por Push da Apple (APN) e clique em Continue. Clique em Confirm.
  5. Anote o ID da chave. Clique em Download para gerar e baixar a chave. Salve o arquivo baixado em um local seguro, pois você não poderá baixá-lo mais de uma vez.
  6. Na Braze, acesse Settings > App Settings e faça upload do arquivo .p8 em Apple Push Certificate. Você pode fazer upload do seu certificado de push de desenvolvimento ou de produção. Para testar notificações por push depois que seu app estiver disponível na App Store, é recomendável configurar um espaço de trabalho separado para a versão de desenvolvimento do seu app.
  7. Quando solicitado, insira o ID do pacote do seu app, o ID da chave e o ID da equipe. Você também precisará especificar se deseja enviar notificações para o ambiente de desenvolvimento ou de produção do seu app, que é definido pelo seu perfil de provisionamento.
  8. Quando terminar, selecione Save.

Etapa 2: Ative as capacidades de push

No Xcode, acesse a seção Signing & Capabilities do target principal do app e adicione a capacidade de notificações por push.

A seção 'Signing & Capabilities' em um projeto Xcode.

Etapa 3: Configure o tratamento de push

Você pode usar o SDK Swift para automatizar o processamento de notificações remotas recebidas da Braze. Essa é a forma mais simples de tratar notificações por push e é o método de tratamento recomendado.

Etapa 3.1: Ative a automação na propriedade push

Para ativar a integração automática de push, defina a propriedade automation da configuração push como true:

let configuration = Braze.Configuration(apiKey: "{YOUR-BRAZE-API-KEY}", endpoint: "{YOUR-BRAZE-API-ENDPOINT}")
configuration.push.automation = true
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:@"{YOUR-BRAZE-API-KEY}" endpoint:@"{YOUR-BRAZE-API-ENDPOINT}"];
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];

Isso instrui o SDK a:

  • Registrar seu aplicativo para notificações por push no sistema.
  • Solicitar a autorização/permissão de notificações por push na inicialização.
  • Fornecer dinamicamente implementações para os métodos de delegação do sistema relacionados a notificações por push.

Etapa 3.2: Substitua configurações individuais (opcional)

Para um controle mais granular, cada etapa de automação pode ser ativada ou desativada individualmente:

// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = true
configuration.push.automation.requestAuthorizationAtLaunch = false
// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];
configuration.push.automation.requestAuthorizationAtLaunch = NO;

Consulte Braze.Configuration.Push.Automation para todas as opções disponíveis e automation para mais informações sobre o comportamento da automação.

Etapa 3.1: Registre-se para notificações por push com APNs

Inclua o trecho de código apropriado no método application:didFinishLaunchingWithOptions: delegate do seu app para que os dispositivos dos seus usuários possam se registrar com APNs. Certifique-se de chamar todo o código de integração de push na thread principal do seu aplicativo.

A Braze também fornece categorias de push padrão para suporte a botões de ação por push, que devem ser adicionadas manualmente ao seu código de registro de push. Consulte botões de ação por push para etapas adicionais de integração.

Adicione o seguinte código ao método application:didFinishLaunchingWithOptions: do delegate do seu app.

application.registerForRemoteNotifications()
let center = UNUserNotificationCenter.current()
center.setNotificationCategories(Braze.Notifications.categories)
center.delegate = self
var options: UNAuthorizationOptions = [.alert, .sound, .badge]
if #available(iOS 12.0, *) {
  options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)
}
center.requestAuthorization(options: options) { granted, error in
  print("Notification authorization, granted: \(granted), error: \(String(describing: error))")
}
[application registerForRemoteNotifications];
UNUserNotificationCenter *center = UNUserNotificationCenter.currentNotificationCenter;
[center setNotificationCategories:BRZNotifications.categories];
center.delegate = self;
UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
if (@available(iOS 12.0, *)) {
  options = options | UNAuthorizationOptionProvisional;
}
[center requestAuthorizationWithOptions:options
                      completionHandler:^(BOOL granted, NSError *_Nullable error) {
                        NSLog(@"Notification authorization, granted: %d, "
                              @"error: %@)",
                              granted, error);
}];

Etapa 3.2: Registre tokens por push na Braze

Quando o registro com APNs estiver concluído, passe o deviceToken resultante para a Braze para ativar as notificações por push para o usuário.

Adicione o seguinte código ao método application(_:didRegisterForRemoteNotificationsWithDeviceToken:) do seu app:

AppDelegate.braze?.notifications.register(deviceToken: deviceToken)

Adicione o seguinte código ao método application:didRegisterForRemoteNotificationsWithDeviceToken: do seu app:

[AppDelegate.braze.notifications registerDeviceToken:deviceToken];

Etapa 3.3: Ative o tratamento de push

Em seguida, passe as notificações por push recebidas para a Braze. Essa etapa é necessária para o registro de análises de push e tratamento de links. Certifique-se de chamar todo o código de integração de push na thread principal do seu aplicativo.

Tratamento padrão de push

Para ativar o tratamento padrão de push da Braze, adicione o seguinte código ao método application(_:didReceiveRemoteNotification:fetchCompletionHandler:) do seu app:

if let braze = AppDelegate.braze, braze.notifications.handleBackgroundNotification(
  userInfo: userInfo,
  fetchCompletionHandler: completionHandler
) {
  return
}
completionHandler(.noData)

Em seguida, adicione o seguinte ao método userNotificationCenter(_:didReceive:withCompletionHandler:) do seu app:

if let braze = AppDelegate.braze, braze.notifications.handleUserNotification(
  response: response,
  withCompletionHandler: completionHandler
) {
  return
}
completionHandler()

Para ativar o tratamento padrão de push da Braze, adicione o seguinte código ao método application:didReceiveRemoteNotification:fetchCompletionHandler: do seu aplicativo:

BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleBackgroundNotificationWithUserInfo:userInfo
                                                                                                       fetchCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler(UIBackgroundFetchResultNoData);

Em seguida, adicione o seguinte código ao método (void)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: do seu app:

BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleUserNotificationWithResponse:response
                                                                                                  withCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler();
Tratamento de push em primeiro plano

Para ativar notificações por push em primeiro plano e permitir que a Braze as reconheça quando forem recebidas, implemente UNUserNotificationCenter.userNotificationCenter(_:willPresent:withCompletionHandler:). Se um usuário tocar na sua notificação em primeiro plano, o delegate de push userNotificationCenter(_:didReceive:withCompletionHandler:) será chamado e a Braze registrará o evento de clique no push.

func userNotificationCenter(
  _ center: UNUserNotificationCenter,
  willPresent notification: UNNotification,
  withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions
) -> Void) {
  if let braze = AppDelegate.braze {
    // Forward notification payload to Braze for processing.
    braze.notifications.handleForegroundNotification(notification: notification)
  }

  // Configure application's foreground notification display options.
  if #available(iOS 14.0, *) {
    completionHandler([.list, .banner])
  } else {
    completionHandler([.alert])
  }
}

Para ativar notificações por push em primeiro plano e permitir que a Braze as reconheça quando forem recebidas, implemente userNotificationCenter:willPresentNotification:withCompletionHandler:. Se um usuário tocar na sua notificação em primeiro plano, o delegate de push userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: será chamado e a Braze registrará o evento de clique no push.

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
  if (AppDelegate.braze != nil) {
    // Forward notification payload to Braze for processing.
    [AppDelegate.braze.notifications handleForegroundNotificationWithNotification:notification];
  }

  // Configure application's foreground notification display options.
  if (@available(iOS 14.0, *)) {
    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
  } else {
    completionHandler(UNNotificationPresentationOptionAlert);
  }
}

Testando notificações

Se você quiser testar notificações no app e notificações por push via linha de comando, pode enviar uma única notificação pelo terminal via CURL e a API de envio de mensagens. Você precisará substituir os seguintes campos pelos valores corretos para o seu caso de teste:

  • YOUR_API_KEY — disponível em Configurações > Chaves de API.
  • YOUR_EXTERNAL_USER_ID — disponível na página Pesquisar usuários. Para saber mais, consulte atribuir IDs de usuário.
  • YOUR_KEY1 (opcional)
  • YOUR_VALUE1 (opcional)

No exemplo a seguir, a instância US-01 está sendo usada. Se você não estiver nessa instância, consulte nossa documentação da API para ver em qual endpoint fazer solicitações.

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
  "external_user_ids":["YOUR_EXTERNAL_USER_ID"],
  "messages": {
    "apple_push": {
      "alert":"Test push",
      "extra": {
        "YOUR_KEY1":"YOUR_VALUE1"
      }
    }
  }
}' https://rest.iad-01.braze.com/messages/send

Inscrevendo-se para atualizações de notificações por push

Para acessar as cargas úteis de notificação por push processadas pela Braze, use o método Braze.Notifications.subscribeToUpdates(payloadTypes:_:).

Você pode usar o parâmetro payloadTypes para especificar se deseja se inscrever para notificações envolvendo eventos de abertura de push, eventos de recebimento de push ou ambos.

// This subscription is maintained through a Braze cancellable, which will observe for changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.notifications.subscribeToUpdates(payloadTypes: [.open, .received]) { payload in
  print("Braze processed notification with title '\(payload.title)' and body '\(payload.body)'")
}
NSInteger filtersValue = BRZNotificationsPayloadTypeFilter.opened.rawValue | BRZNotificationsPayloadTypeFilter.received.rawValue;
BRZNotificationsPayloadTypeFilter *filters = [[BRZNotificationsPayloadTypeFilter alloc] initWithRawValue: filtersValue];
BRZCancellable *cancellable = [notifications subscribeToUpdatesWithPayloadTypes:filters update:^(BRZNotificationsPayload * _Nonnull payload) {
  NSLog(@"Braze processed notification with title '%@' and body '%@'", payload.title, payload.body);
}];

Tratamento de notificações em primeiro plano

Por padrão, quando uma notificação por push chega enquanto seu app está em primeiro plano, o iOS não a exibe automaticamente. Para exibir notificações por push em primeiro plano e rastreá-las com a análise de dados da Braze, chame o método handleForegroundNotification(notification:) dentro da sua implementação de UNUserNotificationCenterDelegate.userNotificationCenter(_:willPresent:withCompletionHandler:).

Como funciona

Quando você chama handleForegroundNotification(notification:), a Braze processa a carga útil da notificação para registrar análises e tratar deep links ou ações de botões. O comportamento real de exibição é controlado pelas UNNotificationPresentationOptions que você passa para o completion handler.

import BrazeKit
import UserNotifications

extension AppDelegate: UNUserNotificationCenterDelegate {
  func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    willPresent notification: UNNotification,
    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
  ) {
    // Let Braze process the notification payload
    if let braze = AppDelegate.braze {
      braze.notifications.handleForegroundNotification(notification: notification)
    }

    // Control how the notification appears in the foreground
    if #available(iOS 14.0, *) {
      completionHandler([.banner, .list, .sound])
    } else {
      completionHandler([.alert, .sound])
    }
  }
}

Para um exemplo completo, consulte o exemplo de integração manual de notificações por push no repositório do SDK Swift da Braze.

Push primers

Campaigns de push primer incentivam seus usuários a ativar notificações por push no dispositivo para o seu app. Isso pode ser feito sem personalização de SDK usando nosso push primer sem código.

Gerenciamento dinâmico de gateway APNs

O gerenciamento dinâmico de gateway do serviço de Notificações por Push da Apple (APNs) melhora a confiabilidade e a eficiência das notificações por push no iOS detectando automaticamente o ambiente APNs correto. Anteriormente, era necessário selecionar manualmente os ambientes APNs (desenvolvimento ou produção) para suas notificações por push, o que às vezes levava a configurações incorretas de gateway, falhas de entrega e erros BadDeviceToken.

Com o gerenciamento dinâmico de gateway APNs, você terá:

  • Confiabilidade aprimorada: as notificações são sempre entregues ao ambiente APNs correto, reduzindo falhas de entrega.
  • Configuração simplificada: não é mais necessário gerenciar manualmente as configurações de gateway APNs.
  • Resiliência a erros: valores de gateway inválidos ou ausentes são tratados de forma adequada, garantindo um serviço ininterrupto.

Pré-requisitos

A Braze oferece suporte ao gerenciamento dinâmico de gateway APNs para notificações por push no iOS com o seguinte requisito de versão do SDK:

Como funciona

Quando um app iOS se integra com o SDK Swift da Braze, ele envia dados relacionados ao dispositivo, incluindo aps-environment, para a API do SDK da Braze, se disponível. O valor apns_gateway indica se o app está usando o ambiente APNs de desenvolvimento (dev) ou produção (prod).

A Braze também armazena o valor de gateway reportado para cada dispositivo. Se um novo valor de gateway válido for recebido, a Braze atualiza o valor armazenado automaticamente.

Quando a Braze envia uma notificação por push:

  • Se um valor de gateway válido (dev ou prod) estiver armazenado para o dispositivo, a Braze o utiliza para determinar o ambiente APNs correto.
  • Se nenhum valor de gateway estiver armazenado, a Braze usa como padrão o ambiente APNs configurado na página App Settings.

Perguntas frequentes

Por que esse recurso foi criado?

Com o gerenciamento dinâmico de gateway APNs, o ambiente correto é selecionado automaticamente. Anteriormente, era necessário configurar manualmente o gateway APNs, o que poderia causar erros BadDeviceToken, invalidação de tokens e possíveis problemas de limite de frequência do APNs.

Como isso impacta o desempenho de entrega de push?

Esse recurso melhora as taxas de entrega ao sempre direcionar os tokens por push para o ambiente APNs correto, evitando falhas causadas por gateways mal configurados.

Posso desativar esse recurso?

O gerenciamento dinâmico de gateway APNs está ativado por padrão e oferece melhorias de confiabilidade. Se você tiver casos de uso específicos que exigem seleção manual de gateway, entre em contato com o suporte da Braze.

Sobre notificações por push para Android TV

Ilustração de dispositivo Android TV usada no guia de notificações por push para Android TV.

Embora não seja um recurso nativo, a integração de push para Android TV é possível utilizando o SDK Android da Braze e o Firebase Cloud Messaging para registrar um token por push para Android TV. No entanto, você deve criar uma interface para exibir a carga útil da notificação após ela ser recebida.

Pré-requisitos

Para usar esse recurso, você deve concluir o seguinte:

Configurando notificações por push

Para configurar notificações por push para Android TV:

  1. Crie uma visualização personalizada no seu app para exibir suas notificações.
  2. Crie uma fábrica de notificações personalizada. Isso substitui o comportamento padrão do SDK e permite que você exiba as notificações manualmente. Ao retornar null, isso impede que o SDK processe a notificação e requer código personalizado para exibi-la. Após concluir essas etapas, você pode começar a enviar push para Android TV.

  3. (Opcional) Para rastrear análises de cliques de forma eficaz, configure o rastreamento de análises de cliques. Isso pode ser feito criando um retorno de chamada de push para escutar intents de push aberto e recebido da Braze.

Testando notificações por push para Android TV

Para testar se sua implementação de push foi bem-sucedida, envie uma notificação pelo dashboard da Braze como faria normalmente para um dispositivo Android.

  • Se o aplicativo estiver fechado: A mensagem push exibe uma notificação toast na tela.
  • Se o aplicativo estiver aberto: Você tem a oportunidade de exibir a mensagem na sua própria interface hospedada. Siga o estilo de interface das In-App Messages do SDK Android para dispositivos móveis.

Práticas recomendadas

Para profissionais de marketing que usam a Braze, lançar uma campanha para Android TV é idêntico a lançar um push para apps Android para dispositivos móveis. Para segmentar esses dispositivos exclusivamente, selecione o app Android TV na segmentação.

A resposta de entrega e clique retornada pelo FCM segue a mesma convenção de um dispositivo Android móvel; portanto, quaisquer erros ficam visíveis em Observabilidade de envio de mensagens.

Pré-requisitos

Antes de poder usar esse recurso, você precisará integrar o SDK Cordova da Braze. Após integrar o SDK, a funcionalidade básica de notificação por push é ativada por padrão. Para usar notificações por push ricas e Push Stories, você precisará configurá-las individualmente. Para usar mensagens push no iOS, você também precisa fazer upload de um certificado push válido.

Ativando deep linking para push

Por padrão, o SDK Cordova da Braze não gerencia automaticamente deep links de notificações por push. Para ativar o deep linking para push, siga as etapas de configuração em Deep linking. Para saber mais sobre essas e outras opções de configuração de push, consulte Configurações opcionais.

Desativando notificações por push básicas (somente iOS)

Depois de integrar o SDK Cordova da Braze para iOS, a funcionalidade básica de notificação por push é ativada por padrão. Para desativar essa funcionalidade no seu app iOS, adicione o seguinte ao seu arquivo config.xml. Para saber mais, consulte Configurações opcionais.

<platform name="ios">
    <preference name="com.braze.ios_disable_automatic_push_registration" value="NO" />
    <preference name="com.braze.ios_disable_automatic_push_handling" value="NO" />
</platform>

Pré-requisitos

Antes de poder usar esse recurso, você precisará integrar o Flutter Braze SDK.

Configurando notificações por push

Etapa 1: Concluir a configuração inicial

Etapa 1.1: Registrar para push

Registre-se para push usando a API Firebase Cloud Messaging (FCM) do Google. Para um passo a passo completo, consulte as etapas a seguir no guia de integração de push nativo para Android:

  1. Adicionar o Firebase ao seu projeto.
  2. Adicionar o Cloud Messaging às suas dependências.
  3. Criar uma conta de serviço.
  4. Gerar credenciais JSON.
  5. Fazer upload das suas credenciais JSON na Braze.

Etapa 1.2: Obter o Google Sender ID

Primeiro, acesse o Firebase Console, abra seu projeto e selecione  Settings > Project settings.

O projeto Firebase com o menu "Settings" aberto.

Selecione Cloud Messaging e, em Firebase Cloud Messaging API (V1), copie o Sender ID para a área de transferência.

A página "Cloud Messaging" do projeto Firebase com o "Sender ID" destacado.

Etapa 1.3: Atualizar o braze.xml

Adicione o seguinte ao seu arquivo braze.xml. Substitua FIREBASE_SENDER_ID pelo sender ID que você copiou anteriormente.

<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

Etapa 1.1: Fazer upload dos certificados APNs

Gere um certificado do serviço de Notificações por Push da Apple (APN) e faça o upload no dashboard da Braze. Para um passo a passo completo, consulte Fazendo upload do seu certificado APNs.

Etapa 1.2: Adicionar suporte a notificações por push ao seu app

Siga o guia de integração nativa para iOS.

Etapa 2: Escutar eventos de notificação por push (opcional)

Para escutar eventos de notificação por push que a Braze detectou e processou, chame subscribeToPushNotificationEvents() e passe um argumento a ser executado.

// Create stream subscription
StreamSubscription pushEventsStreamSubscription;

pushEventsStreamSubscription = braze.subscribeToPushNotificationEvents((BrazePushEvent pushEvent) {
  print("Push Notification event of type ${pushEvent.payloadType} seen. Title ${pushEvent.title}\n and deeplink ${pushEvent.url}");
  // Handle push notification events
});

// Cancel stream subscription
pushEventsStreamSubscription.cancel();

Campos de evento de notificação por push

Para uma lista completa dos campos de notificação por push, consulte a tabela a seguir:

Nome do campo Tipo Descrição
payloadType String Especifica o tipo de carga útil da notificação. Os dois valores enviados pelo SDK Flutter da Braze são push_opened e push_received. Apenas eventos push_opened são compatíveis com o iOS.
url String Especifica a URL que foi aberta pela notificação.
useWebview Boolean Se true, a URL abre no app em uma webview modal. Se false, a URL abre no navegador do dispositivo.
title String Representa o título da notificação.
body String Representa o corpo ou o texto de conteúdo da notificação.
summaryText String Representa o texto resumido da notificação. Isso é mapeado a partir de subtitle no iOS.
badgeCount Number Representa a contagem de emblemas da notificação.
timestamp Number Representa o horário em que a carga útil foi recebida pelo aplicativo.
isSilent Boolean Se true, a carga útil é recebida silenciosamente. Para saber mais sobre o envio de notificações por push silenciosas no Android, consulte Notificações por push silenciosas no Android. Para saber mais sobre o envio de notificações por push silenciosas no iOS, consulte Notificações por push silenciosas no iOS.
isBrazeInternal Boolean Será true se uma carga útil de notificação foi enviada para um recurso interno do SDK, como sincronização de Feature Flag ou Uninstall Tracking. A carga útil é recebida silenciosamente para o usuário.
imageUrl String Especifica a URL associada à imagem da notificação.
brazeProperties Object Representa as propriedades da Braze associadas à Campaign (pares chave-valor).
ios Object Representa campos específicos do iOS.
android Object Representa campos específicos do Android.

Etapa 3: Testar a exibição de notificações por push

Para testar sua integração após configurar as notificações por push na camada nativa:

  1. Defina um usuário ativo no aplicativo Flutter. Para isso, inicialize seu plugin chamando braze.changeUser('your-user-id').
  2. Acesse Campaigns e crie uma nova Campaign de notificação por push. Escolha as plataformas que deseja testar.
  3. Componha sua notificação de teste e vá até a guia Test. Adicione o mesmo user-id como usuário teste e clique em Send Test.
  4. Em breve, você deverá receber a notificação no seu dispositivo. Talvez seja necessário verificar a central de notificações ou atualizar as configurações caso ela não seja exibida.

Para permitir que a Braze abra automaticamente seu app e qualquer deep link quando uma notificação por push é tocada, defina com_braze_handle_push_deep_links_automatically como true no seu braze.xml:

<bool name="com_braze_handle_push_deep_links_automatically">true</bool>

Essa flag também pode ser definida por meio da configuração em tempo de execução no código Android nativo:

val brazeConfig = BrazeConfig.Builder()
        .setHandlePushDeepLinksAutomatically(true)
        .build()
Braze.configure(this, brazeConfig)

Se preferir lidar com deep links de forma personalizada, use o listener subscribeToPushNotificationEvents() descrito na Etapa 2 para rotear o campo url do evento push_opened por conta própria. Para saber mais, consulte Deep linking.

Pré-requisitos

Antes de usar este recurso, você precisará integrar o SDK Android da Braze.

Configurando notificações por push

Celulares mais recentes fabricados pela Huawei vêm equipados com o Huawei Mobile Services (HMS), um serviço usado para entregar notificações por push em vez do Firebase Cloud Messaging (FCM) do Google.

Etapa 1: Registre-se para uma conta de desenvolvedor Huawei

Antes de começar, você precisará se registrar e configurar uma conta de desenvolvedor Huawei. Na sua conta Huawei, acesse My Projects > Project Settings > App Information e anote o App ID e o App secret.

Página de informações do app no console de desenvolvedor Huawei mostrando o App ID e o App secret.

Etapa 2: Crie um novo app Huawei no dashboard da Braze

No dashboard da Braze, acesse Configurações do app, listado na navegação de Configurações.

Clique em + Add App, forneça um nome (como My Huawei App), e selecione Android como a plataforma.

Caixa de diálogo Add App da Braze criando um app Android Huawei.

Depois que seu novo app da Braze for criado, localize as configurações de notificação por push e selecione Huawei como o provedor de push. Em seguida, forneça seu Huawei Client Secret e Huawei App ID.

Configurações do provedor de push Huawei na Braze com os campos Huawei App ID e Client Secret.

Etapa 3: Integre o SDK de mensagens Huawei ao seu app

A Huawei forneceu um codelab de integração Android detalhando a integração do Huawei Messaging Service ao seu aplicativo. Siga essas etapas para começar.

Após concluir o codelab, você precisará criar um Huawei Message Service personalizado para obter tokens por push e encaminhar mensagens ao SDK da Braze.

public class CustomPushService extends HmsMessageService {
  @Override
  public void onNewToken(String token) {
    super.onNewToken(token);
    Braze.getInstance(this.getApplicationContext()).setRegisteredPushToken(token);
  }

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(this.getApplicationContext(), remoteMessage.getDataOfMap())) {
      // Braze has handled the Huawei push notification
    }
  }
}
class CustomPushService: HmsMessageService() {
  override fun onNewToken(token: String?) {
    super.onNewToken(token)
    Braze.getInstance(applicationContext).setRegisteredPushToken(token!!)
  }

  override fun onMessageReceived(hmsRemoteMessage: RemoteMessage?) {
    super.onMessageReceived(hmsRemoteMessage)
    if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(applicationContext, hmsRemoteMessage?.dataOfMap)) {
      // Braze has handled the Huawei push notification
    }
  }
}

Depois de adicionar seu serviço de push personalizado, adicione o seguinte ao seu AndroidManifest.xml:

<service
  android:name="package.of.your.CustomPushService"
  android:exported="false">
  <intent-filter>
    <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
  </intent-filter>
</service>

Etapa 4: Gerencie notificações em primeiro plano

Por padrão, quando uma notificação por push chega enquanto seu app está em primeiro plano, a Huawei a exibe automaticamente. Para que a Braze processe a carga útil da notificação por push (para rastreamento de análises, tratamento de deep links e processamento personalizado), encaminhe os dados de push recebidos para a Braze dentro do método HmsMessageService.onMessageReceived.

Quando você chama BrazeHuaweiPushHandler.handleHmsRemoteMessageData, a Braze determina se a carga útil é uma notificação por push da Braze e, se for, cria e exibe a notificação. Para saber mais, consulte Gerenciando notificações em primeiro plano na documentação de notificações por push Android.

Para um exemplo completo, consulte a referência do handler Huawei na documentação do SDK Android da Braze.

Etapa 5: Teste suas notificações por push (opcional)

Neste ponto, você criou um novo app Android Huawei no dashboard da Braze, configurou-o com suas credenciais de desenvolvedor Huawei e integrou os SDKs da Braze e da Huawei ao seu app.

A seguir, podemos testar a integração testando uma nova Campaign de push na Braze.

Etapa 5.1: Crie uma nova Campaign de notificação por push

Na página Campaigns, crie uma nova Campaign e escolha Push Notification como seu tipo de mensagem.

Depois de nomear sua Campaign, escolha Android Push como a plataforma de push.

O criador de Campaign exibindo as plataformas de push disponíveis.

Em seguida, componha sua Campaign de push com um título e uma mensagem.

Etapa 5.2: Envie um push de teste

Na guia Test, insira seu ID de usuário, que você definiu no seu app usando o método changeUser(USER_ID_STRING), e clique em Send Test para enviar um push de teste.

A guia de teste no criador de Campaign mostra que você pode enviar uma mensagem de teste para si mesmo fornecendo seu ID de usuário e inserindo-o no campo "Add Individual Users".

Neste ponto, você deve receber uma notificação por push de teste no seu dispositivo Huawei (HMS) enviada pela Braze.

Etapa 5.3: Configure a segmentação Huawei (opcional)

Como seu app Huawei no dashboard da Braze é construído sobre a plataforma de push Android, você tem a flexibilidade de enviar push para todos os usuários Android (Firebase Cloud Messaging e Huawei Mobile Services), ou pode optar por segmentar o público da sua Campaign para apps específicos.

Para enviar push apenas para apps Huawei, crie um novo Segment e selecione seu app Huawei na seção Apps.

Filtro de app no Segment da Braze selecionando o app Huawei para direcionamento de push.

Claro, se você quiser enviar o mesmo push para todos os provedores de push Android, pode optar por não especificar o app, o que enviará para todos os apps Android configurados no espaço de trabalho atual.

Pré-requisitos

Antes de poder usar esse recurso, você precisará integrar o SDK React Native da Braze.

Configurando notificações por push

Etapa 1: Concluir a configuração inicial

Pré-requisitos

Antes de usar o Expo para notificações por push, você precisará configurar o plugin Braze Expo.

Etapa 1.1: Atualize seu arquivo app.json

Em seguida, atualize seu arquivo app.json para Android e iOS:

  • Android: Adicione a opção enableFirebaseCloudMessaging.
  • iOS: Adicione a opção enableBrazeIosPush.

Etapa 1.2: Adicione seu ID de remetente do Google

Primeiro, acesse o Firebase Console, abra seu projeto e selecione  Settings > Project settings.

O projeto Firebase com o menu "Settings" aberto.

Selecione Cloud Messaging e, em Firebase Cloud Messaging API (V1), copie o Sender ID para a área de transferência.

A página "Cloud Messaging" do projeto Firebase com o "Sender ID" destacado.

Em seguida, abra o arquivo app.json do seu projeto e defina a propriedade firebaseCloudMessagingSenderId como o Sender ID na área de transferência. Por exemplo:

"firebaseCloudMessagingSenderId": "693679403398"

Etapa 1.3: Adicione o caminho para o JSON do Google Services

No arquivo app.json do seu projeto, adicione o caminho para o arquivo google-services.json. Esse arquivo é necessário ao definir enableFirebaseCloudMessaging: true na sua configuração.

{
  "expo": {
    "android": {
      "googleServicesFile": "PATH_TO_GOOGLE_SERVICES"
    },
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          "androidApiKey": "YOUR-ANDROID-API-KEY",
          "iosApiKey": "YOUR-IOS-API-KEY",
          "enableBrazeIosPush": true,
          "enableFirebaseCloudMessaging": true,
          "firebaseCloudMessagingSenderId": "YOUR-FCM-SENDER-ID",
          "androidHandlePushDeepLinksAutomatically": true
        }
      ],
    ]
  }
}

Note que será necessário usar essas configurações em vez das instruções de configuração nativas se estiver dependendo de bibliotecas adicionais de notificação por push, como a Expo Notifications.

Se você não estiver usando o plugin Braze Expo, ou se preferir definir essas configurações nativamente, registre-se para push consultando o guia de integração nativa para push no Android.

Se você não estiver usando o plugin Braze Expo, ou se preferir definir essas configurações nativamente, registre-se para push consultando as etapas a seguir do guia de integração nativa para push no iOS:

Etapa 1.1: Solicitação de permissões para push

Se você não planeja solicitar permissões para push quando o app for iniciado, omita a chamada requestAuthorizationWithOptions:completionHandler: no seu AppDelegate. Então, pule para a Etapa 2. Caso contrário, siga o guia de integração nativa do iOS.

Etapa 1.2 (Opcional): Migre sua chave push

Se estava usando anteriormente o expo-notifications para gerenciar sua chave push, execute expo fetch:ios:certs na pasta raiz do seu aplicativo. Isso vai baixar sua chave push (um arquivo .p8), que poderá então ser enviada para o dashboard da Braze.

Etapa 2: Solicitar permissão para notificações por push

Use o método Braze.requestPushPermission() (disponível na versão v1.38.0 e superior) para solicitar permissão para notificações por push do usuário no iOS e no Android 13+. Para o Android 12 e versões anteriores, esse método não tem efeito.

Esse método recebe um parâmetro obrigatório que especifica quais permissões o SDK deve solicitar do usuário no iOS. Essas opções não têm efeito no Android.

const permissionOptions = {
  alert: true,
  sound: true,
  badge: true,
  provisional: false
};

Braze.requestPushPermission(permissionOptions);

Etapa 2.1: Ouça as notificações por push (opcional)

Além disso, você pode se inscrever em eventos em que a Braze detectou e tratou uma notificação por push recebida. Use a chave do listener Braze.Events.PUSH_NOTIFICATION_EVENT.

Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, data => {
  console.log(`Push Notification event of type ${data.payload_type} seen. Title ${data.title}\n and deeplink ${data.url}`);
  console.log(JSON.stringify(data, undefined, 2));
});
Campos de eventos de notificação por push

Para obter uma lista completa dos campos de notificação por push, consulte a tabela abaixo:

Nome do campo Tipo Descrição
payload_type String Especifica o tipo de carga útil da notificação. Os dois valores enviados pelo SDK da Braze para React Native são push_opened e push_received.
url String Especifica a URL que foi aberta pela notificação.
use_webview Booleano Se for true, a URL será aberta no app em uma webview modal. Se false, a URL será aberta no navegador do dispositivo.
title String Representa o título da notificação.
body String Representa o corpo ou o texto do conteúdo da notificação.
summary_text String Representa o texto resumido da notificação. Isso é mapeado a partir de subtitle no iOS.
badge_count Número Representa a contagem de emblemas da notificação.
timestamp Número Representa a hora em que a carga útil foi recebida pelo aplicativo.
is_silent Booleano Se true, a carga útil é recebida silenciosamente. Para detalhes sobre o envio de notificações por push silenciosas no Android, consulte Notificações por push silenciosas no Android. Para detalhes sobre o envio de notificações por push silenciosas no iOS, consulte Notificações por push silenciosas no iOS.
is_braze_internal Booleano Será true se uma carga útil de notificação tiver sido enviada para um recurso interno do SDK, como sincronização de Feature Flags ou Uninstall Tracking. A carga útil é recebida silenciosamente para o usuário.
image_url String Especifica a URL associada à imagem da notificação.
braze_properties Objeto Representa as propriedades da Braze associadas à Campaign (pares chave-valor).
ios Objeto Representa campos específicos do iOS.
android Objeto Representa campos específicos do Android.

Etapa 3: Ativar deep linking (opcional)

Para permitir que a Braze gerencie deep links dentro de componentes React quando uma notificação por push é clicada, primeiro implemente as etapas descritas na biblioteca React Native Linking, ou com a solução de sua escolha. Em seguida, siga as etapas adicionais abaixo.

Para saber mais sobre o que são deep links, consulte nosso artigo de perguntas frequentes.

Se você estiver usando o plugin Braze Expo, pode gerenciar deep links de notificações por push automaticamente definindo androidHandlePushDeepLinksAutomatically como true no seu app.json.

Para gerenciar deep links manualmente, consulte a documentação nativa do Android: Adicionando deep links.

Etapa 3.1: Armazene a carga útil da notificação por push ao iniciar o app

Adicione populateInitialPushPayloadFromIntent ao método onCreate() da sua atividade principal. Isso deve ser chamado antes que o React Native inicialize para capturar os dados do Intent inicial. Por exemplo:

override fun onCreate(savedInstanceState: Bundle?) {
  BrazeReactUtils.populateInitialPushPayloadFromIntent(intent)
  super.onCreate(savedInstanceState)
}

Além dos cenários básicos tratados pelo React Native Linking, implemente o método Braze.getInitialPushPayload e recupere o valor url para considerar deep links de notificações por push que abrem seu app quando ele não está em execução. Por exemplo:

// Handles deep links when an app is launched from a hard close via push click.
Braze.getInitialPushPayload(pushPayload => {
  if (pushPayload) {
    console.log('Braze.getInitialPushPayload is ' + pushPayload);
    showToast('Initial URL is ' + pushPayload.url);
    handleOpenUrl({ pushPayload.url });
  }
});

Isso inclui registrar um esquema de URL personalizado e implementar um manipulador de URL no seu AppDelegate. Para instruções completas de configuração, consulte Gerenciando deep links na documentação nativa do iOS.

Etapa 3.1: Armazene a carga útil da notificação por push ao iniciar o app

Para iOS, adicione populateInitialPayloadFromLaunchOptions ao método didFinishLaunchingWithOptions do seu AppDelegate. Por exemplo:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // ... Perform regular React Native setup

  BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:apiKey endpoint:endpoint];
  configuration.triggerMinimumTimeInterval = 1;
  configuration.logger.level = BRZLoggerLevelInfo;
  Braze *braze = [BrazeReactBridge initBraze:configuration];
  AppDelegate.braze = braze;

  [self registerForPushNotifications];
  [[BrazeReactUtils sharedInstance] populateInitialPayloadFromLaunchOptions:launchOptions];

  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
  // ... Perform regular React Native setup

  let configuration = Braze.Configuration(apiKey: apiKey, endpoint: endpoint)
  configuration.triggerMinimumTimeInterval = 1
  configuration.logger.level = .info
  let braze = BrazeReactBridge.initBraze(configuration)
  AppDelegate.braze = braze
  registerForPushNotifications()
  BrazeReactUtils.shared().populateInitialPayload(fromLaunchOptions: launchOptions)

  return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

Além dos cenários básicos tratados pelo React Native Linking, implemente o método Braze.getInitialPushPayload e recupere o valor url para considerar deep links de notificações por push que abrem seu app quando ele não está em execução. Por exemplo:

// Handles deep links when an app is launched from a hard close via push click.
Braze.getInitialPushPayload(pushPayload => {
  if (pushPayload) {
    console.log('Braze.getInitialPushPayload is ' + pushPayload);
    showToast('Initial URL is ' + pushPayload.url);
    handleOpenUrl({ pushPayload.url });
  }
});

Para ativar o suporte a Universal Links, implemente um delegado da Braze que determina se deve abrir uma URL específica e então registre-o com sua instância da Braze.

Crie um arquivo BrazeReactDelegate.swift no seu diretório iOS e adicione o seguinte. Substitua YOUR_DOMAIN_HOST pelo seu domínio real.

import Foundation
import BrazeKit
import UIKit

class BrazeReactDelegate: NSObject, BrazeDelegate {

  /// This delegate method determines whether to open a given URL.
  /// Reference the context to get additional details about the URL payload.
  func braze(_ braze: Braze, shouldOpenURL context: Braze.URLContext) -> Bool {
    if let host = context.url.host,
       host.caseInsensitiveCompare("YOUR_DOMAIN_HOST") == .orderedSame {
      // Sample custom handling of universal links
      let application = UIApplication.shared
      let userActivity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
      userActivity.webpageURL = context.url
      // Routes to the `continueUserActivity` method, which should be handled in your AppDelegate.
      application.delegate?.application?(
        application,
        continue: userActivity,
        restorationHandler: { _ in }
      )
      return false
    }
    // Let Braze handle links otherwise
    return true
  }
}

Em seguida, crie e registre seu BrazeReactDelegate em didFinishLaunchingWithOptions do arquivo AppDelegate.swift do seu projeto.

import BrazeKit

class AppDelegate: UIResponder, UIApplicationDelegate {

  static var braze: Braze?

  // Keep a strong reference to the BrazeDelegate so it is not deallocated.
  private var brazeDelegate: BrazeReactDelegate?

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
  ) -> Bool {
    // Other setup code (e.g., Braze initialization)

    brazeDelegate = BrazeReactDelegate()
    AppDelegate.braze?.delegate = brazeDelegate
    return true
  }
}

Crie um arquivo BrazeReactDelegate.h no seu diretório iOS e adicione o seguinte trecho de código.

#import <Foundation/Foundation.h>
#import <BrazeKit/BrazeKit-Swift.h>

@interface BrazeReactDelegate: NSObject<BrazeDelegate>

@end

Em seguida, crie um arquivo BrazeReactDelegate.m e adicione o seguinte trecho de código. Substitua YOUR_DOMAIN_HOST pelo seu domínio real.

#import "BrazeReactDelegate.h"
#import <UIKit/UIKit.h>

@implementation BrazeReactDelegate

/// This delegate method determines whether to open a given URL.
///
/// Reference the `BRZURLContext` object to get additional details about the URL payload.
- (BOOL)braze:(Braze *)braze shouldOpenURL:(BRZURLContext *)context {
  if ([[context.url.host lowercaseString] isEqualToString:@"YOUR_DOMAIN_HOST"]) {
    // Sample custom handling of universal links
    UIApplication *application = UIApplication.sharedApplication;
    NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
    userActivity.webpageURL = context.url;
    // Routes to the `continueUserActivity` method, which should be handled in your `AppDelegate`.
    [application.delegate application:application
                 continueUserActivity:userActivity restorationHandler:^(NSArray<id<UIUserActivityRestoring>> * _Nullable restorableObjects) {}];
    return NO;
  }
  // Let Braze handle links otherwise
  return YES;
}

@end

Em seguida, crie e registre seu BrazeReactDelegate em didFinishLaunchingWithOptions do arquivo AppDelegate.m do seu projeto.

#import "BrazeReactUtils.h"
#import "BrazeReactDelegate.h"

@interface AppDelegate ()

// Keep a strong reference to the BrazeDelegate to ensure it is not deallocated.
@property (nonatomic, strong) BrazeReactDelegate *brazeDelegate;

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Other setup code

  self.brazeDelegate = [[BrazeReactDelegate alloc] init];
  braze.delegate = self.brazeDelegate;
}

Para um exemplo de integração, consulte nosso app de amostra neste exemplo de AppDelegate.

Etapa 4: Gerencie notificações em primeiro plano

O gerenciamento de notificações em primeiro plano funciona de maneira diferente dependendo da sua plataforma e configuração. Escolha a abordagem que corresponde à sua integração:

Para iOS, o gerenciamento de notificações em primeiro plano é o mesmo da integração nativa em Swift. Chame handleForegroundNotification(notification:) dentro da sua implementação de UNUserNotificationCenterDelegate.userNotificationCenter(_:willPresent:withCompletionHandler:).

Para detalhes completos e exemplos de código, consulte Gerenciando notificações em primeiro plano na documentação de notificações por push do Swift.

Para Android, o gerenciamento de notificações em primeiro plano é o mesmo da integração nativa do Android. Chame BrazeFirebaseMessagingService.handleBrazeRemoteMessage dentro do seu método FirebaseMessagingService.onMessageReceived.

Para detalhes completos e exemplos de código, consulte Gerenciando notificações em primeiro plano na documentação de notificações por push do Android.

No fluxo de trabalho gerenciado pelo Expo, você não chama manipuladores de notificações nativos diretamente. Em vez disso, use a API de Notificações do Expo para controlar a apresentação em primeiro plano, enquanto o Plugin Braze para Expo lida automaticamente com o processamento nativo.

import * as Notifications from 'expo-notifications';
import Braze from '@braze/react-native-sdk';

// Control foreground presentation in Expo
Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,    // Show alert while in foreground
    shouldPlaySound: false,
    shouldSetBadge: false,
  }),
});

// React to Braze push events
const subscription = Braze.addListener('pushNotificationEvent', (event) => {
  console.log('Braze push event', {
    type: event.payload_type,   // "push_received" | "push_opened"
    title: event.title,
    url: event.url,
    is_silent: event.is_silent,
  });
  // Handle deep links, custom behavior, etc.
});

// Handle initial payload when app launches via push
Braze.getInitialPushPayload((payload) => {
  if (payload) {
    console.log('Initial push payload', payload);
  }
});

Para integrações de fluxo de trabalho bare, siga as abordagens nativas do iOS e Android.

Etapa 5: Envie uma notificação por push de teste

Nesse ponto, você deve conseguir enviar notificações para os dispositivos. Siga as etapas a seguir para testar sua integração push.

  1. Defina um usuário ativo no aplicativo React Native chamando o método Braze.changeUserId('your-user-id').
  2. Acesse Campaigns e crie uma nova Campaign de notificação por push. Escolha as plataformas que você gostaria de testar.
  3. Crie sua notificação de teste e vá para a guia Test. Adicione o mesmo user-id como usuário teste e clique em Send Test. Você deverá receber a notificação no seu dispositivo em breve.

Uma Campaign push da Braze mostrando que você pode adicionar seu próprio ID de usuário como destinatário de teste para testar sua notificação por push.

Usando o plugin Expo

Depois de configurar notificações por push para o Expo, você pode usá-lo para lidar com os seguintes comportamentos de notificações por push — sem precisar escrever nenhum código nas camadas nativas do Android ou iOS.

Encaminhando push do Android para FMS adicionais

Se quiser usar um Firebase Messaging Service (FMS) adicional, você pode especificar um FMS de fallback para ser chamado quando seu aplicativo receber um push que não seja da Braze. Por exemplo:

{
  "expo": {
    "plugins": [
      [
        "@braze/expo-plugin",
        {
          ...
          "androidFirebaseMessagingFallbackServiceEnabled": true,
          "androidFirebaseMessagingFallbackServiceClasspath": "com.company.OurFirebaseMessagingService"
        }
      ]
    ]
  }
}

Usando extensões de app com Expo Application Services

Se você estiver usando o Expo Application Services (EAS) e tiver ativado enableBrazeIosRichPush ou enableBrazeIosPushStories, será necessário declarar os identificadores de bundle correspondentes para cada extensão de app no seu projeto. Existem várias maneiras de abordar essa etapa, dependendo de como seu projeto está configurado para gerenciar a assinatura de código com o EAS.

Uma abordagem é usar a configuração appExtensions no seu arquivo app.json, seguindo a documentação de extensões de app do Expo. Como alternativa, você pode configurar a opção multitarget no seu arquivo credentials.json, seguindo a documentação de credenciais locais do Expo.

Solução de problemas

Estas são etapas comuns de solução de problemas para integrações de notificações por push com o SDK Braze React Native e o plugin Expo.

As notificações por push pararam de funcionar

Se as notificações por push pelo plugin Expo pararam de funcionar:

  1. Verifique se o SDK da Braze ainda está rastreando sessões.
  2. Verifique se o SDK não foi desativado por uma chamada explícita ou implícita a wipeData.
  3. Revise quaisquer atualizações recentes do Expo ou de suas bibliotecas relacionadas, pois pode haver conflitos com sua configuração da Braze.
  4. Revise as dependências de projeto adicionadas recentemente e verifique se elas estão substituindo manualmente seus métodos delegados de notificação por push existentes.

O token do dispositivo não é registrado na Braze

Se o token do seu dispositivo não está sendo registrado na Braze, primeiro revise As notificações por push pararam de funcionar.

Se o problema persistir, pode haver uma dependência separada interferindo na configuração de notificações por push da Braze. Você pode tentar removê-la ou chamar manualmente Braze.registerPushToken.

Se os deep links de notificações por push pararam de abrir após uma migração, verifique o seguinte:

  1. Confirme que a configuração do React Native Linking ainda é válida no seu app atualizado.
  2. Para integrações nativas iOS, confirme que você implementou populateInitialPayloadFromLaunchOptions e Braze.getInitialPushPayload para que, quando o app for iniciado a partir de um estado encerrado, ele consiga recuperar a carga útil inicial do push e passar sua url para o seu handler de deep link.
  3. Se você estiver usando o plugin Braze Expo, verifique se androidHandlePushDeepLinksAutomatically está configurado corretamente para sua implementação.
  4. Revise as dependências adicionadas recentemente em busca de substituições no tratamento de notificações ou no comportamento do app delegate.

Se você concluiu essas verificações e o problema persistir, abra um ticket de suporte e inclua os logs do SDK e as etapas de reprodução.

Pré-requisitos

Antes de poder usar esse recurso, você precisará integrar o Braze Web SDK. Você também precisará configurar notificações por push para o Web SDK. Observe que você só pode enviar notificações por push para usuários de iOS e iPadOS que estão usando Safari v16.4 ou posterior.

Configuração de push do Safari para dispositivos móveis

Etapa 1: Criar um arquivo de manifesto

Um manifesto de aplicativo web é um arquivo JSON que controla como seu website é apresentado quando instalado na tela inicial do usuário.

Por exemplo, você pode definir a cor do tema de fundo e o ícone que o App Switcher usa, se o app será renderizado em tela cheia para se parecer com um app nativo, ou se o app deve abrir no modo paisagem ou retrato.

Crie um novo arquivo manifest.json no diretório raiz do seu website, com os seguintes campos obrigatórios.

{
  "name": "your app name",
  "short_name": "your app name",
  "display": "fullscreen",
  "icons": [{
    "src": "favicon.ico",
    "sizes": "128x128",
  }]
}

A lista completa de campos suportados pode ser encontrada na documentação de manifesto de app web do MDN.

Adicione a seguinte tag <link> ao elemento <head> do seu website apontando para onde seu arquivo de manifesto está hospedado.

<link rel="manifest" href="/manifest.json" />

Etapa 3: Adicionar um service worker

Seu website precisa ter um arquivo de service worker que importe a biblioteca de service worker da Braze, conforme descrito em nosso guia de integração de web push.

Etapa 4: Adicionar à tela inicial

Navegadores populares (como Safari, Chrome, FireFox e Edge) oferecem suporte a notificações por web push em suas versões mais recentes. Para solicitar permissão de push no iOS ou iPadOS, seu website precisa ser adicionado à tela inicial do usuário selecionando Compartilhar > Adicionar à Tela de Início. Adicionar à Tela de Início permite que os usuários marquem seu website como favorito, adicionando seu ícone ao valioso espaço da tela inicial.

Um iPhone mostrando opções para adicionar um website aos favoritos e salvar na tela inicial

Etapa 5: Exibir o prompt nativo de push

Depois que o app for adicionado à tela inicial, você pode solicitar permissão de push quando o usuário realizar uma ação (como clicar em um botão). Isso pode ser feito usando o método requestPushPermission, ou com uma mensagem no app de push primer sem código.

Um prompt de push perguntando se deseja "permitir" ou "não permitir" notificações

Por exemplo:

import { requestPushPermission } from "@braze/web-sdk";

button.onclick = function(){
    requestPushPermission(() => {
        console.log(`User accepted push prompt`);
    }, (temporary) => {
        console.log(`User ${temporary ? "temporarily dismissed" : "permanently denied"} push prompt`);
    });
};

Próximas etapas

Em seguida, envie uma mensagem de teste para validar a integração. Após a conclusão da integração, você pode usar nossas mensagens de push primer sem código para otimizar suas taxas de aceitação de push.

Pré-requisitos

Antes de usar este recurso, você precisará integrar o SDK do Unity da Braze.

Configurando notificações por push

Etapa 1: Configure a plataforma

Etapa 1.1: Ative o Firebase

Para começar, siga a documentação de configuração do Firebase Unity.

Etapa 1.2: Defina suas credenciais do Firebase

Você precisa inserir a chave do servidor do Firebase e o ID do remetente no dashboard da Braze. Para isso, faça login no Firebase Developers Console e selecione seu projeto do Firebase. Em seguida, selecione Cloud Messaging em Settings e copie a chave do servidor e o ID do remetente:
Configurações de Cloud Messaging do console do Firebase mostrando a chave do servidor e o ID do remetente.

Na Braze, selecione seu app Android na página App Settings em Manage Settings. Em seguida, insira sua chave do servidor do Firebase no campo Firebase Cloud Messaging Server Key e o ID do remetente do Firebase no campo Firebase Cloud Messaging Sender ID.

Configurações do app Android na Braze com os campos de chave do servidor e ID do remetente do Firebase Cloud Messaging.

Etapa 1.1: Verifique o método de integração

A Braze fornece uma solução nativa do Unity para automatizar integrações de push no iOS. Se você preferir configurar e gerenciar sua integração manualmente, consulte Swift: Notificações por push.

Caso contrário, continue para a próxima etapa.

Etapa 1.1: Ative o ADM

  1. Crie uma conta no Amazon Apps & Games Developer Portal caso ainda não tenha feito isso.
  2. Obtenha credenciais OAuth (Client ID e Client Secret) e uma chave de API do ADM.
  3. Ative Automatic ADM Registration Enabled na janela de configuração do Unity Braze.
    • Como alternativa, você pode adicionar a seguinte linha ao seu arquivo res/values/braze.xml para ativar o registro do ADM:
  <bool name="com_braze_push_adm_messaging_registration_enabled">true</bool>

Etapa 2: Configure as notificações por push

Etapa 2.1: Defina as configurações de push

O SDK da Braze pode gerenciar automaticamente o registro de push nos servidores do Firebase Cloud Messaging para que os dispositivos recebam notificações por push. No Unity, ative Automate Unity Android Integration e configure as seguintes opções de Push Notification.

Configuração Descrição
Automatic Firebase Cloud Messaging Registration Enabled Instrui o SDK da Braze a recuperar e enviar automaticamente um token de push do FCM para um dispositivo.
Firebase Cloud Messaging Sender ID O ID do remetente do seu console do Firebase.
Handle Push Deeplinks Automatically Se o SDK deve gerenciar a abertura de deep links ou a abertura do app quando as notificações por push são clicadas.
Small Notification Icon Drawable Referência de recurso drawable do Android para o ícone pequeno exibido quando um push chega. Insira a referência completa incluindo o prefixo @drawable/ (por exemplo, @drawable/hourglass_icon). A integração automatizada grava esse valor no braze.xml conforme inserido. Se você deixar em branco, a notificação usará o ícone do aplicativo como ícone pequeno.
Large Notification Icon Drawable Ícone grande opcional para notificações. Use o mesmo formato @drawable/ do ícone pequeno (por exemplo, @drawable/my_large_icon).

Etapa 2.1: Faça upload do seu token APNs

Antes de enviar uma notificação por push para iOS usando a Braze, você precisa fazer upload do seu arquivo de notificação por push .p8, conforme descrito na documentação do desenvolvedor da Apple:

  1. Na sua conta de desenvolvedor da Apple, acesse Certificates, Identifiers & Profiles.
  2. Em Keys, selecione All e clique no botão adicionar (+) no topo da página.
  3. Em Key Description, insira um nome único para a chave de assinatura.
  4. Em Key Services, selecione a caixa de seleção serviço de Notificações por Push da Apple (APN) e clique em Continue. Clique em Confirm.
  5. Anote o ID da chave. Clique em Download para gerar e baixar a chave. Salve o arquivo baixado em um local seguro, pois você não poderá baixá-lo mais de uma vez.
  6. Na Braze, acesse Settings > App Settings e faça upload do arquivo .p8 em Apple Push Certificate. Você pode fazer upload do seu certificado de push de desenvolvimento ou de produção. Para testar notificações por push depois que seu app estiver disponível na App Store, é recomendável configurar um espaço de trabalho separado para a versão de desenvolvimento do seu app.
  7. Quando solicitado, insira o ID do pacote do seu app, o ID da chave e o ID da equipe. Você também precisará especificar se deseja enviar notificações para o ambiente de desenvolvimento ou de produção do seu app, que é definido pelo seu perfil de provisionamento.
  8. Quando terminar, selecione Save.

Etapa 2.2: Ative o push automático

Abra as configurações da Braze no Unity Editor navegando até Braze > Braze Configuration.

Marque Integrate Push With Braze para registrar automaticamente os usuários para notificações por push, enviar tokens de push para a Braze, rastrear análises de aberturas de push e aproveitar nosso tratamento padrão de notificações por push.

Etapa 2.3: Ative o push em segundo plano (opcional)

Marque Enable Background Push se quiser ativar o background mode para notificações por push. Isso permite que o sistema acorde seu aplicativo do estado suspended quando uma notificação por push chega, possibilitando que seu aplicativo baixe conteúdo em resposta às notificações por push. Marcar esta opção é necessário para nossa funcionalidade de Uninstall Tracking.

O editor Unity mostra as opções de configuração da Braze. Neste editor, "Automate Unity iOS integration", "Integrate push with braze" e "Enable background push" estão ativados.

Etapa 2.4: Desative o registro automático (opcional)

Usuários que ainda não optaram por receber notificações por push serão automaticamente autorizados para push ao abrir seu aplicativo. Para desativar esse recurso e registrar os usuários manualmente para push, marque Disable Automatic Push Registration.

  • Se Disable Provisional Authorization não estiver marcado no iOS 12 ou posterior, o usuário será provisoriamente (silenciosamente) autorizado a receber push silencioso. Se marcado, o usuário verá o prompt nativo de push.
  • Se precisar configurar exatamente quando o prompt é exibido em tempo de execução, desative o registro automático no editor de configuração da Braze e use AppboyBinding.PromptUserForPushPermissions() em vez disso.

O editor Unity mostra as opções de configuração da Braze. Neste editor, "Automate Unity iOS integration", "integrate push with braze" e "disable automatic push registration" estão ativados.

Etapa 2.1: Atualize o AndroidManifest.xml

Se seu app não tem um AndroidManifest.xml, você pode usar o seguinte como modelo. Caso contrário, se já tiver um AndroidManifest.xml, certifique-se de que quaisquer seções ausentes a seguir sejam adicionadas ao seu AndroidManifest.xml existente.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="REPLACE_WITH_YOUR_PACKAGE_NAME">

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <permission
    android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE"
    android:protectionLevel="signature" />
  <uses-permission android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE" />
  <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />

  <application android:icon="@drawable/app_icon"
               android:label="@string/app_name">

    <!-- Calls the necessary Braze methods to ensure that analytics are collected and that push notifications are properly forwarded to the Unity application. -->
    <activity android:name="com.braze.unity.BrazeUnityPlayerActivity"
      android:label="@string/app_name"
      android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
      android:screenOrientation="sensor">
      <meta-data android:name="android.app.lib_name" android:value="unity" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

    <receiver android:name="com.braze.push.BrazeAmazonDeviceMessagingReceiver" android:permission="com.amazon.device.messaging.permission.SEND">
      <intent-filter>
          <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
          <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
          <category android:name="REPLACE_WITH_YOUR_PACKAGE_NAME" />
      </intent-filter>
    </receiver>
  </application>
</manifest>

Etapa 2.2: Armazene sua chave de API do ADM

Primeiro, gere uma chave de API do ADM para seu app e salve a chave em um arquivo chamado api_key.txt, adicionando-o ao diretório Assets/ do seu projeto.

Em seguida, no seu arquivo mainTemplate.gradle, adicione o seguinte:

task copyAmazon(type: Copy) {
    def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
    from unityProjectPath + '/Assets/api_key.txt'
    into new File(projectDir, 'src/main/assets')
}

preBuild.dependsOn(copyAmazon)

Etapa 2.3: Adicione o JAR do ADM

O arquivo JAR do ADM necessário pode ser colocado em qualquer lugar do seu projeto de acordo com a documentação de JAR do Unity.

Etapa 2.4: Adicione o Client Secret e o Client ID ao dashboard da Braze

Por último, você deve adicionar o Client Secret e o Client ID obtidos na Etapa 1 à página Manage Settings do dashboard da Braze.

Página de configurações do app Fire OS na Braze com campos de Client ID e Client Secret do ADM.

Etapa 3: Defina os listeners de push

Etapa 3.1: Ative o listener de push recebido

O listener de push recebido é disparado quando um usuário recebe uma notificação por push. Para enviar a carga útil do push para o Unity, defina o nome do seu game object e o método de retorno de chamada do listener de push recebido em Set Push Received Listener.

Etapa 3.2: Ative o listener de push aberto

O listener de push aberto é disparado quando um usuário abre o app clicando em uma notificação por push. Para enviar a carga útil do push para o Unity, defina o nome do seu game object e o método de retorno de chamada do listener de push aberto em Set Push Opened Listener.

Etapa 3.3: Ative o listener de push excluído

O listener de push excluído é disparado quando um usuário desliza ou descarta uma notificação por push. Para enviar a carga útil do push para o Unity, defina o nome do seu game object e o método de retorno de chamada do listener de push excluído em Set Push Deleted Listener.

Exemplo de listener de push

O exemplo a seguir implementa o game object BrazeCallback usando um nome de método de retorno de chamada de PushNotificationReceivedCallback, PushNotificationOpenedCallback e PushNotificationDeletedCallback, respectivamente.

Este gráfico de exemplo de implementação mostra as opções de configuração da Braze mencionadas nas seções anteriores e um trecho de código C#.

public class MainMenu : MonoBehaviour {
  void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationReceivedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification received: " + pushNotification);
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push received Notification event: " + pushNotification);
#endif
  }

  void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationOpenedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification opened: " + pushNotification);
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push opened Notification event: " + pushNotification);
#endif
  }

  void PushNotificationDeletedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationDeletedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification dismissed: " + pushNotification);
#endif
  }
}

Etapa 3.1: Ative o listener de push recebido

O listener de push recebido é disparado quando um usuário recebe uma notificação por push enquanto está usando o aplicativo ativamente (como quando o app está em primeiro plano). Defina o listener de push recebido no editor de configuração da Braze. Se precisar configurar o listener do seu game object em tempo de execução, use AppboyBinding.ConfigureListener() e especifique BrazeUnityMessageType.PUSH_RECEIVED.

O editor Unity mostra as opções de configuração da Braze. Neste editor, a opção "Set Push Received Listener" está expandida, e o "Game Object Name" (AppBoyCallback) e o "Callback Method Name" (PushNotificationReceivedCallback) estão preenchidos.

Etapa 3.2: Ative o listener de push aberto

O listener de push aberto é disparado quando um usuário abre o app clicando em uma notificação por push. Para enviar a carga útil do push para o Unity, defina o nome do seu game object e o método de retorno de chamada do listener de push aberto na opção Set Push Opened Listener:

O editor Unity mostra as opções de configuração da Braze. Neste editor, a opção "Set Push Received Listener" está expandida, e o "Game Object Name" (AppBoyCallback) e o "Callback Method Name" (PushNotificationOpenedCallback) estão preenchidos.

Se precisar configurar o listener do seu game object em tempo de execução, use AppboyBinding.ConfigureListener() e especifique BrazeUnityMessageType.PUSH_OPENED.

Exemplo de listener de push

O exemplo a seguir implementa o game object AppboyCallback usando um nome de método de retorno de chamada de PushNotificationReceivedCallback e PushNotificationOpenedCallback, respectivamente.

Este gráfico de exemplo de implementação mostra as opções de configuração da Braze mencionadas nas seções anteriores e um trecho de código C#.

public class MainMenu : MonoBehaviour {
  void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationReceivedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification received: " + pushNotification);
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push received Notification event: " + pushNotification);
#endif
  }

  void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
    Debug.Log("PushNotificationOpenedCallback message: " + message);
    PushNotification pushNotification = new PushNotification(message);
    Debug.Log("Push Notification opened: " + pushNotification);
#elif UNITY_IOS
    ApplePushNotification pushNotification = new ApplePushNotification(message);
    Debug.Log("Push opened Notification event: " + pushNotification);
#endif
  }
}

Ao atualizar seu AndroidManifest.xml na etapa anterior, os listeners de push foram configurados automaticamente quando você adicionou as seguintes linhas. Portanto, nenhuma configuração adicional é necessária.

<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />

Configurações opcionais

Deep linking para recursos dentro do app

Embora a Braze possa lidar com deep links padrão (como URLs de websites, URIs do Android, etc.) por padrão, a criação de deep links personalizados requer uma configuração adicional no Manifest.

Para orientações de configuração, acesse Deep Linking to In-App Resources.

Adicionando ícones de notificação por push da Braze

Para adicionar ícones de push ao seu projeto, crie um plug-in AAR ou uma biblioteca Android contendo os arquivos de imagem dos ícones em res/drawable* (ou pastas específicas por densidade), e então referencie cada ícone em Braze > Braze Configuration usando o nome completo do recurso @drawable/ (consulte a Etapa 2.1: Configurar as configurações de push). Para as etapas de empacotamento e importação do Unity, consulte Android Library Projects and Android Archive plug-ins.

Para regras de arte de ícones pequenos (somente alfa, sem cor), consulte Notificações por push no Android, Etapa 2: Adaptar ícones pequenos às diretrizes de design.

Retorno de chamada do token por push

Para receber uma cópia dos tokens de dispositivo da Braze do sistema operacional, defina um delegado usando AppboyBinding.SetPushTokenReceivedFromSystemDelegate().

Não há configurações opcionais para ADM no momento.

Pré-requisitos

Antes de usar este recurso, você precisará integrar o SDK Braze .NET MAUI.

Configuração de notificações por push

Para integrar notificações por push no .NET MAUI (anteriormente Xamarin), você precisará concluir as etapas para notificações por push nativas do Android. As etapas a seguir são apenas um resumo. Para um passo a passo completo, consulte o guia de notificações por push nativas.

Etapa 1: Atualize seu projeto

  1. Adicione o Firebase ao seu projeto Android.
  2. Adicione a biblioteca Cloud Messaging ao build.gradle do seu projeto Android:
      implementation "google.firebase:firebase-messaging:+"
    

Etapa 2: Crie suas credenciais JSON

  1. No Google Cloud, ative a API do Firebase Cloud Messaging.
  2. Selecione Service Accounts > seu projeto > Create Service Account e insira um nome, ID e descrição para a conta de serviço. Quando terminar, selecione Create and continue.
  3. No campo Role, encontre e selecione Firebase Cloud Messaging API Admin na lista de funções.
  4. Em Service Accounts, escolha seu projeto e selecione  Actions > Manage Keys > Add Key > Create new key. Escolha JSON e selecione Create.

Etapa 3: Faça upload das suas credenciais JSON

  1. Na Braze, selecione  Settings > App Settings. Nas Push Notification Settings do seu app Android, escolha Firebase e selecione Upload JSON File para fazer upload das credenciais geradas anteriormente. Quando terminar, selecione Save.
  2. Ative o registro automático de token FCM acessando o Firebase Console. Abra seu projeto e selecione  Settings > Project settings. Selecione Cloud Messaging e, em Firebase Cloud Messaging API (V1), copie o número no campo Sender ID.
  3. No seu projeto do Android Studio, adicione o seguinte ao seu braze.xml.
  <bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
  <string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

Etapa 1: Conclua a configuração inicial

Consulte as instruções de integração Swift para informações sobre como configurar seu aplicativo com push e armazenar suas credenciais em nosso servidor. Consulte o app de exemplo iOS MAUI para mais detalhes.

Etapa 2: Solicite permissão para notificações por push

Nosso SDK .NET MAUI agora oferece suporte à configuração automática de push. Configure a automação e as permissões de push adicionando o seguinte código à configuração da sua instância Braze:

configuration.Push.Automation = new BRZConfigurationPushAutomation(true);
configuration.Push.Automation.RequestAuthorizationAtLaunch = false;

Consulte o app de exemplo iOS MAUI para mais detalhes. Para saber mais, consulte a documentação do Xamarin sobre Enhanced User Notifications in Xamarin.iOS.

New Stuff!