L'SDKAWS Mobile per Xamarin è ora incluso inAWS SDK for .NET. Questa guida fa riferimento alla versione archiviata di Mobile SDK per Xamarin.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ricevi notifiche push con SNS (Xamarin Android)
Il tutorial spiega come inviare notifiche push a un'applicazione Android Xamarin utilizzando Amazon Simple Notification Service (SNS) e AWS Mobile SDK for .NET and Xamarin.
Configurazione progetto
Prerequisiti
È necessario seguire le istruzioni riportate alConfigurazione dell'SDK AWS Mobile per.NET e Xamarinprima di iniziare questo tutorial.
Impostazione delle autorizzazioni per SNS
Segui il passaggio 2 inConfigurazione dell'SDK AWS Mobile per.NET e Xamarinper allegare la politica menzionata di seguito ai ruoli della tua candidatura. Ciò darà alla tua applicazione le autorizzazioni appropriate per accedere a SNS:
-
Passa alConsole IAM
e seleziona il ruolo IAM da configurare. -
Fare clic suCollegamento della policy, seleziona AmazonSNSFullAccesspolicy e cliccaCollegamento della policy.
avvertimento
Usare AmazonSNSFullAccessnon è raccomandato in un ambiente di produzione. Lo usiamo qui per permetterti di iniziare a usare rapidamente. Per ulteriori informazioni sulla definizione delle autorizzazioni per un ruolo IAM, consultaPanoramica delle autorizzazioni del ruolo IAM.
Abilita notifiche push su Google Cloud
Innanzitutto, aggiungi un nuovo progetto Google API:
-
Passa alConsole per sviluppatori di Google
. -
Fare clic suCreazione di un progetto.
-
NellaNuovo progettocasella, inserisci il nome di un progetto, prendi nota dell'ID del progetto (ne avrai bisogno in seguito) e fai clic suCreate.
Successivamente, abilita il servizio Google Cloud Messaging (GCM) per il progetto:
-
NellaConsole per sviluppatori di Google
, il nuovo progetto dovrebbe già essere selezionato. In caso contrario, selezionalo nel menu a discesa nella parte superiore della pagina. -
SelezionaAutenticazione delle API e dell'autenticazionedalla barra laterale sul lato sinistro della pagina.
-
Nella casella di ricerca, digita «Google Cloud Messaging for Android» e fai clic suGoogle Cloud Messaging per Androidcollegamento.
-
Fare clic suAbilitazione dell'API.
Infine, ottieni una chiave API:
-
Nella Google Developers Console, selezionaAutenticazione delle API e dell'autenticazione >Credenziali.
-
UNDERAccesso all'API pubblica, clickCreazione di una nuova chiave.
-
NellaCreazione di una nuova chiavefinestra di dialogo, fai clicChiave server.
-
Nella finestra di dialogo risultante, fai clic suCreatee copia la chiave API visualizzata. Utilizzerai questa chiave API per eseguire l'autenticazione in un secondo momento.
Utilizzare l'ID progetto per creare un ARN della piattaforma in SNS Console
-
Passa alConsole SNS
. -
Fare clic suApplicazionisul lato sinistro dello schermo.
-
Fare clic suCreazione di applicazioni piattaformaper creare una nuova applicazione di piattaforma SNS.
-
Specificare unNome applicazione.
-
SelezionaGoogle Cloud Messaging (GCM)perPiattaforma di notifiche push.
-
Incolla la chiave dell'API nella casella di testo con etichettaChiave API.
-
Fare clic suCreazione di applicazioni piattaforma.
-
Seleziona l'applicazione Platform appena creata e copia l'ARN dell'applicazione.
InserisciNuGetPacchetto per SNS per il tuo progetto
Seguire il passaggio 4 delle istruzioni riportate inConfigurazione dell'SDK AWS Mobile per.NET e Xamarinper aggiungere Amazon Simple Notification ServiceNuGetpacchetto per il tuo progetto.
Creazione di un client SNS
var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);
Registra la tua applicazione per le notifiche remote
Per registrarsi alle notifiche remote su Android, è necessario creare unBroadcastReceiverche può ricevere messaggi Google Cloud. Modificare il nome del pacchetto qui sotto dove richiesto:
[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); } }
Di seguito è riportato il servizio che riceve la notifica push dalBroadcastReceivere visualizza la notifica sulla barra delle notifiche del dispositivo:
[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()); } }
Invia un messaggio dalla console SNS al tuo endpoint
-
Passa alSNS Console > Applicazioni
. -
Seleziona l'applicazione della piattaforma, seleziona un endpoint e fai clic suPubblica su endpoint.
-
Digita un messaggio di testo nella casella di testo e fai clic suPubblica di messaggiper pubblicare un messaggio.