Zelfstudie: Pushmeldingen verzenden naar Xamarin.Android-apps met behulp van Azure Notification HubsTutorial: Push notifications to Xamarin.Android apps using Azure Notification Hubs

OverzichtOverview

In deze zelfstudie wordt gedemonstreerd hoe u met Azure Notification Hubs pushmeldingen verzendt naar een Xamarin.Android-toepassing.This tutorial shows you how to use Azure Notification Hubs to send push notifications to a Xamarin.Android application. U maakt een lege Xamarin.Android-app die pushmeldingen ontvangt via Firebase Cloud Messaging (FCM).You create a blank Xamarin.Android app that receives push notifications by using Firebase Cloud Messaging (FCM). U gebruikt u de Notification Hub om pushmeldingen uit te zenden naar alle apparaten waarop uw app wordt uitgevoerd.You use your notification hub to broadcast push notifications to all the devices running your app. De voltooide code is beschikbaar in het Notification hubs-app -voor beeld.The finished code is available in the NotificationHubs app sample.

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

  • Een Firebase-project maken en Firebase Cloud Messaging inschakelenCreate a Firebase project and enable Firebase Cloud Messaging
  • Een Notification Hub makenCreate a notification hub
  • Een Xamarin.Android-app maken en deze verbinden met de Notification HubCreate a Xamarin.Android app and connect it to the notification hub
  • Testmeldingen verzenden vanuit Azure PortalSend test notifications from the Azure portal

VereistenPrerequisites

Een Firebase-project maken en Firebase Cloud Messaging inschakelenCreate a Firebase project and enable Firebase Cloud Messaging

  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. Voer voor de naam van het Android-pakketeen naam in voor uw pakket.For the Android package name, enter a name for your package. Bijvoorbeeld: tutorials.tutoria1.xamarinfcmapp.For example: tutorials.tutoria1.xamarinfcmapp.

      De pakket naam opgeven

    2. Selecteer app registreren.Select Register app.

    3. Selecteer Google-services. json downloaden.Select Download google-services.json. Sla het bestand vervolgens op in de map van het project en selecteer volgende.Then save the file into the folder of your project and select Next. Als u nog geen Visual Studio-project hebt gemaakt, kunt u deze stap uitvoeren nadat u het project hebt gemaakt.If you haven't created the Visual Studio project yet, you can do this step after you create the project.

      Google-services. json downloaden

    4. Selecteer Volgende.Select Next.

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

      De laatste stap overs Laan

  4. 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

  5. Als u het bestand Google-services. json nog niet hebt gedownload, kunt u het downloaden op deze pagina.If you haven't downloaded the google-services.json file, you can do download it on this page.

    Google-services. json downloaden van het tabblad Algemeen

  6. Schakel over naar het tabblad Cloud Messa ging bovenaan.Switch to the Cloud Messaging tab at the top. Kopieer de Server sleutel en sla deze op voor later gebruik.Copy and save the Server key for later use. U gebruikt deze waarde voor het configureren van uw notification hub.You use this value to configure your notification hub.

    Server sleutel kopiëren

Een Notification Hub makenCreate a notification hub

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

  2. Selecteer alle services op het menu aan de linkerkant en selecteer vervolgens Notification Hubs in de Mobile sectie.Select All services on the left menu, and then select Notification Hubs in the Mobile section. Selecteer het sterpictogram naast de naam van de service toe te voegen van de service de Favorieten sectie in het menu links.Select the star icon next to the service name to add the service to the FAVORITES section on the left menu. Nadat u hebt toegevoegd Notification Hubs naar Favorieten, selecteert u deze in het menu links.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.Enter a name in Notification Hub.

    2. Voer een naam in maken van een nieuwe naamruimte.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 van de locatie vervolgkeuzelijst met box.Select a value from the Location drop-down list box. Deze waarde geeft de locatie waarin u wilt maken van de hub.This value specifies the location in which you want to create the hub.

    4. Selecteer een bestaande resourcegroep in resourcegroep, of een naam voor een nieuwe resourcegroep maken.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 naar de resource gaan.Select Notifications (the bell icon), and then select Go to resource. U kunt ook de lijst vernieuwen op de Notification Hubs pagina en selecteer uw hub.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. Houd er rekening mee dat de twee verbindingsreeksen voor u beschikbaar zijn.Note that the two connection strings are available to you. U moet ze later voor het afhandelen van pushmeldingen.You'll need them later to handle push notifications.

    Belangrijk

    Voer niet gebruiken de DefaultFullSharedAccessSignature beleid in uw toepassing.Do not use the DefaultFullSharedAccessSignature policy in your application. Dit is bedoeld om te worden gebruikt in uw back-end alleen.This is meant to be used in your back end only.

    Azure Portal - verbindingsreeksen voor de Notification Hub

Instellingen voor GCM/FCM configureren voor de notification hubConfigure GCM/FCM settings for the notification hub

  1. Selecteer Google (GCM/FCM)/ in de sectie instellingen in het menu links.Select Google (GCM/FCM)/ in the Settings section on the left menu.

  2. Voer de Server sleutel in die u hebt genoteerd in de Google Firebase-console.Enter the server key you noted down from the Google Firebase Console.

  3. Selecteer Opslaan op de werkbalk.Select Save on the toolbar.

De Notification Hub is geconfigureerd om te werken met FCM en u hebt de verbindingsreeksen om uw app te registreren voor het ontvangen van meldingen en voor het verzenden van pushmeldingen.Your notification hub is configured to work with FCM, and you have the connection strings to both register your app to receive notifications and to send push notifications.

Een Xamarin.Android-app maken en deze verbinden met de Notification HubCreate a Xamarin.Android app and connect it to notification hub

Visual Studio-project maken en NuGet-pakketten toevoegenCreate Visual Studio project and add NuGet packages

Notitie

De stappen die in deze zelf studie worden beschreven, zijn voor Visual Studio 2017.The steps documented in this tutorial are for Visual Studio 2017.

  1. Open in Visual Studio het menu File en selecteer New en vervolgens Project.In Visual Studio, open the File menu, select New, and then select Project. Voer in het venster New Project de volgende stappen uit:In the New Project window, do these steps:

    1. Vouw geïnstalleerd, Visual C# en klik vervolgens op Android.Expand Installed, Visual C#, and then click Android.

    2. Selecteer Android-app (Xamarin) in de lijst.Select Android App (Xamarin) from the list.

    3. Voer een naam in voor het project.Enter a name for the project.

    4. Selecteer een locatie voor het project.Select a location for the project.

    5. Selecteer OKSelect OK

      Het dialoogvenster Nieuw project

  2. In het dialoog venster nieuwe Android-app selecteert u lege appen selecteert u OK.On the New Android App dialog box, select Blank App, and select OK.

    Het dialoogvenster Nieuw project

  3. Vouw in het venster Solution Explorer het item Properties uit en klik op AndroidManifest.xml.In the Solution Explorer window, expand Properties, and click AndroidManifest.xml. Wijzig de naam van het pakket zodat deze overeenkomt met de pakketnaam die u hebt ingevoerd tijdens het toevoegen van Firebase Cloud Messaging aan uw project in Google Firebase Console.Update the package name to match the package name you entered when adding Firebase Cloud Messaging to your project in the Google Firebase Console.

    Pakketnaam in GCM

  4. Stel de Android-doel versie voor het project in op android 9,0 (cirkel) door de volgende stappen uit te voeren:Set the target Android version for the project to Android 9.0 (pie) by following these steps:

    1. Klik met de rechter muisknop op het project en selecteer Eigenschappen.Right-click your project, and select Properties.
    2. Voor het **compileren met behulp van Android-versie: (Target Framework) selecteert u **Android 9,0 (cirkel).****For the Compile using Android version: (Target framework) field, select Android 9.0 (Pie).
    3. Selecteer Ja in het bericht venster om door te gaan met het wijzigen van het doel raamwerk.Select Yes on the message box to continue with changing the target framework.
  5. Voeg de vereiste NuGet-pakketten aan het project toe door de volgende stappen uit te voeren:Add required NuGet packages to the project by following these steps:

    1. Klik met de rechtermuisknop op het project en selecteer Manage NuGet Packages... .Right-click your project, and select Manage NuGet Packages....

    2. Ga naar het tabblad geïnstalleerd , selecteer Xamarin. Android. support. Designen selecteer bijwerken in het rechterdeel venster om het pakket bij te werken naar de meest recente versie.Switch to the Installed tab, select Xamarin.Android.Support.Design, and select Update in the right pane to update the package to the latest version.

    3. Ga naar het tabblad Bladeren . Zoek naar Xamarin.GooglePlayServices.Base.Switch to the Browse tab. Search for Xamarin.GooglePlayServices.Base. Selecteer Xamarin.GooglePlayServices.Base in de lijst met resultaten.Select Xamarin.GooglePlayServices.Base in the result list. Selecteer vervolgens Install.Then, select Install.

      Google Play Services NuGet

    4. Zoek in het venster NuGet Package Manager naar Xamarin.Firebase.Messaging.In the NuGet Package Manager window, search for Xamarin.Firebase.Messaging. Selecteer Xamarin.Firebase.Messaging in de lijst met resultaten.Select Xamarin.Firebase.Messaging in the result list. Selecteer vervolgens Install.Then, select Install.

    5. Zoek nu naar Xamarin.Azure.NotificationHubs.Android.Now, search for Xamarin.Azure.NotificationHubs.Android. Selecteer Xamarin.Azure.NotificationHubs.Android in de lijst met resultaten.Select Xamarin.Azure.NotificationHubs.Android in the result list. Selecteer vervolgens Install.Then, select Install.

Voeg het JSON-bestand van Google Services toeAdd the Google Services JSON File

  1. Kopieer het bestand google-services.json dat u uit de Google Firebase Console hebt gedownload naar de projectmap.Copy the google-services.json file that you downloaded from the Google Firebase Console to the project folder.

  2. Voeg google-services.json toe aan het project.Add google-services.json to the project.

  3. Selecteer google-services.json in het venster Solution Explorer.Select google-services.json in the Solution Explorer window.

  4. Stel in het deelvenster Properties de optie Build Action in op GoogleServicesJson.In the Properties pane, set the Build Action to GoogleServicesJson. Als u GoogleServicesJson niet ziet, sluit u Visual Studio, opent u het programma opnieuw, opent u het project opnieuw en probeert u het nog een keer.If you don't see GoogleServicesJson, close Visual Studio, relaunch it, reopen the project, and retry.

    Build Action van GoogleServicesJson

Notification Hubs in uw project instellenSet up notification hubs in your project

Firebase Cloud Messaging registrerenRegistering with Firebase Cloud Messaging

  1. Open het bestand AndroidManifest.xml en voeg de volgende <receiver>-elementen toe aan het element <application>:Open the AndroidManifest.xml file and insert the following <receiver> elements into the <application> element:

    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>
    
  2. Voeg de volgende instructies toe vóór het toepassings element.Add the following statements before the application element.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    
  3. Verzamel de volgende informatie voor uw Android-app en Notification Hub:Gather the following information for your Android app and notification hub:

    • Verbindingsreeks voor luisteren: Kies op het dashboard in de Azure-portal de optie Verbindingsreeksen weergeven.Listen connection string: On the dashboard in the Azure portal, choose View connection strings. Kopieer de verbindingsreeks DefaultListenSharedAccessSignature voor deze waarde.Copy the DefaultListenSharedAccessSignature connection string for this value.
    • Hubnaam: Naam van uw hub in de Azure-portal.Hub name: Name of your hub from the Azure portal. Bijvoorbeeld mynotificationhub2.For example, mynotificationhub2.
  4. Klik in het venster Solution Explorer met de rechtermuisknop op uw project, selecteer Add en vervolgens Class.In the Solution Explorer window, right-click your project, select Add, and then select Class.

  5. Maak een klasse Constants.cs voor uw Xamarin-project en definieer de volgende constantewaarden in de klasse.Create a Constants.cs class for your Xamarin project and define the following constant values in the class. Vervang de tijdelijke aanduidingen door de waarden.Replace the placeholders with your values.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Voeg de volgende using-instructies toe aan MainActivity.cs:Add the following using statements to MainActivity.cs:

    using Android.Util;
    using Android.Gms.Common;
    
  7. Voeg de volgende eigenschappen toe aan de klasse MainActivity.Add the following properties to the MainActivity class. De code variabele wordt gebruikt voor het weer geven van een waarschuwings venster wanneer de app wordt uitgevoerd:The TAG variable will be used to show an alert dialog when the app is running:

    public const string TAG = "MainActivity";
    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
  8. Voeg de volgende methode toe aan de klasse MainActivity.Add the following method to the MainActivity class. Hiermee wordt gecontroleerd of Google play services beschikbaar zijn op het apparaat.It checks whether Google Play Services are available on the device.

    public bool IsPlayServicesAvailable()
    {
        int resultCode = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.Success)
        {
            if (GoogleApiAvailability.Instance.IsUserResolvableError(resultCode))
                Log.Debug(TAG, GoogleApiAvailability.Instance.GetErrorString(resultCode));
            else
            {
                Log.Debug(TAG, "This device is not supported");
                Finish();
            }
            return false;
        }
    
        Log.Debug(TAG, "Google Play Services is available.");
        return true;
    }
    
  9. Voeg de volgende methode toe aan de klasse MainActivity om een meldings kanaal te maken.Add the following method to the MainActivity class that creates a notification channel.

    private void CreateNotificationChannel()
    {
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification
            // channel on older versions of Android.
            return;
        }
    
        var channelName = CHANNEL_ID;
        var channelDescription = string.Empty;
        var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
        {
            Description = channelDescription
        };
    
        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }
    
  10. Voeg in MainActivity.cs de volgende code toe aan OnCreate, achter base.OnCreate(savedInstanceState):In MainActivity.cs, add the following code to OnCreate after base.OnCreate(savedInstanceState):

    if (Intent.Extras != null)
    {
        foreach (var key in Intent.Extras.KeySet())
        {
            if(key!=null)
            {
                var value = Intent.Extras.GetString(key);
                Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
            }
        }
    }
    
    IsPlayServicesAvailable();
    CreateNotificationChannel();
    
  11. Voeg een klasse met MyFirebaseMessagingService de naam toe aan uw project.Add a class named MyFirebaseMessagingService to your project.

  12. Voeg de volgende using-instructies toe aan MyFirebaseMessagingService.cs.Add the following using statements to MyFirebaseMessagingService.cs.

    using Android.Util;
    using Firebase.Messaging;
    using Android.Support.V4.App;    
    using WindowsAzure.Messaging;
    
  13. Voeg het volgende toe boven de klassedeclaratie en laat uw klasse gegevens overnemen van FirebaseMessagingService:Add the following above your class declaration, and have your class inherit from FirebaseMessagingService:

    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    
  14. Voeg de volgende code toe MyFirebaseMessagingService.cs om de ontvangen berichten te verwerken.Add the following code to MyFirebaseMessagingService.cs to process messages that are received.

        const string TAG = "MyFirebaseMsgService";
        NotificationHub hub;
    
        public override void OnMessageReceived(RemoteMessage message)
        {
            Log.Debug(TAG, "From: " + message.From);
            if (message.GetNotification() != null)
            {
                //These is how most messages will be received
                Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
                SendNotification(message.GetNotification().Body);
            }
            else
            {
                //Only used for debugging payloads sent from the Azure portal
                SendNotification(message.Data.Values.First());
    
            }
        }
    
        void SendNotification(string messageBody)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
    
            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID);
    
            notificationBuilder.SetContentTitle("FCM Message")
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(messageBody)
                        .SetAutoCancel(true)
                        .SetShowWhen(false)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  15. Voeg de volgende methoden toe aan de klasse MyFirebaseMessagingService om het FCM-registratie token te ontvangen en te verzenden naar het Notification Hubs-exemplaar (hub).Add the following methods to the MyFirebaseMessagingService class to receive the FCM registration token and send it to the Notification Hubs instance (hub).

        public override void OnNewToken(string token)
        {
            Log.Debug(TAG, "FCM token: " + token);
            SendRegistrationToServer(token);
        }
    
        void SendRegistrationToServer(string token)
        {
            // Register with Notification Hubs
            hub = new NotificationHub(Constants.NotificationHubName,
                                        Constants.ListenConnectionString, this);
    
            var tags = new List<string>() { };
            var regID = hub.Register(token, tags.ToArray()).RegistrationId;
    
            Log.Debug(TAG, $"Successful registration of ID {regID}");
        }
    
  16. Compileer het nieuwe project.Build your project.

  17. Voer uw app uit op uw apparaat of in een geladen emulator.Run your app on your device or loaded emulator

Testmeldingen verzenden vanuit Azure PortalSend test notification from the Azure portal

U kunt ontvangst van meldingen in uw app testen met de optie Test verzenden in Azure-portal.You can test receiving notifications in your app with the Test Send option in the Azure portal. Er wordt dan een pushmelding als test naar uw apparaat verzonden.It sends a test push notification to your device.

Azure Portal - Test verzenden

Pushmeldingen worden gewoonlijk in een back-endservice zoals Mobile Services of ASP.NET verzonden via een compatibele bibliotheek.Push notifications are normally sent in a back-end service like Mobile Services or ASP.NET through 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.

Volgende stappenNext steps

In deze zelfstudie hebt u meldingen uitgezonden naar al uw Android-apparaten die zijn geregistreerd bij de back-end.In this tutorial, you sent broadcast notifications to all your Android devices registered with the backend. Als u wilt weten hoe u pushmeldingen kunt verzenden naar specifieke Android-apparaten, gaat u verder met de volgende zelfstudie:To learn how to push notifications to specific Android devices, advance to the following tutorial: