Zelfstudie: Pushmeldingen verzenden naar Android-apparaten met Firebase SDK versie 0.6Tutorial: Send push notifications to Android devices using Firebase SDK version 0.6

In deze zelfstudie wordt gedemonstreerd hoe u met Azure Notification Hubs en de Firebase Cloud Messaging (FCM) SDK versie 0.6 en pushmeldingen verzendt naar een Android-toepassing.This tutorial shows you how to use Azure Notification Hubs and the Firebase Cloud Messaging (FCM) SDK version 0.6 to send push notifications to an Android application. In deze zelfstudie gaat u een lege Android-app maken die pushmeldingen ontvangt via Firebase Cloud Messaging (FCM).In this tutorial, you create a blank Android app that receives push notifications by using Firebase Cloud Messaging (FCM).

U kunt de voltooide code voor deze zelfstudie downloaden op GitHub.The completed code for this tutorial can be downloaded from GitHub.

In deze zelfstudie voert u de volgende stappen uit:In this tutorial, you take the following steps:

  • Een Android Studio-project maken.Create an Android Studio project.
  • Een Firebase-project maken dat Firebase Cloud Messaging ondersteunt.Create a Firebase project that supports Firebase Cloud Messaging.
  • Maak een hub.Create a hub.
  • Verbind uw app met de hub.Connect your app to the hub.
  • De app testen.Test the app.

VereistenPrerequisites

U hebt een actief Azure-account nodig om deze zelfstudie te voltooien.To complete this tutorial, you must have an active Azure account. Als u geen account hebt, kunt u binnen een paar minuten een gratis proefaccount maken.If you don't have an account, you can create a free trial account in just a couple of minutes. Zie Gratis proefversie van Azure voor meer informatie.For details, see Azure Free Trial.

U hebt ook de volgende items nodig:You also need the following items:

  • De nieuwste versie van Android StudioThe latest version of Android Studio
  • Android 2.3 of hoger voor Firebase Cloud MessagingAndroid 2.3 or higher for Firebase Cloud Messaging
  • Google Repository revisie 27 of hoger voor Firebase Cloud MessagingGoogle Repository revision 27 or higher for Firebase Cloud Messaging
  • Google Play-Services 9.0.2 of hoger voor Firebase Cloud MessagingGoogle Play Services 9.0.2 or higher for Firebase Cloud Messaging

Het voltooien van deze zelfstudie is een vereiste voor alle andere Notification Hubs-zelfstudies voor Android-apps.Completing this tutorial is a prerequisite for doing all other Notification Hubs tutorials for Android apps.

Een Android Studio-project makenCreate an Android Studio Project

  1. Start Android Studio.Launch Android Studio.
  2. Selecteer File, wijs naar New en selecteer New Project.Select File, point to New, and then select New Project.
  3. Selecteer Empty Activity op de pagina Choose your project en selecteer Next.On the Choose your project page, select Empty Activity, and then select Next.
  4. Voer de volgende stappen uit op de pagina Configure your project:On the Configure your project page, take the following steps:
    1. Voer een naam in voor de toepassing.Enter a name for the application.

    2. Geef een locatie om voor het opslaan van de projectbestanden.Specify a location in which to save the project files.

    3. Selecteer Finish.Select Finish.

      Het project configureren

Een Firebase-project maken dat FCM ondersteuntCreate a Firebase project that supports FCM

  1. Meld u aan bij de Firebase-console.Sign in to the Firebase console. Maak een nieuw Firebase-project als u er nog geen hebt.Create a new Firebase project if you don't already have one.

  2. Nadat u uw project hebt gemaakt, selecteert u Firebase toevoegen aan uw Android-app.After you create your project, select Add Firebase to your Android app.

    Firebase toevoegen aan uw Android-app

  3. Voer de volgende stappen uit op de pagina Firebase toevoegen aan uw Android-app :On the Add Firebase to your Android app page, take the following steps:

    1. Voor de naam van het Android-pakketkopieert u de waarde van uw applicationId in het bestand build. gradle van uw toepassing.For Android package name, copy the value of your applicationId in your application's build.gradle file. In dit voor beeld is com.fabrikam.fcmtutorial1appdat.In this example, it's com.fabrikam.fcmtutorial1app.

      De pakket naam opgeven

    2. Selecteer app registreren.Select Register app.

  4. Selecteer Google-services. json downloaden, sla het bestand op in de map app van het project en selecteer vervolgens volgende.Select Download google-services.json, save the file into the app folder of your project, and then select Next.

    Google-services. json downloaden

  5. Breng de volgende configuratie wijzigingen aan in uw project in Android Studio.Make the following configuration changes to your project in Android Studio.

    1. Voeg in het bestand build. gradle van project niveau<(>project/build.gradle) de volgende instructie toe aan de sectie dependencies .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. Voeg in het bestand build. gradle van uw app<->/<niveau (project>app-module/build.gradle) de volgende instructies toe aan de sectie 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. Voeg de volgende regel toe aan het einde van het build. gradle-bestand op app-niveau na de sectie 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. Selecteer Nu synchroniseren op de werk balk.Select Sync now on the toolbar.

      wijzigingen in de configuratie van build. gradle

  6. Selecteer Next.Select Next.

  7. Selecteer deze stap overs Laan.Select Skip this step.

    De laatste stap overs Laan

  8. Selecteer in de Firebase-console het tandwiel van uw project.In the Firebase console, select the cog for your project. Selecteer vervolgens Projectinstellingen.Then select Project Settings.

    Selecteer Projectinstellingen

  9. Als u het bestand Google-services. json niet hebt gedownload naar de map app van uw Android Studio-project, kunt u dit doen op deze pagina.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. Schakel over naar het tabblad Cloud Messa ging bovenaan.Switch to the Cloud Messaging tab at the top.

  11. Kopieer de Server sleutel en sla deze op voor later gebruik.Copy and save the Server key for later use. U gebruikt deze waarde om uw hub te configureren.You use this value to configure your hub.

Een hub configurerenConfigure a hub

  1. Meld u aan bij de Azure-portal.Sign in to the Azure portal.

  2. Selecteer Alle services in het menu aan de linkerkant en selecteer Notification Hubs in de sectie Mobiel.Select All services on the left menu, and then select Notification Hubs in the Mobile section. Selecteer het sterpictogram naast de servicenaam om de service toe te voegen aan de sectie FAVORIETEN in het menu aan de linkerkant.Select the star icon next to the service name to add the service to the FAVORITES section on the left menu. Nadat u Notification Hubs hebt toegevoegd aan FAVORIETEN, selecteert u dit in het linkermenu.After you add Notification Hubs to FAVORITES, select it on the left menu.

    Azure Portal - Notification Hubs selecteren

  3. Op de Notification Hubs-pagina selecteert u Toevoegen op de werkbalk.On the Notification Hubs page, select Add on the toolbar.

    Toevoegen van Notification Hubs - knop op de werkbalk

  4. Voer op de pagina Notification Hub de volgende stappen uit:On the Notification Hub page, do the following steps:

    1. Voer een naam in Notification Hub in.Enter a name in Notification Hub.

    2. Voer een naam in Een nieuwe naamruimte maken in.Enter a name in Create a new namespace. Een naamruimte bevat een of meer hubs.A namespace contains one or more hubs.

    3. Selecteer een waarde in de vervolgkeuzelijst Locatie.Select a value from the Location drop-down list box. Deze waarde specificeert de locatie waar u de hub wilt maken.This value specifies the location in which you want to create the hub.

    4. Selecteer een bestaande resourcegroep in Resourcegroep of maak een naam voor een nieuwe resourcegroep.Select an existing resource group in Resource Group, or create a name for a new resource group.

    5. Selecteer Maken.Select Create.

      Azure Portal - eigenschappen van de Notification Hub instellen

  5. Selecteer Meldingen (het belpictogram) en selecteer vervolgens Ga naar resource.Select Notifications (the bell icon), and then select Go to resource. U kunt ook de lijst op de pagina Notification Hubs vernieuwen en uw hub selecteren.You can also refresh the list on the Notification Hubs page and select your hub.

    Azure Portal - Meldingen -> Naar de resource gaan

  6. Selecteer Toegangsbeleid in de lijst.Select Access Policies from the list. U ziet dat de twee verbindingsreeksen voor u beschikbaar zijn.Note that the two connection strings are available to you. Later moet u er pushmeldingen mee afhandelen.You'll need them later to handle push notifications.

    Belangrijk

    Gebruik niet het beleid DefaultFullSharedAccessSignature in uw toepassing.Do not use the DefaultFullSharedAccessSignature policy in your application. Deze mag alleen in uw back-end worden gebruikt.This is meant to be used in your back end only.

    Azure Portal - verbindingsreeksen voor de Notification Hub

Firebase Cloud Messaging-instellingen voor de hub configurerenConfigure Firebase Cloud Messaging settings for the hub

  1. Selecteer in het linkerdeelvenster onder Instellingen de optie Google (GCM/FCM) .In the left pane, under Settings, select Google (GCM/FCM).

  2. Voer de serversleutel in voor het FCM-project dat u eerder hebt opgeslagen.Enter the server key for the FCM project that you saved earlier.

  3. Selecteer Opslaan op de werkbalk.On the toolbar, select Save.

    Azure Notification Hub - Google (FCM)

  4. De Azure-portal geeft een bericht weer in de waarschuwingen dat de hub is bijgewerkt.The Azure portal displays a message in alerts that the hub has been successfully updated. De knop Opslaan kan niet worden gekozen.The Save button is disabled.

Uw hub is nu geconfigureerd om te werken met Firebase Cloud Messaging.Your hub is now configured to work with Firebase Cloud Messaging. U hebt ook de verbindingsreeksen die nodig zijn om meldingen naar een apparaat te verzenden en een app te registreren voor het ontvangen van meldingen.You also have the connection strings that are necessary to send notifications to a device and register an app to receive notifications.

Uw app verbinden met de Notification HubConnect your app to the notification hub

Google Play-services aan het project toevoegenAdd Google Play services to the project

  1. Selecteer in Android Studio in het menu de optie Hulpprogramma’s, en selecteer vervolgens SDK Manager.In Android Studio, select Tools on the menu, and then select SDK Manager.

  2. Selecteer de doelversie van de Android SDK die wordt gebruikt in het project.Select the target version of the Android SDK that is used in your project. Selecteer vervolgens Pakketdetails weergeven.Then select Show Package Details.

    Android SDK Manager - doelversie selecteren

  3. Selecteer Google API’s als dit nog niet is geïnstalleerd.Select Google APIs, if it's not already installed.

    Android SDK Manager - Google API’s geselecteerd

  4. Schakel over naar het tabblad SDK-hulpprogramma's . Als u Google Play Service nog niet hebt geïnstalleerd, selecteert u Google Play Services zoals wordt weergegeven in de onderstaande afbeelding.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. Selecteer vervolgens Toepassen om de installatie te starten.Then select Apply to install. Noteer het SDK-pad om het in een later stadium te kunnen gebruiken.Note the SDK path, for use in a later step.

    Android SDK Manager - Google Play Services geselecteerd

  5. Klik op OK zodra het dialoogvenster Wijziging bevestigen wordt weergegeven.If you see the Confirm Change dialog box, select OK. De vereiste onderdelen worden geïnstalleerd met behulp van het installatieprogramma voor onderdelen.The Component Installer installs the requested components. Selecteer Voltooien zodra de onderdelen zijn geïnstalleerd.Select Finish after the components are installed.

  6. Selecteer OK om het dialoogvenster Instellingen voor nieuwe projecten te sluiten.Select OK to close the Settings for New Projects dialog box.

  7. Open het bestand AndroidManifest.xml en voeg de volgende code toe aan de tag toepassing.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" />
    

Azure Notification Hubs-bibliotheken toevoegenAdd Azure Notification Hubs libraries

  1. Voeg in het bestand Build.Gradle voor de app de volgende regels toe in het gedeelte met afhankelijkheden.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. Voeg de volgende opslagplaats toe na het gedeelte met afhankelijkheden.Add the following repository after the dependencies section.

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

Ondersteuning voor Google Firebase toevoegenAdd Google Firebase support

  1. Voeg in het bestand Build.Gradle voor de app de volgende regels toe aan het gedeelte afhankelijkheden als die er nog niet staan.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. Voeg de volgende invoegtoepassing toe aan het einde van het bestand als deze er nog niet staat.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. Selecteer Nu synchroniseren op de werkbalk.Select Sync Now on the toolbar.

Het bestand AndroidManifest.xml bijwerkenUpdate the AndroidManifest.xml file

  1. Nadat u uw FCM-registratietoken hebt ontvangen, gebruikt u dit om te registreren bij Azure Notification Hubs.After you receive your FCM registration token, you use it to register with Azure Notification Hubs. U ondersteunt deze registratie op de achtergrond met een IntentService met de naam RegistrationIntentService.You support this registration in the background by using an IntentService named RegistrationIntentService. Met deze service wordt ook uw FCM-registratietoken vernieuwd.This service also refreshes your FCM registration token. U maakt ook een klasse met de naam FirebaseService als subklasse van FirebaseMessagingService en overschrijft de onMessageReceived-methode om meldingen te ontvangen en af te handelen.You also create a class named FirebaseService as a subclass of FirebaseMessagingService and override the onMessageReceived method to receive and handle notifications.

    Voeg de volgende servicedefinitie toe aan het bestand AndroidManifest.xml in de <application>-tag.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. Voeg de volgende vereiste FCM-gerelateerde machtigingen toe onder de tag </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" />
    

Code toevoegenAdd code

  1. Vouw in de Project-weergave app > src > main > java uit.In the Project View, expand app > src > main > java. Klik met de rechtermuisknop op de pakketmap onder java, selecteer Nieuw en selecteer vervolgens Java-klasse.Right-click your package folder under java, select New, and then select Java Class. Voer NotificationSettings in voor de naam en selecteer vervolgens OK.Enter NotificationSettings for the name, and then select OK.

    Zorg ervoor dat u de volgende drie tijdelijke aanduidingen in de volgende code bijwerkt voor de klasse NotificationSettings:Make sure to update these three placeholders in the following code for the NotificationSettings class:

    • HubListenConnectionString: De verbindingsreeks DefaultListenAccessSignature voor de hub.HubListenConnectionString: The DefaultListenAccessSignature connection string for your hub. Kopieer deze verbindingsreeks door te klikken op Toegangsbeleid in uw hub in de Azure-portal.You can copy that connection string by clicking Access Policies in your hub in the Azure portal.

    • HubName: Gebruik de naam van uw hub die wordt weergegeven op de hubpagina in de Azure-portal.HubName: Use the name of your hub that appears in the hub page in the Azure portal.

      NotificationSettings-code:NotificationSettings code:

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

      Belangrijk

      Voer de naam en de DefaultListenSharedAccessSignature van uw hub voordat u verdergaat.Enter the name and the DefaultListenSharedAccessSignature of your hub before proceeding further.

  2. Voeg een andere nieuwe klasse toe aan uw project met de naam RegistrationIntentService.Add another new class to your project named RegistrationIntentService. Met deze klasse wordt de IntentService-interface geïmplementeerd.This class implements the IntentService interface. Deze zorgt ook voor het vernieuwen van het GCM-token en de registratie bij de Notification Hub.It also handles refreshing the FCM token and registering with the notification hub.

    Gebruik de volgende code voor deze klasse.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", "")).equals(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. Voeg in de klasse MainActivity de volgende instructies voor import toe boven de klassendeclaratie.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. Voeg de volgende leden toe bovenaan de klasse.Add the following members at the top of the class. U gebruikt deze velden om de beschikbaarheid van Google Play Services te controleren, zoals aanbevolen door 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. Voeg in de klasse MainActivity de volgende methode toe om de beschikbaarheid van Google Play Services te controleren.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. Voeg in de klasse MainActivity de volgende code toe waarmee Google Play Services wordt gecontroleerd voordat u de IntentService aanroept om uw FCM-registratietoken op te halen en te registreren met uw 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. In de methode OnCreate van de klasse MainActivity voegt u de volgende code toe om het registratieproces te starten wanneer de activiteit wordt gemaakt: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. Voeg deze extra methoden toe aan de MainActivity om de status van de app te controleren en een rapport van de status in uw app op te nemen: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. Voor de methode ToastNotify wordt het besturingselement Hallo wereld TextView gebruikt om de status en kennisgevingen permanent in de app te melden.The ToastNotify method uses the "Hello World" TextView control to report status and notifications persistently in the app. Voeg in de indeling res > layout > activity_main.xml de volgende id toe voor het besturingselement.In your res > layout > activity_main.xml layout, add the following ID for that control.

    android:id="@+id/text_hello"
    

    Azure Notification Hubs - Verzenden testen

  10. Vervolgens gaat u een subklasse toevoegen voor de ontvanger die u hebt gedefinieerd in AndroidManifest.xml.Next you add a subclass for the receiver that you defined in AndroidManifest.xml. Voeg een andere nieuwe klasse toe aan uw project met de naam FirebaseService.Add another new class to your project named FirebaseService.

  11. Voeg boven in FirebaseService.java de volgende importinstructie toe: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. Voeg de volgende code toe voor de klasse FirebaseService, zodat dit een subklasse van FirebaseMessagingService wordt.Add the following code for the FirebaseService class, making it a subclass of FirebaseMessagingService.

    Deze code overschrijft de methode onMessageReceived, en rapporteert de ontvangen meldingen.This code overrides the onMessageReceived method and reports notifications that are received. Deze verzendt ook de pushmelding naar Android Notification Manager met de methode sendNotification().it also sends the push notification to the Android notification manager by using the sendNotification() method. De methode sendNotification() moet worden aangeroepen wanneer de app niet actief is en een melding is ontvangen.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. Klik in Android Studio in de menubalk op Bouwen > Project opnieuw opbouwen om ervoor te zorgen dat uw code geen fouten bevat.In Android Studio, on the menu bar, select Build > Rebuild Project to make sure that there aren't any errors in your code. Als u een foutbericht ontvangt over het pictogram ic_launcher, verwijdert u de volgende instructie uit het bestand 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. Zorg ervoor dat u een virtueel apparaat hebt voor het uitvoeren van de app.Ensure you have a virtual device for running the app. Als u er geen hebt, voegt u er als volgt een toe:If you do not have one, add one as follows:

    1. Apparaatbeheer openen
    2. Virtueel apparaat maken
  15. Voer de app uit op uw geselecteerde apparaat en controleer of dat deze correct is geregistreerd in de hub.Run the app on your selected device and verify that it registers successfully with the hub.

    Notitie

    De registratie kan mislukken bij de eerste keer starten totdat de methode onTokenRefresh() van de exemplaar-id-service wordt aangeroepen.Registration might fail during the initial launch until the onTokenRefresh() method of the instance ID service is called. De vernieuwing moet een succesvolle registratie met de Notification Hub tot stand brengen.The refresh should initiate a successful registration with the notification hub.

    De registratie van het apparaat is voltooid

Testen van melding verzenden vanuit de Notification HubTest send notification from the notification hub

U kunt pushmeldingen verzenden vanuit de Azure-portal door de volgende stappen uit te voeren:You can send push notifications from the Azure portal by taking the following steps:

  1. Ga in de Azure-portal naar de pagina Notification Hub voor uw hub en selecteer Verzenden testen in het gedeelte Probleemoplossing.In the Azure portal, on the Notification Hub page for your hub, select Test Send in the Troubleshooting section.

  2. Selecteer voor Platforms de optie Android.For Platforms, select Android.

  3. Selecteer Verzenden.Select Send. U ziet nog geen melding op het Android-apparaat omdat u daarop de mobiele app niet hebt uitgevoerd.You won't see a notification on the Android device yet because you haven't run the mobile app on it. Nadat u de mobiele app hebt uitgevoerd, selecteert u opnieuw Verzenden om de melding weer te geven.After you run the mobile app, select the Send button again to see the notification message.

  4. Bekijk het resultaat van de bewerking in de lijst onderaan.See the result of the operation in the list at the bottom.

    Azure Notification Hubs - Verzenden testen

  5. U ziet de melding op uw apparaat.You see the notification message on your device.

    Melding op apparaat

Pushmeldingen worden gewoonlijk in een back-endservice zoals Mobile Apps of ASP.NET verzonden met een compatibele bibliotheek.Push notifications are normally sent in a back-end service like Mobile Apps or ASP.NET using a compatible library. Als er geen bibliotheek beschikbaar is voor uw back-end, kunt u de REST API ook rechtstreeks gebruiken om meldings berichten te verzenden.If a library isn't available for your back end, you can also use the REST API directly to send notification messages.

Hier volgt een lijst met andere zelf studies die u mogelijk wilt controleren voor het verzenden van meldingen:Here is a list of some other tutorials you might want to review for sending notifications:

De mobiele app uitvoeren in een emulatorRun the mobile app on emulator

Voordat pushmeldingen binnen een emulator test, moet u ervoor zorgen dat de installatiekopie van de emulator het Google API-niveau ondersteunt dat u voor uw app hebt gekozen.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. Als uw installatiekopie geen ondersteuning biedt voor native Google-API’s, kan de uitzondering SERVICE_NIET_BESCHIKBAAR worden weergegeven.If your image doesn't support native Google APIs, you might get the SERVICE_NOT_AVAILABLE exception.

Bovendien moet uw Google-account zijn toegevoegd aan de actieve emulator onder Instellingen > Accounts.Also make sure that you've added your Google account to your running emulator under Settings > Accounts. Anders kunnen pogingen om opnieuw te registreren bij FCM leiden tot de uitzondering VERIFICATIE_MISLUKT.Otherwise, your attempts to register with FCM might result in the AUTHENTICATION_FAILED exception.

Volgende stappenNext steps

In deze zelfstudie hebt u Firebase Cloud Messaging gebruikt om meldingen te verzenden naar alle Android-apparaten die zijn geregistreerd bij de service.In this tutorial, you used Firebase Cloud Messaging to broadcast notifications to all Android devices that were registered with the service. Ga verder met de volgende zelfstudie als u wilt weten hoe u pushmeldingen kunt verzenden naar specifieke apparaten:To learn how to push notifications to specific devices, advance to the following tutorial: