Empfangen von Push-Benachrichtigungen mit SNS (Xamarin Android) - AWS SDK für Mobilgeräte

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Empfangen von Push-Benachrichtigungen mit SNS (Xamarin Android)

Das Tutorial erläutert, wie Push-Benachrichtigungen mit Amazon Simple Notification Service (SNS) und an eine Xamarin-Android-Anwendung gesendet werden.AWS Mobile SDK for .NET and Xamarin.

Projekteinrichtung

Prerequisites

Befolgen Sie alle Anweisungen unter Einrichten von AWS Mobile SDK for .NET and Xamarin, bevor Sie mit diesem Tutorial beginnen.

Festlegen von Berechtigungen für SNS

Befolgen Sie Schritt 2 in Einrichten von AWS Mobile SDK for .NET and Xamarin, um die unten angegebene Richtlinie an die Rollen Ihrer Anwendung anzufügen. Die Anwendung erhält so die erforderlichen Berechtigungen für den Zugriff auf SNS:

  1. Navigieren Sie zur IAM-Konsole und wählen Sie die IAM-Rolle aus, die Sie konfigurieren möchten.

  2. Klicken Sie auf Attach Policy, wählen Sie die AmazonSNSFullAccess Richtlinie aus und klicken Sie auf Attach Policy.

Warnung

Die Verwendung von AmazonSNSFullAccess wird in einer Produktionsumgebung nicht empfohlen. Wir verwenden die Richtlinie hier, damit Sie schnell mit der Arbeit beginnen können. Weitere Informationen über das Festlegen von Berechtigungen für eine IAM-Rolle erhalten Sie unter Overview of IAM Role Permissions.

Aktivieren von Push-Benachrichtigungen in der Google Cloud

Fügen Sie zunächst ein neues Google-API-Projekt hinzu:

  1. Navigieren Sie zur Google Developers-Konsole.

  2. Klicken Sie auf Create Project (Projekt erstellen).

  3. Geben Sie einen Projektnamen in das Feld New Project (Neues Projekt) ein. Notieren Sie sich die (später benötigte) Projekt-ID und klicken Sie auf Create (Erstellen).

Aktivieren Sie nun den Service Google Cloud Messaging (GCM) für das Projekt:

  1. In der Google Developers-Konsole sollte Ihr neues Projekt bereits ausgewählt sein. Wählen Sie es andernfalls im Dropdown-Menü oben auf der Seite aus.

  2. Wählen Sie APIs in der Seitenleiste auf der linken Seite der Seite & auth aus.

  3. Geben Sie in das Suchfeld „Google Cloud Messaging for Android“ ein und klicken Sie auf den Link Google Cloud Messaging for Android.

  4. Klicken Sie auf Enable API.

Rufen Sie schließlich einen API-Schlüssel ab:

  1. Wählen Sie in der Google Developers-Konsole APIs & auth > Credentials (Anmeldeinformationen) aus.

  2. Klicken Sie unter Public API access auf Create new key.

  3. Klicken Sie im Dialogfeld Create a new key auf Server key.

  4. Klicken Sie im daraufhin angezeigten Dialogfeld auf Create (Erstellen) und kopieren Sie den API-Schlüssel. Sie werden diesen API-Schlüssel später zur Authentifizierung verwenden.

Verwenden der Projekt-ID zum Erstellen eines Plattform-ARN in der SNS-Konsole

  1. Rufen Sie die SNS-Konsole. auf.

  2. Klicken Sie auf der linken Seite des Bildschirms auf Applications (Anwendungen).

  3. Klicken Sie auf Create platform application (Plattformanwendung erstellen), um eine neue SNS-Plattformanwendung zu erstellen.

  4. Geben Sie einen Application Name. ein.

  5. Wählen Sie Google Cloud Messaging (GCM) für Push notification platform (Push-Benachrichtigungsplattform).

  6. Fügen Sie den API-Schlüssel in das Textfeld API key. ein.

  7. Klicken Sie auf Create platform application.

  8. Wählen Sie die soeben erstellte Plattformanwendung und kopieren Sie den ARN der Anwendung.

Hinzufügen eines NuGet Pakets für SNS zu Ihrem Projekt

Befolgen Sie Schritt 4 der Anweisungen unter Einrichten von AWS Mobile SDK for .NET and Xamarin, um das Amazon Simple Notification NuGet Service-Paket Ihrem Projekt hinzuzufügen.

Erstellen eines SNS-Clients

var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);

Registrieren der Anwendung für Remote-Benachrichtigungen

Um sich für Remote-Benachrichtigungen auf Android zu registrieren, müssen Sie einen BroadcastReceiver erstellen, der Google Cloud-Nachrichten empfangen kann. Ändern Sie den Paketnamen unten, wenn Sie dazu aufgefordert werden:

[BroadcastReceiver(Permission = "com.google.android.c2dm.permission.SEND")] [IntentFilter(new string[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new string[] { "com.amazonaws.sns" /* change to match your package */ })] [IntentFilter(new string[] { "com.google.android.c2dm.intent.REGISTRATION" }, Categories = new string[] { "com.amazonaws.sns" /* change to match your package */ })] [IntentFilter(new string[] { "com.google.android.gcm.intent.RETRY" }, Categories = new string[] { "com.amazonaws.sns" /* change to match your package */ })] public class GCMBroadcastReceiver: BroadcastReceiver { const string TAG = "PushHandlerBroadcastReceiver"; public override void OnReceive(Context context, Intent intent) { GCMIntentService.RunIntentInService(context, intent); SetResult(Result.Ok, null, null); } } [BroadcastReceiver] [IntentFilter(new[] { Android.Content.Intent.ActionBootCompleted })] public class GCMBootReceiver: BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { GCMIntentService.RunIntentInService(context, intent); SetResult(Result.Ok, null, null); } }

Nachfolgend finden Sie den Service, der die Push-Benachrichtigung von der empfängt BroadcastReceiver und die Benachrichtigung in der Benachrichtigungsleiste des Geräts anzeigt:

[Service] public class GCMIntentService: IntentService { static PowerManager.WakeLock sWakeLock; static object LOCK = new object(); public static void RunIntentInService(Context context, Intent intent) { lock(LOCK) { if (sWakeLock == null) { // This is called from BroadcastReceiver, there is no init. var pm = PowerManager.FromContext(context); sWakeLock = pm.NewWakeLock( WakeLockFlags.Partial, "My WakeLock Tag"); } } sWakeLock.Acquire(); intent.SetClass(context, typeof(GCMIntentService)); context.StartService(intent); } protected override void OnHandleIntent(Intent intent) { try { Context context = this.ApplicationContext; string action = intent.Action; if (action.Equals("com.google.android.c2dm.intent.REGISTRATION")) { HandleRegistration(intent); } else if (action.Equals("com.google.android.c2dm.intent.RECEIVE")) { HandleMessage(intent); } } finally { lock(LOCK) { //Sanity check for null as this is a public method if (sWakeLock != null) sWakeLock.Release(); } } } private void HandleRegistration(Intent intent) { string registrationId = intent.GetStringExtra("registration_id"); string error = intent.GetStringExtra("error"); string unregistration = intent.GetStringExtra("unregistered"); if (string.IsNullOrEmpty(error)) { var response = await SnsClient.CreatePlatformEndpointAsync(new CreatePlatformEndpointRequest { Token = registrationId, PlatformApplicationArn = "YourPlatformArn" /* insert your platform application ARN here */ }); } } private void HandleMessage(Intent intent) { string message = string.Empty; Bundle extras = intent.Extras; if (!string.IsNullOrEmpty(extras.GetString("message"))) { message = extras.GetString("message"); } else { message = extras.GetString("default"); } Log.Info("Messages", "message received = " + message); ShowNotification(this, "SNS Push", message); //show the message } public void ShowNotification(string contentTitle, string contentText) { // Intent Notification.Builder builder = new Notification.Builder(this) .SetContentTitle(contentTitle) .SetContentText(contentText) .SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate) .SetSmallIcon(Resource.Drawable.Icon) .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification)); // Get the notification manager: NotificationManager notificationManager = this.GetSystemService(Context.NotificationService) as NotificationManager; notificationManager.Notify(1001, builder.Build()); } }

Senden einer Nachricht mit der SNS-Konsole an den Endpunkt

  1. Navigieren Sie zu SNS Console (SNS-Konsole) > Applications (Anwendungen).

  2. Wählen Sie die Plattformanwendung, dann einen Endpunkt und klicken Sie schließlich auf Publish to endpoint (In Endpunkt veröffentlichen).

  3. Geben Sie eine Textnachricht in das Textfeld ein und klicken Sie auf Publish message (Nachricht veröffentlichen), um eine Nachricht zu veröffentlichen.