Das AWS Mobile SDK für Xamarin ist jetzt in der enthalten. AWS SDK für .NET Dieses Handbuch bezieht sich auf die archivierte Version des Mobile SDK für Xamarin.
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 erklärt, wie Sie mithilfe von Amazon Simple Notification Service (SNS) und dem AWS Mobile SDK für .NET und Xamarin Push-Benachrichtigungen an eine Xamarin-Android-Anwendung senden.
Projekteinrichtung
Voraussetzungen
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 der Anwendung anzuhängen. Die Anwendung erhält so die erforderlichen Berechtigungen für den Zugriff auf SNS:
-
Navigieren Sie zur IAM-Konsole
und wählen Sie die zu konfigurierende IAM-Rolle. -
Klicken Sie auf Richtlinie anhängen, wählen Sie die Amazon SNSFull Access-Richtlinie aus und klicken Sie auf Richtlinie anhängen.
Warnung
Die Verwendung von Amazon SNSFull Access in einer Produktionsumgebung wird 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:
-
Navigieren Sie zur Google Developers-Konsole
. -
Klicken Sie auf Create Project (Projekt erstellen).
-
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:
-
In der Google Developers-Konsole
sollte das neue Projekt bereits ausgewählt sein. Wählen Sie es andernfalls im Dropdown-Menü oben auf der Seite aus. -
Wählen Sie in der Seitenleiste links auf der Seite die Option APIs & auth aus.
-
Geben Sie in das Suchfeld „Google Cloud Messaging for Android“ ein und klicken Sie auf den Link Google Cloud Messaging for Android.
-
Klicken Sie auf Enable API.
Rufen Sie schließlich einen API-Schlüssel ab:
-
Wählen Sie in der Google Developers Console APIs & auth > Credentials aus.
-
Klicken Sie unter Public API access auf Create new key.
-
Klicken Sie im Dialogfeld Create a new key auf Server key.
-
Klicken Sie im resultierenden Dialogfeld auf Create und kopieren Sie den angezeigten 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
-
Rufen Sie die SNS-Konsole
auf. -
Klicken Sie auf der linken Seite des Bildschirms auf Applications (Anwendungen).
-
Klicken Sie auf Create platform application, um eine Anwendung für die SNS-Plattform zu erstellen.
-
Geben Sie einen Application Name ein.
-
Wählen Sie Google Cloud Messaging (GCM) für Push notification platform (Push-Benachrichtigungsplattform).
-
Fügen Sie den API-Schlüssel in das Textfeld API key ein.
-
Klicken Sie auf Create platform application.
-
Wählen Sie die soeben erstellte Plattformanwendung und kopieren Sie den ARN der Anwendung.
NuGet Package für SNS zu Ihrem Projekt hinzufügen
Folgen Sie Schritt 4 der Anweisungen unter Einrichten des AWS Mobile SDK for .NET and Xamarin, um das Amazon Simple Notification NuGet Service-Paket zu 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 Fernbenachrichtigungen auf Android zu registrieren, müssen Sie eine erstellen, BroadcastReceiver die 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); } }
Im Folgenden finden Sie den Dienst, der die Push-Benachrichtigung von 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
-
Navigieren Sie zu SNS Console (SNS-Konsole) > Applications (Anwendungen)
. -
Wählen Sie die Plattformanwendung, dann einen Endpunkt und klicken Sie schließlich auf Publish to endpoint (In Endpunkt veröffentlichen).
-
Geben Sie eine Textnachricht in das Textfeld ein und klicken Sie auf Publish message (Nachricht veröffentlichen), um eine Nachricht zu veröffentlichen.