Tutorial: enviar notificações por push para dispositivos Android usando o Google firebase Cloud MessagingTutorial: Send push notifications to Android devices using Google Firebase Cloud Messaging

Este tutorial mostra como usar os hubs de notificação do Azure e o FCM (firebase Cloud Messaging) para enviar notificações por push a um aplicativo Android.This tutorial shows you how to use Azure Notification Hubs and Firebase Cloud Messaging (FCM) to push notifications to an Android application. Neste tutorial, irá criar uma aplicação Android em branco que recebe notificações push através do Firebase Cloud Messaging (FCM).In this tutorial, you create a blank Android app that receives push notifications by using Firebase Cloud Messaging (FCM).

O código completo para este tutorial pode ser baixado do GitHub.The completed code for this tutorial can be downloaded from GitHub.

Neste tutorial, siga os seguintes passos:In this tutorial, you take the following steps:

  • Criar um projeto do Android Studio.Create an Android Studio project.
  • Criar um projeto do Firebase que suporte o Firebase Cloud Messaging.Create a Firebase project that supports Firebase Cloud Messaging.
  • Crie um Hub.Create a hub.
  • Conecte seu aplicativo ao Hub.Connect your app to the hub.
  • Testar a aplicação.Test the app.

Pré-requisitosPrerequisites

Para concluir este tutorial, tem de ter uma conta ativa do Azure.To complete this tutorial, you must have an active Azure account. Se não tiver uma conta, pode criar uma de avaliação gratuita em apenas alguns minutos.If you don't have an account, you can create a free trial account in just a couple of minutes. Para obter mais detalhes, consulte Avaliação gratuita do Azure.For details, see Azure Free Trial.

Você também precisa dos seguintes itens:You also need the following items:

  • A versão mais recente do Android StudioThe latest version of Android Studio
  • Android 2,3 ou superior para o firebase Cloud MessagingAndroid 2.3 or higher for Firebase Cloud Messaging
  • Repositório do Google revisão 27 ou superior para firebase Cloud MessagingGoogle Repository revision 27 or higher for Firebase Cloud Messaging
  • Google Play Services 9.0.2 ou superior para o firebase Cloud MessagingGoogle Play Services 9.0.2 or higher for Firebase Cloud Messaging

A conclusão deste tutorial é um pré-requisito para fazer todos os outros tutoriais de hubs de notificação para aplicativos Android.Completing this tutorial is a prerequisite for doing all other Notification Hubs tutorials for Android apps.

Criar um projeto do Android StudioCreate an Android Studio Project

  1. Iniciar Android Studio.Launch Android Studio.
  2. Selecione arquivo, aponte para novoe, em seguida, selecione novo projeto.Select File, point to New, and then select New Project.
  3. Na página escolher seu projeto , selecione atividade vaziae, em seguida, selecione Avançar.On the Choose your project page, select Empty Activity, and then select Next.
  4. Na página configurar seu projeto , execute as seguintes etapas:On the Configure your project page, take the following steps:
    1. Insira um nome para o aplicativo.Enter a name for the application.

    2. Especifique um local no qual salvar os arquivos de projeto.Specify a location in which to save the project files.

    3. Selecione Concluir.Select Finish.

      Configurar seu projeto)

Criar um projeto do Firebase que suporte o FCMCreate a Firebase project that supports FCM

  1. Inicie sessão na consola Firebase.Sign in to the Firebase console. Crie um novo projeto Firebase se ainda não tiver um.Create a new Firebase project if you don't already have one.

  2. Depois de criar o projeto, selecione Adicionar Firebase à aplicação Android.After you create your project, select Add Firebase to your Android app.

    Adicionar Firebase à aplicação Android

  3. Na página Adicionar firebase ao seu aplicativo Android , execute as seguintes etapas:On the Add Firebase to your Android app page, take the following steps:

    1. Para o nome do pacote do Android, copie o valor de seu ApplicationId no arquivo Build. gradle do seu aplicativo.For Android package name, copy the value of your applicationId in your application's build.gradle file. Neste exemplo, com.fabrikam.fcmtutorial1appé.In this example, it's com.fabrikam.fcmtutorial1app.

      Especificar o nome do pacote

    2. Selecione registrar aplicativo.Select Register app.

  4. Selecione baixar Google-Services. JSON, salve o arquivo na pasta do aplicativo do seu projeto e, em seguida, selecione Avançar.Select Download google-services.json, save the file into the app folder of your project, and then select Next.

    Baixar o Google-Services. JSON

  5. Faça as seguintes alterações de configuração em seu projeto no Android Studio.Make the following configuration changes to your project in Android Studio.

    1. No arquivo Build. gradle de nível de projeto (<projeto>/Build.gradle), adicione a instrução a seguir à seção dependências .In your project-level build.gradle file (<project>/build.gradle), add the following statement to the dependencies section.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. No arquivo Build. gradle de nível de aplicativo (<Project>/<app-module>/Build.gradle), adicione as instruções a seguir à seção Dependencies .In your app-level build.gradle file (<project>/<app-module>/build.gradle), add the following statements to the dependencies section.

      implementation 'com.google.firebase:firebase-core:16.0.8'
      implementation 'com.google.firebase:firebase-messaging:17.3.4'
      
    3. Adicione a seguinte linha ao final do arquivo Build. gradle no nível do aplicativo após a seção Dependencies.Add the following line to the end of the app-level build.gradle file after the dependencies section.

      apply plugin: 'com.google.gms.google-services'
      
    4. Selecione sincronizar agora na barra de ferramentas.Select Sync now on the toolbar.

      alterações de configuração do Build. gradle

  6. Selecione Seguinte.Select Next.

  7. Selecione ignorar esta etapa.Select Skip this step.

    Ignorar a última etapa

  8. Na consola da Firebase, selecione o cog do seu projeto.In the Firebase console, select the cog for your project. Em seguida, selecione Definições do projeto.Then select Project Settings.

    Selecione Definições do projeto

  9. Se você não tiver baixado o arquivo Google-Services. JSON na pasta do aplicativo do seu projeto Android Studio, poderá fazer isso nesta página.If you haven't downloaded the google-services.json file into the app folder of your Android Studio project, you can do so on this page.

  10. Alterne para a guia de mensagens de nuvem na parte superior.Switch to the Cloud Messaging tab at the top.

  11. Copie e salve a chave do servidor para uso posterior.Copy and save the Server key for later use. Use esse valor para configurar o Hub.You use this value to configure your hub.

Configurar um hubConfigure a hub

  1. Inicie sessão no portal do Azure.Sign in to the Azure portal.

  2. Selecione todos os serviços no menu à esquerda e, em seguida, selecione os Hubs de notificação no Mobile secção.Select All services on the left menu, and then select Notification Hubs in the Mobile section. Selecione o ícone de estrela junto ao nome do serviço para adicionar o serviço para o Favoritos secção no menu da esquerda.Select the star icon next to the service name to add the service to the FAVORITES section on the left menu. Depois de adicionar os Hubs de notificação ao Favoritos, selecione-o no menu da esquerda.After you add Notification Hubs to FAVORITES, select it on the left menu.

    Portal do Azure – selecione os Hubs de notificação

  3. Sobre o os Hubs de notificação página, selecione Add na barra de ferramentas.On the Notification Hubs page, select Add on the toolbar.

    Os Hubs de notificação - adicionar botão de barra de ferramentas

  4. Sobre o Hub de notificação página, efetue os seguintes passos:On the Notification Hub page, do the following steps:

    1. Introduza um nome na Hub de notificação.Enter a name in Notification Hub.

    2. Introduza um nome na criar um novo namespace.Enter a name in Create a new namespace. Um espaço de nomes contém um ou mais hubs.A namespace contains one or more hubs.

    3. Selecione um valor de localização caixa de lista pendente.Select a value from the Location drop-down list box. Este valor Especifica a localização na qual pretende criar o hub.This value specifies the location in which you want to create the hub.

    4. Selecione um grupo de recursos existente no grupo de recursos, ou criar um nome para um novo grupo de recursos.Select an existing resource group in Resource Group, or create a name for a new resource group.

    5. Selecione Criar.Select Create.

      Portal do Azure – definir as propriedades do hub de notificação

  5. Selecione notificações (o ícone de sino) e, em seguida, selecione Ir para recurso.Select Notifications (the bell icon), and then select Go to resource. Pode também atualizar a lista a os Hubs de notificação página e selecione o seu hub.You can also refresh the list on the Notification Hubs page and select your hub.

    Portal do Azure - notificações -> Ir para o recurso

  6. Selecione Políticas de Acesso na lista.Select Access Policies from the list. Tenha em atenção que as duas cadeias de ligação estão disponíveis para.Note that the two connection strings are available to you. Irá precisar posteriormente para processar as notificações push.You'll need them later to handle push notifications.

    Importante

    Fazer não utilizar o DefaultFullSharedAccessSignature política na sua aplicação.Do not use the DefaultFullSharedAccessSignature policy in your application. Isso se destina a ser utilizado no seu back-end.This is meant to be used in your back end only.

    Portal do Azure – cadeias de ligação do hub de notificação

Configurar as definições do Firebase Cloud Messaging para o hubConfigure Firebase Cloud Messaging settings for the hub

  1. No painel esquerdo, em configurações, selecione Google (GCM/FCM) .In the left pane, under Settings, select Google (GCM/FCM).

  2. Insira a chave de servidor para o projeto FCM que você salvou anteriormente.Enter the server key for the FCM project that you saved earlier.

  3. Na barra de ferramentas, selecione salvar.On the toolbar, select Save.

    Hub de notificação do Azure – Google (FCM)

  4. O portal do Azure exibe uma mensagem em alertas de que o Hub foi atualizado com êxito.The Azure portal displays a message in alerts that the hub has been successfully updated. O botão salvar está desabilitado.The Save button is disabled.

Seu hub agora está configurado para trabalhar com o firebase Cloud Messaging.Your hub is now configured to work with Firebase Cloud Messaging. Você também tem as cadeias de conexão necessárias para enviar notificações para um dispositivo e registrar um aplicativo para receber notificações.You also have the connection strings that are necessary to send notifications to a device and register an app to receive notifications.

Ligar a aplicação ao hub de notificaçãoConnect your app to the notification hub

Adicionar serviços do Google Play para o projetoAdd Google Play services to the project

  1. Em Android Studio, selecione ferramentas no menu e, em seguida, selecione Gerenciador do SDK.In Android Studio, select Tools on the menu, and then select SDK Manager.

  2. Selecione a versão de destino da SDK do Android que é usada em seu projeto.Select the target version of the Android SDK that is used in your project. Em seguida, selecione Mostrar detalhes do pacote.Then select Show Package Details.

    Gerenciador de SDK do Android-selecione a versão de destino

  3. Selecione APIs do Google, se ainda não estiver instalado.Select Google APIs, if it's not already installed.

    Gerenciador de SDK do Android-APIs do Google selecionadas

  4. Alterne para a guia SDK Tools . Se você ainda não instalou o Google Play Services, selecione Google Play Services , conforme mostrado na imagem a seguir.Switch to the SDK Tools tab. If you haven't already installed Google Play Services, select Google Play Services as shown in the following image. Em seguida, selecione aplicar para instalar.Then select Apply to install. Anote o caminho do SDK, para utilização num passo posterior.Note the SDK path, for use in a later step.

    SDK do Android Manager-Google Play Services selecionado

  5. Se você vir a caixa de diálogo confirmar alteração , selecione OK.If you see the Confirm Change dialog box, select OK. O instalador de componentes instala os componentes solicitados.The Component Installer installs the requested components. Selecione concluir depois que os componentes forem instalados.Select Finish after the components are installed.

  6. Selecione OK para fechar a caixa de diálogo Configurações de novos projetos .Select OK to close the Settings for New Projects dialog box.

  7. Abra o arquivo AndroidManifest. xml e, em seguida, adicione a marca a seguir à marca do aplicativo .Open the AndroidManifest.xml file, and then add the following tag to the application tag.

    <meta-data android:name="com.google.android.gms.version"
         android:value="@integer/google_play_services_version" />
    

Adicionar bibliotecas de hubs de notificação do AzureAdd Azure Notification Hubs libraries

  1. No arquivo Build. gradle para o aplicativo, adicione as linhas a seguir na seção dependências.In the Build.Gradle file for the app, add the following lines in the dependencies section.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    
  2. Adicione o repositório seguinte depois da secção de dependências.Add the following repository after the dependencies section.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

Adicionar suporte do Google FirebaseAdd Google Firebase support

  1. No arquivo Build. gradle para o aplicativo, adicione as linhas a seguir na seção dependências , se elas ainda não existirem.In the Build.Gradle file for the app, add the following lines in the dependencies section if they don't already exist.

    implementation 'com.google.firebase:firebase-core:16.0.8'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    
  2. Adicione o plug-in a seguir no final do arquivo, se ele ainda não estiver lá.Add the following plug-in at the end of the file if it's not already there.

    apply plugin: 'com.google.gms.google-services'
    
  3. Selecione sincronizar agora na barra de ferramentas.Select Sync Now on the toolbar.

Atualizar o arquivo AndroidManifest. xmlUpdate the AndroidManifest.xml file

  1. Depois de receber o token de registro do FCM, use-o para se registrar nos hubs de notificação do Azure.After you receive your FCM registration token, you use it to register with Azure Notification Hubs. Você dá suporte a esse registro em segundo plano usando um IntentService chamado RegistrationIntentService.You support this registration in the background by using an IntentService named RegistrationIntentService. Esse serviço também atualiza seu token de registro FCM.This service also refreshes your FCM registration token. Você também cria uma classe chamada FirebaseService como uma subclasse de FirebaseMessagingService e substitui o método onMessageReceived para receber e manipular notificações.You also create a class named FirebaseService as a subclass of FirebaseMessagingService and override the onMessageReceived method to receive and handle notifications.

    Adicionar a seguinte definição de serviço ao ficheiro AndroidManifest.xml, no interior da etiqueta <application>.Add the following service definition to the AndroidManifest.xml file, inside the <application> tag.

    <service
        android:name=".RegistrationIntentService"
        android:exported="false">
    </service>
    <service
        android:name=".FirebaseService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  2. Adicione as seguintes permissões necessárias relacionadas ao FCM abaixo da marca </application>.Add the following necessary FCM-related permissions below the </application> tag.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

Adicionar códigoAdd code

  1. Na vista de projeto, expanda app > src > principal > java.In the Project View, expand app > src > main > java. Clique com o botão direito do mouse na pasta do pacote em Java, selecione novoe, em seguida, selecione classe Java.Right-click your package folder under java, select New, and then select Java Class. Digite NotificationSettings para o nome e, em seguida, selecione OK.Enter NotificationSettings for the name, and then select OK.

    Certifique-se de que atualiza esses três marcadores de posição no seguinte código para a classe NotificationSettings:Make sure to update these three placeholders in the following code for the NotificationSettings class:

    • HubListenConnectionString: A cadeia de ligação DefaultListenAccessSignature do seu hub.HubListenConnectionString: The DefaultListenAccessSignature connection string for your hub. Você pode copiar essa cadeia de conexão clicando em políticas de acesso em seu hub no portal do Azure.You can copy that connection string by clicking Access Policies in your hub in the Azure portal.

    • HubName: Use o nome do seu hub que aparece na página hub no portal do Azure.HubName: Use the name of your hub that appears in the hub page in the Azure portal.

      Código NotificationSettings:NotificationSettings code:

      public class NotificationSettings {
          public static String HubName = "<Your HubName>";
          public static String HubListenConnectionString = "<Enter your DefaultListenSharedAccessSignature connection string>";
      }
      

      Importante

      Insira o nome e o DefaultListenSharedAccessSignature do seu hub antes de continuar.Enter the name and the DefaultListenSharedAccessSignature of your hub before proceeding further.

  2. Adicione outra nova classe ao projeto com o nome RegistrationIntentService.Add another new class to your project named RegistrationIntentService. Essa classe implementa a interface IntentService.This class implements the IntentService interface. Ele também manipula a atualização do token FCM e o registro com o Hub de notificação.It also handles refreshing the FCM token and registering with the notification hub.

    Utilize o seguinte código para esta classe.Use the following code for this class.

    import android.app.IntentService;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.InstanceIdResult;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import java.util.concurrent.TimeUnit;
    
    public class RegistrationIntentService extends IntentService {
    
        private static final String TAG = "RegIntentService";
        String FCM_token = null;
    
        private NotificationHub hub;
    
        public RegistrationIntentService() {
            super(TAG);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
    
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String resultString = null;
            String regID = null;
            String storedToken = null;
    
            try {
                FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { 
                    @Override 
                    public void onSuccess(InstanceIdResult instanceIdResult) { 
                        FCM_token = instanceIdResult.getToken(); 
                        Log.d(TAG, "FCM Registration Token: " + FCM_token); 
                    } 
                }); 
                TimeUnit.SECONDS.sleep(1);
    
                // Storing the registration ID that indicates whether the generated token has been
                // sent to your server. If it is not stored, send the token to your server.
                // Otherwise, your server should have already received the token.
                if (((regID=sharedPreferences.getString("registrationID", null)) == null)){
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "Attempting a new registration with NH using FCM token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                // Check to see if the token has been compromised and needs refreshing.
                else if ((storedToken=sharedPreferences.getString("FCMtoken", "")) != FCM_token) {
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "NH Registration refreshing with token : " + FCM_token);
                    regID = hub.register(FCM_token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1,tag2").getRegistrationId();
    
                    resultString = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                else {
                    resultString = "Previously Registered Successfully - RegId : " + regID;
                }
            } catch (Exception e) {
                Log.e(TAG, resultString="Failed to complete registration", e);
                // If an exception happens while fetching the new token or updating registration data
                // on a third-party server, this ensures that we'll attempt the update at a later time.
            }
    
            // Notify UI that registration has completed.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(resultString);
            }
        }
    }
    
  3. Na classe MainActivity, adicione as seguintes instruções import acima da declaração de classe.In the MainActivity class, add the following import statements above the class declaration.

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GoogleApiAvailability;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
  4. Adicione os membros a seguir na parte superior da classe.Add the following members at the top of the class. Utiliza estes campos para verificar a disponibilidade dos Serviços do Google Play, tal como recomendado pela Google.You use these fields to check the availability of Google Play Services as recommended by Google.

    public static MainActivity mainActivity;
    public static Boolean isVisible = false;
    private static final String TAG = "MainActivity";
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    
  5. Na classe MainActivity, adicione o método a seguir para verificar a disponibilidade de Google Play Services.In the MainActivity class, add the following method to check the availability of Google Play Services.

    /**
    * Check the device to make sure it has the Google Play Services APK. If
    * it doesn't, display a dialog box that enables  users to download the APK from
    * the Google Play Store or enable it in the device's system settings.
    */
    
    private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "This device is not supported by Google Play Services.");
                ToastNotify("This device is not supported by Google Play Services.");
                finish();
            }
            return false;
        }
        return true;
    }
    
  6. Na classe MainActivity, adicione o código a seguir que verifica Google Play Services antes de chamar o IntentService para obter o token de registro do FCM e registrá-lo no Hub:In the MainActivity class, add the following code that checks for Google Play Services before calling the IntentService to get your FCM registration token and register with your hub:

    public void registerWithNotificationHubs()
    {
        if (checkPlayServices()) {
            // Start IntentService to register this application with FCM.
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    }
    
  7. No método OnCreate da classe MainActivity, adicione o seguinte código para iniciar o processo de registro quando a atividade for criada:In the OnCreate method of the MainActivity class, add the following code to start the registration process when the activity is created:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mainActivity = this;
        registerWithNotificationHubs();
        FirebaseService.createChannelAndHandleNotifications(getApplicationContext());
    }
    
  8. Para verificar o estado do aplicativo e o status do relatório em seu aplicativo, adicione estes métodos adicionais a MainActivity:To verify app state and report status in your app, add these additional methods to MainActivity:

    @Override
    protected void onStart() {
        super.onStart();
        isVisible = true;
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        isVisible = false;
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        isVisible = true;
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        isVisible = false;
    }
    
    public void ToastNotify(final String notificationMessage) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, notificationMessage, Toast.LENGTH_LONG).show();
                TextView helloText = (TextView) findViewById(R.id.text_hello);
                helloText.setText(notificationMessage);
            }
        });
    }
    
  9. O ToastNotify método utiliza o comando "Olá, mundo" TextView para comunicar o estado e as notificações de forma permanente na aplicação.The ToastNotify method uses the "Hello World" TextView control to report status and notifications persistently in the app. Em seu layout res > layout > activity_main. xml , adicione a ID a seguir para esse controle.In your res > layout > activity_main.xml layout, add the following ID for that control.

    android:id="@+id/text_hello"
    

    Notification Hubs do Azure – Teste de Envio

  10. Em seguida, você adiciona uma subclasse para o receptor que você definiu em AndroidManifest. xml.Next you add a subclass for the receiver that you defined in AndroidManifest.xml. Adicione outra nova classe ao projeto com o nome FirebaseService.Add another new class to your project named FirebaseService.

  11. Adicione as seguintes declarações de importação no topo do ficheiro FirebaseService.java:Add the following import statements at the top of FirebaseService.java:

    import com.google.firebase.messaging.FirebaseMessagingService;
    import com.google.firebase.messaging.RemoteMessage;
    import android.util.Log;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.media.RingtoneManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import androidx.core.app.NotificationCompat;
    
  12. Adicione o código a seguir para a classe FirebaseService, tornando-o uma subclasse de FirebaseMessagingService.Add the following code for the FirebaseService class, making it a subclass of FirebaseMessagingService.

    Esse código substitui o método onMessageReceived e relata as notificações que são recebidas.This code overrides the onMessageReceived method and reports notifications that are received. Ele também envia a notificação por push para o Gerenciador de notificações do Android usando o método sendNotification().it also sends the push notification to the Android notification manager by using the sendNotification() method. Chame o método sendNotification() quando o aplicativo não estiver em execução e uma notificação for recebida.Call the sendNotification() method when the app isn't running and a notification is received.

    public class FirebaseService extends FirebaseMessagingService
    {
        private String TAG = "FirebaseService";
    
        public static final String NOTIFICATION_CHANNEL_ID = "nh-demo-channel-id";
        public static final String NOTIFICATION_CHANNEL_NAME = "Notification Hubs Demo Channel";
        public static final String NOTIFICATION_CHANNEL_DESCRIPTION = "Notification Hubs Demo Channel";
    
        public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        static Context ctx;
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // ...
    
            // TODO(developer): Handle FCM messages here.
            // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
            Log.d(TAG, "From: " + remoteMessage.getFrom());
    
            String nhMessage;
            // Check if message contains a notification payload.
            if (remoteMessage.getNotification() != null) {
                Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    
                nhMessage = remoteMessage.getNotification().getBody();
            }
            else {
                nhMessage = remoteMessage.getData().values().iterator().next();
            }
    
            // Also if you intend on generating your own notifications as a result of a received FCM
            // message, here is where that should be initiated. See sendNotification method below.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(nhMessage);
            }
            sendNotification(nhMessage);
        }
    
        private void sendNotification(String msg) {
    
            Intent intent = new Intent(ctx, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            mNotificationManager = (NotificationManager)
                    ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
            PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                    intent, PendingIntent.FLAG_ONE_SHOT);
    
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                    ctx,
                    NOTIFICATION_CHANNEL_ID)
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setSmallIcon(android.R.drawable.ic_popup_reminder)
                    .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
    
            notificationBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
        }
    
        public static void createChannelAndHandleNotifications(Context context) {
            ctx = context;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        NOTIFICATION_CHANNEL_ID,
                        NOTIFICATION_CHANNEL_NAME,
                        NotificationManager.IMPORTANCE_HIGH);
                channel.setDescription(NOTIFICATION_CHANNEL_DESCRIPTION);
                channel.setShowBadge(true);
    
                NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(channel);
             }
        }
    }
    
  13. No Android Studio, na barra de menus, selecione build > Rebuild Project para certificar-se de que não haja erros em seu código.In Android Studio, on the menu bar, select Build > Rebuild Project to make sure that there aren't any errors in your code. Se você receber um erro sobre o ícone ic_launcher, remova a seguinte instrução do arquivo AndroidManifest. xml:If you receive an error about the ic_launcher icon, remove the following statement from the AndroidManifest.xml file:

        android:icon="@mipmap/ic_launcher"
    
  14. Verifique se você tem um dispositivo virtual para executar o aplicativo.Ensure you have a virtual device for running the app. Se você não tiver um, adicione um da seguinte maneira:If you do not have one, add one as follows:

    1. Abrir o Gerenciador de dispositivos
    2. Criar dispositivo virtual
  15. Execute o aplicativo no dispositivo selecionado e verifique se ele é registrado com êxito com o Hub.Run the app on your selected device and verify that it registers successfully with the hub.

    Nota

    O registro pode falhar durante a inicialização inicial até que o método onTokenRefresh() do serviço de ID de instância seja chamado.Registration might fail during the initial launch until the onTokenRefresh() method of the instance ID service is called. A atualização deve iniciar um registo com êxito no hub de notificação.The refresh should initiate a successful registration with the notification hub.

    Registro do dispositivo bem-sucedido

Notificação de envio de teste a partir do hub de notificaçãoTest send notification from the notification hub

Você pode enviar notificações por push do portal do Azure executando as seguintes etapas:You can send push notifications from the Azure portal by taking the following steps:

  1. Na portal do Azure, na página Hub de notificação do seu hub, selecione teste enviar na seção solução de problemas .In the Azure portal, on the Notification Hub page for your hub, select Test Send in the Troubleshooting section.

  2. Para Plataformas, selecione Android.For Platforms, select Android.

  3. Selecione Enviar.Select Send. Você ainda não verá uma notificação no dispositivo Android porque não executou o aplicativo móvel nele.You won't see a notification on the Android device yet because you haven't run the mobile app on it. Depois de executar o aplicativo móvel, selecione o botão Enviar novamente para ver a mensagem de notificação.After you run the mobile app, select the Send button again to see the notification message.

  4. Consulte o resultado da operação na lista na parte inferior.See the result of the operation in the list at the bottom.

    Notification Hubs do Azure – Teste de Envio

  5. Você vê a mensagem de notificação em seu dispositivo.You see the notification message on your device.

    Mensagem de notificação no dispositivo

Normalmente, as notificações push são enviadas num serviço de back-end como Mobile Apps ou ASP.NET com uma biblioteca compatível.Push notifications are normally sent in a back-end service like Mobile Apps or ASP.NET using a compatible library. Se uma biblioteca não está disponível para o seu back-end, também pode utilizar a API REST diretamente para enviar mensagens de notificação.If a library isn't available for your back end, you can also use the REST API directly to send notification messages.

Aqui está uma lista de outros tutoriais que pode querer rever para enviar notificações:Here is a list of some other tutorials you might want to review for sending notifications:

Executar o aplicativo móvel no emuladorRun the mobile app on emulator

Antes de testar as notificações por push dentro de um emulador, verifique se a imagem do emulador dá suporte ao nível de API do Google que você escolheu para seu aplicativo.Before you test push notifications inside an emulator, make sure that your emulator image supports the Google API level that you chose for your app. Se sua imagem não der suporte a APIs nativas do Google, você poderá obter a exceção de serviço @ no__t-1NOT @ no__t-2AVAILABLE .If your image doesn't support native Google APIs, you might get the SERVICE_NOT_AVAILABLE exception.

Verifique também se você adicionou sua conta do Google ao emulador em execução em configurações > contas.Also make sure that you've added your Google account to your running emulator under Settings > Accounts. Caso contrário, suas tentativas de se registrar com FCM podem resultar na exceção de autenticação @ no__t-1FAILED .Otherwise, your attempts to register with FCM might result in the AUTHENTICATION_FAILED exception.

Passos seguintesNext steps

Neste tutorial, você usou o firebase Cloud Messaging para transmitir notificações para todos os dispositivos Android que foram registrados com o serviço.In this tutorial, you used Firebase Cloud Messaging to broadcast notifications to all Android devices that were registered with the service. Para saber como enviar notificações push para dispositivos específicos, avance para o tutorial seguinte:To learn how to push notifications to specific devices, advance to the following tutorial: