Tutorial: Senden von Pushbenachrichtigungen an Xamarin.Android-Apps mit Notification Hubs

Überblick

Hinweis

Informationen zur Einstellung und Migrationsschritte für Firebase Cloud Messaging finden Sie unter Google Firebase Cloud Messaging-Migration.

In diesem Lernprogramm erfahren Sie, wie Sie mithilfe von Azure Notification Hubs eine Pushbenachrichtigung an eine Xamarin.Android-App senden. Sie erstellen eine leere Xamarin.Android-App, die Pushbenachrichtigungen mithilfe von Firebase Cloud Messaging (FCM) empfängt. Sie können über Ihren Notification Hub Pushbenachrichtigungen an alle Geräte senden, die Ihre App ausführen. Der fertige Code steht in der NotificationHubs-Beispiel-App zur Verfügung.

In diesem Tutorial führen Sie die folgenden Schritte aus:

  • Erstellen eines Firebase-Projekts und Aktivieren von Firebase Cloud Messaging
  • Erstellen eines Notification Hubs
  • Erstellen einer Xamarin.Android-App und Herstellen einer Verbindung mit dem Notification Hub
  • Senden von Testbenachrichtigungen im Azure-Portal

Voraussetzungen

Erstellen eines Firebase-Projekts und Aktivieren von Firebase Cloud Messaging

  1. Melden Sie sich bei der Firebase-Konsole an. Erstellen Sie ein neues Firebase-Projekt, falls Sie noch keins besitzen.

  2. Klicken Sie nach der Erstellung Ihres Projekts auf Add Firebase to your Android app (Firebase der Android-App hinzufügen).

    Add Firebase to your Android app

  3. Führen Sie auf der Seite Add Firebase to your Android app (Firebase der Android-App hinzufügen) die folgenden Schritte aus:

    1. Geben Sie in Android-Paketname einen Namen für Ihr Paket ein. Beispiel: tutorials.tutoria1.xamarinfcmapp

      Specify the package name

    2. Wählen Sie Register app (App registrieren) aus.

    3. Klicken Sie auf google-services.json herunterladen. Speichern Sie dann die Datei im Ordner Ihres Projekts, und wählen Sie Weiter aus. Falls Sie das Visual Studio-Projekt noch nicht erstellt haben, können Sie diesen Schritt nach der Projekterstellung ausführen.

      Download google-services.json

    4. Wählen Sie Weiter aus.

    5. Klicken Sie auf Diesen Schritt überspringen.

      Skip the last step

  4. Klicken Sie in der Firebase-Konsole auf das Zahnrad für Ihr Projekt. Klicken Sie dann auf Projekteinstellungen.

    Select Project Settings

  5. Wenn Sie die Datei google-services.json nicht heruntergeladen haben, können Sie dies auf dieser Seite tun.

    Download google-services.json from the General tab

  6. Wechseln Sie oben zur Registerkarte Cloud Messaging. Kopieren und speichern Sie den Serverschlüssel für eine spätere Verwendung. Dieser Wert dient zum Konfigurieren des Notification Hub.

    Copy server key

Erstellen eines Notification Hubs

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Menü links Alle Dienste aus. A screenshot showing select All Services for an existing namespace.

  3. Geben Sie Notification Hubs in das Textfeld Dienste filtern ein. Wählen Sie das Sternsymbol neben dem Dienstnamen aus, um den Dienst im linken Menü zum Abschnitt FAVORITEN hinzuzufügen. Wählen Sie Notification Hubs aus.

    A screenshot showing how to filter for notification hubs.

  4. Wählen Sie auf der Seite Notification Hubs in der Symbolleiste die Option Erstellen aus.

    A screenshot showing how to create a new notification hub.

  5. Führen Sie auf der Registerkarte Grundlagen der Seite Notification Hub die folgenden Schritte aus:

    1. Wählen Sie unter Abonnement den Namen des Azure-Abonnements aus, das Sie verwenden möchten, und wählen Sie dann eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe.

    2. Geben Sie unter Namespacedetails einen eindeutigen Namen für den neuen Namespace ein.

    3. Ein Namespace enthält mindestens einen Notification Hub. Geben Sie daher unter Notification Hub-Details einen Namen für den Hub ein.

    4. Wählen Sie im Dropdown-Listenfeld Standort einen Wert aus. Dieser Wert gibt den Standort an, an dem der Hub erstellt werden soll.

      Screenshot showing notification hub details.

    5. Überprüfen Sie die Option Verfügbarkeitszonen. Wenn Sie eine Region mit Verfügbarkeitszonen ausgewählt haben, ist das Kontrollkästchen standardmäßig aktiviert. Verfügbarkeitszonen sind ein kostenpflichtiges Feature, für das in Ihrem Tarif zusätzliche Gebühren anfallen.

    6. Wählen Sie Ihre Option für die Notfallwiederherstellung aus: Keine, Gekoppelte Wiederherstellungsregion oder Flexible Wiederherstellungsregion. Wenn Sie Gekoppelte Wiederherstellungsregion auswählen, wird die Failoverregion angezeigt. Wenn Sie Flexible Wiederherstellungsregion auswählen, verwenden Sie die Dropdownliste, um aus einer Liste mit Wiederherstellungsregionen auszuwählen.

      Screenshot showing availability zone details.

    7. Klicken Sie auf Erstellen.

  6. Wählen Sie nach Abschluss der Bereitstellung die Option Zu Ressourcengruppe wechseln.

Konfigurieren von GCM/FCM-Einstellungen für den Notification Hub

  1. Wählen Sie im linken Menü im Abschnitt Settings (Einstellungen) die Option Google (GCM/FCM) aus.

  2. Geben Sie den Serverschlüssel ein, den Sie in der Google Firebase-Konsole notiert haben.

  3. Wählen Sie auf der Symbolleiste Speichern aus.

    Screenshot of Notification Hub in Azure Portal with Google G C M F C M option highlighted and outlined in red.

Der Notification Hub ist für die Arbeit mit FCM konfiguriert, und Sie besitzen die Verbindungszeichenfolgen, um die App für den Empfang von Benachrichtigungen zu registrieren und Pushbenachrichtigungen zu versenden.

Erstellen einer Xamarin.Android-App und Herstellen einer Verbindung mit dem Notification Hub

Erstellen eines Visual Studio-Projekts und Hinzufügen von NuGet-Paketen

Hinweis

Die in diesem Tutorial dokumentierten Schritte gelten für Visual Studio 2017.

  1. Öffnen Sie in Visual Studio das Menü Datei, und wählen Sie die Optionen Neu und Projekt. Gehen Sie im Fenster Neues Projekt wie folgt vor:

    1. Erweitern Sie Installiert > Visual C# , und klicken Sie auf Android.

    2. Wählen Sie in der Liste die Option Android-App (Xamarin) aus.

    3. Geben Sie einen Namen für das Projekt ein.

    4. Wählen Sie einen Speicherort für das Projekt aus.

    5. Klicken Sie auf OK.

      New Project dialog

  2. Wählen Sie im Dialogfeld Neue Android-App die Option Leere App und anschließend OK aus.

    Screenshot that highlights the Blank App template.

  3. Erweitern Sie im Projektmappen-Explorer-Fenster Eigenschaften, und klicken Sie auf AndroidManifest.xml. Aktualisieren Sie den Paketnamen entsprechend dem Paketnamen, den Sie eingegeben haben, als Sie Ihrem Projekt in der Google Firebase-Konsole Firebase Cloud Messaging hinzugefügt haben.

    Package name in GCM

  4. Führen Sie die folgenden Schritte aus, um die Android-Zielversion für das Projekt auf Android 10.0 festzulegen:

    1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie Eigenschaften aus.
    2. Wählen Sie für das Feld Compile using Android version: (Target framework) (Mit Android-Version kompilieren: Zielframework)) die Option Android 10.0 aus.
    3. Wählen Sie im Meldungsfeld Ja aus, um die Änderung des Zielframeworks fortzusetzen.
  5. Fügen Sie mit den folgenden Schritten dem Projekt die erforderlichen NuGet-Pakete hinzu:

    1. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie NuGet-Pakete verwalten... aus.

    2. Wechseln Sie zur Registerkarte Installiert, und wählen Sie Xamarin.Android.Support.Design und dann im rechten Bereich Aktualisieren aus, um das Paket auf die aktuelle Version zu aktualisieren.

    3. Wechseln Sie zur Registerkarte Durchsuchen. Suchen Sie nach Xamarin.GooglePlayServices.Base. Wählen Sie Xamarin.GooglePlayServices.Base in der Ergebnisliste aus. Wählen Sie dann Installieren aus.

      Google Play Services NuGet

    4. Suchen Sie im Fenster NuGet-Paket-Manager nach Xamarin.Firebase.Messaging. Wählen Sie Xamarin.Firebase.Messaging in der Ergebnisliste aus. Wählen Sie dann Installieren aus.

    5. Suchen Sie jetzt nach Xamarin.Azure.NotificationHubs.Android. Wählen Sie Xamarin.Azure.NotificationHubs.Android in der Ergebnisliste aus. Wählen Sie dann Installieren aus.

Hinzufügen der JSON-Datei von Google Services

  1. Kopieren Sie die Datei google-services.json, die Sie aus der Google Firebase-Konsole in den Projektordner heruntergeladen haben.

  2. Fügen Sie google-services.json zum Projekt hinzu.

  3. Wählen Sie im Projektmappen-Explorer die Datei google-services.json aus.

  4. Legen Sie im Bereich Eigenschaften die Buildaktion auf GoogleServicesJson fest. Wenn GoogleServicesJson nicht angezeigt wird, schließen Sie Visual Studio, starten Sie es neu, öffnen Sie das Projekt erneut, und versuchen Sie es erneut.

    GoogleServicesJson build action

Einrichten von Notification Hubs in Ihrem Projekt

Registrieren bei Firebase Cloud Messaging

  1. Bei der Migration von Google Cloud Messaging zu Firebase enthält die Datei AndroidManifest.xml Ihres Projekts unter Umständen eine veraltete GCM-Konfiguration. Dies kann zu doppelten Benachrichtigungen führen. Bearbeiten Sie die Datei, und entfernen Sie die folgenden Zeilen im Abschnitt <application> (sofern vorhanden):

    <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. Fügen Sie die folgenden Anweisungen vor dem Anwendungselement hinzu.

    <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. Erfassen Sie für Ihre Android-App und den Notification Hub folgende Informationen:

    • Verbindungszeichenfolge für Überwachung: Wählen Sie im Azure portal auf dem Dashboard die Option Verbindungszeichenfolgen anzeigen. Kopieren Sie die Verbindungszeichenfolge DefaultListenSharedAccessSignature für diesen Wert.
    • Hub-Name: Der Name des Hubs aus dem Azure portal. Beispiel: mynotificationhub2.
  4. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen und anschließend Klasse aus.

  5. Erstellen Sie eine Constants.cs-Klasse für Ihr Xamarin-Projekt, und definieren Sie die folgenden Konstantenwerte in der Klasse. Ersetzen Sie die Platzhalter durch Ihre Werte.

    public static class Constants
    {
        public const string ListenConnectionString = "<Listen connection string>";
        public const string NotificationHubName = "<hub name>";
    }
    
  6. Fügen Sie MainActivity.cs die folgenden using-Anweisungen hinzu:

    using WindowsAzure.Messaging.NotificationHubs;
    
  7. Fügen Sie der MainActivity-Klasse die folgenden Eigenschaften hinzu:

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    
    
  8. Fügen Sie OnCreate in MainActivity.cs nach base.OnCreate(savedInstanceState) den folgenden Code hinzu:

    // Listen for push notifications
    NotificationHub.SetListener(new AzureListener());
    
    // Start the SDK
    NotificationHub.Start(this.Application, HubName, ConnectionString);
    
  9. Fügen Sie dem Projekt eine Klasse namens AzureListener hinzu.

  10. Fügen Sie AzureListener.cs die folgenden using-Anweisungen hinzu:

    using Android.Content;
    using WindowsAzure.Messaging.NotificationHubs;
    
  11. Fügen Sie oberhalb Ihrer Klassendeklaration Folgendes hinzu, und legen Sie fest, dass Ihre Klasse von Java.Lang.Object erbt und INotificationListener implementiert:

    public class AzureListener : Java.Lang.Object, INotificationListener
    
  12. Fügen Sie den folgenden Code in der AzureListener-Klasse hinzu, um die empfangenen Nachrichten zu verarbeiten.

        public void OnPushNotificationReceived(Context context, INotificationMessage message)
        {
            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(message.Title)
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentText(message.Body)
                        .SetAutoCancel(true)
                        .SetShowWhen(false)
                        .SetContentIntent(pendingIntent);
    
            var notificationManager = NotificationManager.FromContext(this);
    
            notificationManager.Notify(0, notificationBuilder.Build());
        }
    
  13. Erstellen Sie Ihr Projekt.

  14. Ausführen Ihrer App auf Ihrem Gerät oder im geladenen Emulator

Senden einer Testbenachrichtigung im Azure-Portal

Mit der Option Testsendevorgang im Azure portal können Sie den Empfang von Benachrichtigungen in Ihrer App testen. Diese Option sendet zu Testzwecken eine Pushbenachrichtigung an Ihr Gerät.

Azure portal - Test Send

Pushbenachrichtigungen werden normalerweise in einem Back-End-Dienst, z.B. Mobile Services oder ASP.NET, über eine kompatible Bibliothek gesendet. Falls für Ihr Back-End keine Bibliothek verfügbar ist, können Sie Benachrichtigungen auch direkt über die REST-API senden.

Nächste Schritte

In diesem Tutorial haben Sie Broadcastbenachrichtigungen an alle Android-Geräte gesendet, die beim Back-End registriert sind. Um zu erfahren, wie Sie Pushbenachrichtigungen an bestimmte Android-Geräte senden, fahren Sie mit dem folgenden Tutorial fort: