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
- Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Azure-Konto erstellen, bevor Sie beginnen.
- Visual Studio mit Xamarin unter Windows oder Visual Studio für Mac unter OS X.
- Ein aktives Google-Konto
Erstellen eines Firebase-Projekts und Aktivieren von Firebase Cloud Messaging
Melden Sie sich bei der Firebase-Konsole an. Erstellen Sie ein neues Firebase-Projekt, falls Sie noch keins besitzen.
Klicken Sie nach der Erstellung Ihres Projekts auf Add Firebase to your Android app (Firebase der Android-App hinzufügen).
Führen Sie auf der Seite Add Firebase to your Android app (Firebase der Android-App hinzufügen) die folgenden Schritte aus:
Geben Sie in Android-Paketname einen Namen für Ihr Paket ein. Beispiel:
tutorials.tutoria1.xamarinfcmapp
Wählen Sie Register app (App registrieren) aus.
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.
Wählen Sie Weiter aus.
Klicken Sie auf Diesen Schritt überspringen.
Klicken Sie in der Firebase-Konsole auf das Zahnrad für Ihr Projekt. Klicken Sie dann auf Projekteinstellungen.
Wenn Sie die Datei google-services.json nicht heruntergeladen haben, können Sie dies auf dieser Seite tun.
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.
Erstellen eines Notification Hubs
Melden Sie sich beim Azure-Portal an.
Wählen Sie im Menü links Alle Dienste aus.
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.
Wählen Sie auf der Seite Notification Hubs in der Symbolleiste die Option Erstellen aus.
Führen Sie auf der Registerkarte Grundlagen der Seite Notification Hub die folgenden Schritte aus:
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.
Geben Sie unter Namespacedetails einen eindeutigen Namen für den neuen Namespace ein.
Ein Namespace enthält mindestens einen Notification Hub. Geben Sie daher unter Notification Hub-Details einen Namen für den Hub ein.
Wählen Sie im Dropdown-Listenfeld Standort einen Wert aus. Dieser Wert gibt den Standort an, an dem der Hub erstellt werden soll.
Ü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.
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.
Klicken Sie auf Erstellen.
Wählen Sie nach Abschluss der Bereitstellung die Option Zu Ressourcengruppe wechseln.
Konfigurieren von GCM/FCM-Einstellungen für den Notification Hub
Wählen Sie im linken Menü im Abschnitt Settings (Einstellungen) die Option Google (GCM/FCM) aus.
Geben Sie den Serverschlüssel ein, den Sie in der Google Firebase-Konsole notiert haben.
Wählen Sie auf der Symbolleiste Speichern aus.
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.
Ö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:
Erweitern Sie Installiert > Visual C# , und klicken Sie auf Android.
Wählen Sie in der Liste die Option Android-App (Xamarin) aus.
Geben Sie einen Namen für das Projekt ein.
Wählen Sie einen Speicherort für das Projekt aus.
Klicken Sie auf OK.
Wählen Sie im Dialogfeld Neue Android-App die Option Leere App und anschließend OK aus.
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.
Führen Sie die folgenden Schritte aus, um die Android-Zielversion für das Projekt auf Android 10.0 festzulegen:
- Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie Eigenschaften aus.
- Wählen Sie für das Feld Compile using Android version: (Target framework) (Mit Android-Version kompilieren: Zielframework)) die Option Android 10.0 aus.
- Wählen Sie im Meldungsfeld Ja aus, um die Änderung des Zielframeworks fortzusetzen.
Fügen Sie mit den folgenden Schritten dem Projekt die erforderlichen NuGet-Pakete hinzu:
Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie NuGet-Pakete verwalten... aus.
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.
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.
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.
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
Kopieren Sie die Datei
google-services.json
, die Sie aus der Google Firebase-Konsole in den Projektordner heruntergeladen haben.Fügen Sie
google-services.json
zum Projekt hinzu.Wählen Sie im Projektmappen-Explorer die Datei
google-services.json
aus.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.
Einrichten von Notification Hubs in Ihrem Projekt
Registrieren bei Firebase Cloud Messaging
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>
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"/>
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.
- Verbindungszeichenfolge für Überwachung: Wählen Sie im Azure portal auf dem Dashboard die Option Verbindungszeichenfolgen anzeigen. Kopieren Sie die Verbindungszeichenfolge
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen und anschließend Klasse aus.
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>"; }
Fügen Sie
MainActivity.cs
die folgenden using-Anweisungen hinzu:using WindowsAzure.Messaging.NotificationHubs;
Fügen Sie der MainActivity-Klasse die folgenden Eigenschaften hinzu:
internal static readonly string CHANNEL_ID = "my_notification_channel";
Fügen Sie
OnCreate
inMainActivity.cs
nachbase.OnCreate(savedInstanceState)
den folgenden Code hinzu:// Listen for push notifications NotificationHub.SetListener(new AzureListener()); // Start the SDK NotificationHub.Start(this.Application, HubName, ConnectionString);
Fügen Sie dem Projekt eine Klasse namens
AzureListener
hinzu.Fügen Sie
AzureListener.cs
die folgenden using-Anweisungen hinzu:using Android.Content; using WindowsAzure.Messaging.NotificationHubs;
Fügen Sie oberhalb Ihrer Klassendeklaration Folgendes hinzu, und legen Sie fest, dass Ihre Klasse von
Java.Lang.Object
erbt undINotificationListener
implementiert:public class AzureListener : Java.Lang.Object, INotificationListener
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()); }
Erstellen Sie Ihr Projekt.
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.
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: