Configurar um app cliente do Firebase Cloud Messaging no Android

Para escrever seu app cliente Android para o Firebase Cloud Messaging, use a API FirebaseMessaging e o Android Studio 1.4 ou versões mais recentes com o Gradle. As instruções dessa página presumem que você concluiu as etapas para adicionar o Firebase ao seu projeto do Android.

Os clientes do FCM exigem que dispositivos com o Android 4.0 ou versões posteriores também tenham o app da Google Play Store instalado ou um emulador executando o Android 4.0 com APIs do Google. Observe que não é preciso se limitar à Google Play Store para implementar apps Android.

Configurar o Firebase e o SDK do FCM

  1. Adicione o Firebase ao seu projeto para Android, caso ainda não tenha feito isso.

  2. No Android Studio, adicione a dependência FCM ao arquivo build.gradle no nível do app:

    dependencies {
         compile 'com.google.firebase:firebase-messaging:12.0.1'
    }

Editar o manifesto do app

Adicione os seguintes itens ao manifesto do app:

  • Um serviço que estende FirebaseMessagingService. Isso é necessário se você quiser processar qualquer mensagem além de simplesmente receber notificações em apps em segundo plano. Para receber notificações em apps em primeiro plano ou payload de dados, enviar mensagens upstream e assim por diante, você deve estender esse serviço.
  • <service
        android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
  • Um serviço que estenda o FirebaseInstanceIdService para processar a criação, a rotação e a atualização dos tokens de registro. Isso é necessário para o envio a dispositivos específicos ou para a criação de grupos de dispositivos.
  • <service
        android:name=".MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
  • (Opcional) Dentro do componente do aplicativo, os elementos de metadados para definir um ícone e uma cor padrão para notificações. O Android usa esses valores sempre que messages recebidas não definem explicitamente o ícone ou a cor dele.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Opcional) A partir do Android 8.0 (nível API 26) e posterior, os canais de notificação são aceitos e recomendados. O FCM oferece um canal de notificação padrão com configurações básicas. Se você preferir criar e usar seu próprio canal padrão, defina default_notification_channel_id como o código do seu objeto de canal de notificação, conforme mostrado. Esse valor será usado pelo FCM sempre que as mensagens recebidas não definirem explicitamente um canal de notificação. Para saber mais, consulte Gerenciar canais de notificação.
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id"/>
  • Se o FCM for fundamental para o funcionamento do app Android, defina minSdkVersion 8 ou posterior no build.gradle do app. Isso garante que o app Android não seja instalado em um ambiente em que não possa ser executado adequadamente.

Acessar o token de registro do dispositivo

Na primeira inicialização do app, o SDK do FCM gera um token de registro para a instância do app cliente. Se você quiser segmentar dispositivos únicos ou criar grupos de dispositivos, precisará acessar esse token estendendo FirebaseInstanceIdService.

Veja nesta seção como recuperar o token e monitorar as alterações feitas nele. Como o token pode ser alternado após a primeira inicialização, recomendamos que você recupere o token de registro mais atualizado.

Esse token pode mudar quando:

  • o aplicativo exclui o código da instância;
  • o aplicativo é restaurado em um novo dispositivo;
  • o usuário desinstala/reinstala o app;
  • o usuário limpa os dados do app.

Recuperar o token de registro atual

Quando você precisar recuperar o token atual, chame FirebaseInstanceId.getInstance().getToken(). Esse método retorna null se o token ainda não tiver sido gerado.

Monitorar a geração de tokens

O retorno de chamada onTokenRefresh é disparado sempre que um novo token é gerado. Portanto, chamar getToken nesse contexto garantirá o acesso a um token de registro atual e disponível. Verifique se você adicionou o serviço ao seu manifesto. Em seguida, chame getToken no contexto de onTokenRefresh e registre o valor da seguinte maneira:

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);
}

Depois de obter o token, você pode enviá-lo ao servidor do aplicativo e armazená-lo usando o método de sua preferência. Consulte a referência da Instance ID API para ver detalhes completos sobre a API.

Verifique o Google Play Services

Os apps que contam com o SDK do Google Play Services devem sempre verificar se há um APK do Google Play Services compatível no dispositivo antes de acessar os recursos. Recomenda-se fazer isso em dois lugares: no método onCreate() da atividade principal e no método onResume(). Com a verificação de onCreate(), só é possível utilizar o app após uma verificação bem-sucedida. A verificação de onResume() garante que, se o usuário retornar ao app em execução por outro meio, como pelo botão "Voltar", a verificação ainda será executada.

Se o dispositivo não tiver uma versão compatível do Google Play Services, seu app poderá chamar GoogleApiAvailability.makeGooglePlayServicesAvailable() para permitir que os usuários façam o download do Google Play Services na Play Store.

Impedir a inicialização automática

O FCM gera um código de instância que será usada como token de registro. Quando ele é gerado, a biblioteca faz o upload dos dados de configuração e do identificador para o Firebase. Para evitar a geração automática do código da instância, adicione um valor de metadados ao seu AndroidManifest.xml para desativar o FCM:

<?xml version="1.0" encoding="utf-8"?>
<application>
  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />
</application>

Para reativá-lo, faça uma chamada de tempo de execução:

FirebaseMessaging.getInstance().setAutoInitEnabled(true);
Depois de definido, esse valor persiste às reinicializações do app.

Próximas etapas

Depois que o app cliente estiver configurado, é possível começar a enviar mensagens downstream com o Editor do Notificações. Essa funcionalidade é demonstrada na amostra de início rápido, que você pode fazer o download, executar e revisar.

Para adicionar outro comportamento mais avançado ao app, você pode declarar um filtro de intent e implementar uma atividade para responder a mensagens recebidas. Para ver mais detalhes, consulte os guias para envio de mensagens de um servidor de app:

É importante lembrar que, para aproveitar esses recursos, você precisará de uma implementação de servidor e dos protocolos do servidor (HTTP ou XMPP) ou de uma implementação do SDK Admin.

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.