Recevoir des notifications Push via SNS (Xamarin Android) - Kit SDK AWS Mobile

Le SDKAWS mobile pour Xamarin est désormais inclus dans leAWS SDK for .NET. Ce guide fait référence à la version archivée du SDK mobile pour Xamarin.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Recevoir des notifications Push via SNS (Xamarin Android)

Ce didacticiel explique comment envoyer des notifications push à une application Xamarin Android avec Amazon Simple Notification Service (SNS) et le kit SDK AWS Mobile pour .NET et Xamarin.

Configuration du projet

Prérequis

Avant de commencer ce didacticiel, vous devez suivre toutes les instructions de la section Configurer un kit SDK AWS Mobile pour .NET et Xamarin.

Définir les autorisations pour SNS

Suivez l'étape 2 de la section Configurer le kit SDK AWS Mobile pour .NET et Xamarin afin d'attacher la stratégie susmentionnée aux rôles de votre application. Votre application bénéficiera ainsi des autorisations appropriées pour accéder à SNS :

  1. Accédez à la console IAM et sélectionnez le rôle IAM que vous souhaitez configurer.

  2. Cliquez surAttacher une stratégie, sélectionnez AmazonSNSFullAccessstratégie et cliquez surAttacher une stratégie.

Avertissement

Utilisation d'AmazonSNSFullAccessn'est pas recommandé dans un environnement de production. Nous l'utilisons ici pour vous permettre d'être opérationnel rapidement. Pour en savoir plus sur la définition d'autorisations pour un rôle IAM, consultez Présentation des autorisations des rôles IAM.

Activer les notifications Push sur Google Cloud

Commencez par ajouter un projet d'API Google :

  1. Accédez à la console Google de développement.

  2. Cliquez sur Create Project (Créer un projet) .

  3. Dans la zone New Project (Nouveau projet), entrez un nom de projet, notez son ID (vous en aurez besoin plus tard) et cliquez sur Create (Créer).

Ensuite, activez le service de messagerie de Google Cloud (GCM) pour le projet :

  1. Dans la console des développeurs Google, votre nouveau projet est normalement déjà sélectionné. Dans le cas contraire, sélectionnez-le dans le menu déroulant en haut de la page.

  2. Sélectionnez APIs & auth dans la barre latérale située sur le côté gauche de la page.

  3. Dans la zone de recherche, tapez « Google Cloud Messaging pour Android » et cliquez sur le lien du même nom.

  4. Cliquez sur Enable API.

Enfin, obtenez une clé API :

  1. Dans la console Google Developers, sélectionnez APIs & auth > Credentials.

  2. Sous Public API access, cliquez sur Create new key.

  3. Dans la boîte de dialogue Create new key, cliquez sur Server Key.

  4. Dans la boîte de dialogue qui s'affiche, cliquez sur Create, puis copiez la clé d'API affichée. Vous utiliserez cette clé API pour effectuer l'authentification par la suite.

Utilisez un identifiant de projet pour créer un ARN de plateforme dans la console SNS

  1. Accédez à la console SNS.

  2. Cliquez sur Applications sur le côté gauche de l’écran.

  3. Cliquez sur Créer une application de plate-forme pour créer une nouvelle application de plateforme SNS.

  4. Saisissez le nom de l'application.

  5. Sélectionnez Google Cloud Messaging (GCM) comme plate-forme de notifications Push.

  6. Collez la clé de l'API dans la zone de texte API key.

  7. Cliquez sur Créer une application de plate-forme.

  8. Sélectionnez l'application de plateforme que vous venez de créer et copiez l'ARN de l'application.

AdditionNuGetForfait pour SNS à votre projet

Suivez l'étape 4 des instructions deConfigurer le kit SDK AWS Mobile pour .NET et Xamarinpour ajouter Amazon Simple Notification ServiceNuGetpour votre projet.

Créer un client SNS

var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);

Enregistrer votre application pour activer les notifications à distance

Afin de vous inscrire aux notifications à distance sur Android, vous devez créer unBroadcastReceiverqui peut recevoir des messages Google Cloud. Modifiez le nom de package ci-dessous lorsque vous êtes invité à le faire :

[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); } }

Voici le service qui reçoit les notifications Push duBroadcastReceiveret affiche les notifications sur la barre de notification de l'appareil :

[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()); } }

Envoyer un message à partir de la console SNS vers votre point de terminaison

  1. Accédez à la Console SNS > Applications.

  2. Sélectionnez votre application de plateforme, choisissez un point de terminaison et cliquez sur Publier sur le point de terminaison.

  3. Pour publier un message, saisissez un message texte dans la zone de texte et cliquez sur Publier le message.