View a markdown version of this page

Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili - Amazon Simple Notification Service

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à.

Configurazione di un endpoint della piattaforma Amazon SNS per le notifiche mobili

Quando un'app e un dispositivo mobile si registrano con un servizio di notifica push (come APNs o Firebase Cloud Messaging), il servizio di notifica push restituisce un token del dispositivo. Amazon SNS utilizza questo token del dispositivo per creare un endpoint della piattaforma, che funge da destinazione per l'invio di messaggi di notifica push diretti all'app sul dispositivo. L'endpoint della piattaforma funge da ponte, indirizzando i messaggi inviati da Amazon SNS al servizio di notifica push per la consegna al dispositivo mobile corrispondente. Per ulteriori informazioni, consulta Prerequisiti per le notifiche utente Amazon SNS e Configurazione delle notifiche push con Amazon SNS.

Informazioni sui token dei dispositivi e sugli endpoint della piattaforma

Un token del dispositivo identifica in modo univoco un dispositivo mobile registrato con un servizio di notifica push (ad esempio, APNs, Firebase Cloud Messaging). Quando un'app si registra con il servizio di notifica push, genera un token del dispositivo specifico per quell'app e dispositivo. Amazon SNS utilizza questo token di dispositivo per creare un endpoint di piattaforma all'interno dell'applicazione di piattaforma corrispondente.

L'endpoint della piattaforma consente ad Amazon SNS di inviare messaggi di notifica push al dispositivo tramite il servizio di notifica push, mantenendo la connessione tra l'app e il dispositivo dell'utente.

Creazione di un endpoint di piattaforma

Per inviare notifiche push a un'app con Amazon SNS, è necessario prima registrare il token di dispositivo di quell'app in Amazon SNS richiamando l'operazione di creazione di endpoint di piattaforma. Questa azione utilizza l'Amazon Resource Name (ARN) dell'applicazione di piattaforma e del token di dispositivo come parametri e restituisce l'ARN dell'endpoint di piattaforma creato.

L'CreatePlatformEndpointazione esegue le seguenti operazioni:

  • Se l'endpoint della piattaforma esiste già, non crearlo nuovamente. Restituisce all'intermediario l'ARN dell'endpoint di piaffatorma esistente.

  • Se l'endpoint della piattaforma con lo stesso token di dispositivo ma impostazioni diverse esiste già, non crearlo nuovamente. Genera un'eccezione per l'intermediario.

  • Se l'endpoint della piattaforma non esiste, crealo. Restituisci all'intermediario l'ARN dell'endpoint di piattaforma appena creato.

Non devi chiamare immediatamente l'operazione di creazione di endpoint di piattaforma a ogni avvio di un'applicazione poiché questo approccio non fornisce sempre un endpoint funzionante. Ciò può verificarsi, ad esempio, quando un'app viene disinstallata e reinstallata nello stesso dispositivo e il relativo endpoint esiste ma è disattivato. Una procedura di registrazione corretta deve garantire quanto segue:

  1. Assicurati che esista un endpoint di piattaforma per questa combinazione app-dispositivo.

  2. Assicurati che il token del dispositivo nell'endpoint della piattaforma sia l'ultimo token di dispositivo valido.

  3. Assicurati che l'endpoint della piattaforma sia abilitato e pronto all'uso.

Pseudocodice

Lo pseudocodice seguente descrive una pratica consigliata per la creazione di un endpoint di piattaforma funzionante, corrente e attivato in un'ampia gamma di condizioni di avvio. Questo approccio funziona indipendentemente se si tratta della prima registrazione dell'app, se l'endpoint di piattaforma per l'app esiste già, se l'endpoint di piattaforma è attivato, ha il token di dispositivo corretto e così via. Non è un problema chiamarlo più volte in successione, in quanto non creerà endpoint di piattaforma duplicati o modificherà l'endpoint di piattaforma esistente se è già aggiornato e attivato.

retrieve the latest device token from the mobile operating system if (the platform endpoint ARN is not stored) # this is a first-time registration call create platform endpoint store the returned platform endpoint ARN endif call get endpoint attributes on the platform endpoint ARN if (while getting the attributes a not-found exception is thrown) # the platform endpoint was deleted call create platform endpoint with the latest device token store the returned platform endpoint ARN else if (the device token in the endpoint does not match the latest one) or (GetEndpointAttributes shows the endpoint as disabled) call set endpoint attributes to set the latest device token and then enable the platform endpoint endif endif

Questo approccio può essere utilizzato ogni volta che l'app vuole registrarsi o ripetere la registrazione e anche in caso di notifica della modifica di un token di dispositivo a Amazon SNS. In quest'ultimo caso, è sufficiente chiamare l'operazione con il valore di token di dispositivo più recente. Alcuni punti da considerare in relazione a questo approccio:

  • Esistono due casi in cui può chiamare l'operazione di creazione di endpoint di piattaforma. All'inizio, quando l'app non conosce il relativo ARN di endpoint di piattaforma, come avviene durante una prima registrazione, Viene anche chiamato se la chiamata all'GetEndpointAttributesazione iniziale fallisce con un'eccezione non trovata, come accadrebbe se l'applicazione conoscesse l'ARN dell'endpoint ma fosse eliminato.

  • L'GetEndpointAttributesazione viene chiamata per verificare lo stato dell'endpoint della piattaforma anche se l'endpoint della piattaforma è stato appena creato. Ciò avviene quando l'endpoint di piattaforma esiste già ma è disattivato. In tal caso, l'operazione di creazione di endpoint di piattaforma riesce ma non attiva l'endpoint di piattaforma, di conseguenza devi ricontrollare lo stato dell'endpoint di piattaforma prima di indicare l'operazione come riuscita.

AWS Esempio di SDK

Il codice seguente mostra come implementare lo pseudo codice precedente utilizzando i client Amazon SNS forniti dagli SDK. AWS

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. Per ulteriori informazioni, consulta File di configurazione e credenziali condivisi nella Guida di riferimento per SDK AWS e strumenti.

CLI
AWS CLI

Creazione di un endpoint dell’applicazione della piattaforma

Nell’esempio create-platform-endpoint seguente viene creato un endpoint per l’applicazione della piattaforma indicata utilizzando il token specificato.

aws sns create-platform-endpoint \ --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \ --token EXAMPLE12345...

Output:

{ "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234" }
Java
SDK per Java 2.x
Nota

C'è altro su. GitHub Trova l’esempio completo e scopri di più sulla configurazione e l’esecuzione nel repository di esempi di codice AWS.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest; import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse; import software.amazon.awssdk.services.sns.model.SnsException; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html * * In addition, create a platform application using the AWS Management Console. * See this doc topic: * * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html * * Without the values created by following the previous link, this code examples * does not work. */ public class RegistrationExample { public static void main(String[] args) { final String usage = """ Usage: <token> <platformApplicationArn> Where: token - The device token or registration ID of the mobile device. This is a unique identifier provided by the device platform (e.g., Apple Push Notification Service (APNS) for iOS devices, Firebase Cloud Messaging (FCM) for Android devices) when the mobile app is registered to receive push notifications. platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s """; if (args.length != 2) { System.out.println(usage); return; } String token = args[0]; String platformApplicationArn = args[1]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); createEndpoint(snsClient, token, platformApplicationArn); } public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) { System.out.println("Creating platform endpoint with token " + token); try { CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder() .token(token) .platformApplicationArn(platformApplicationArn) .build(); CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest); System.out.println("The ARN of the endpoint is " + response.endpointArn()); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); } } }

Per ulteriori informazioni, consulta Operazioni API push per dispositivi mobili.

Risoluzione dei problemi

Chiamata ripetuta dell'operazione di creazione di endpoint di piattaforma con un token di dispositivo obsoleto

Soprattutto per gli endpoint FCM, potresti pensare che sia meglio memorizzare il primo token di dispositivo emesso dall'applicazione e poi chiamare l'endpoint di creazione della piattaforma con quel token di dispositivo ogni volta che l'applicazione viene avviata. Ciò può sembrare corretto in quanto l'app non deve gestire lo stato del token di dispositivo e Amazon SNS aggiorna automaticamente il token di dispositivo al valore più recente. In verità, questa soluzione presenta alcuni seri inconvenienti:

  • Amazon SNS si basa sul feedback di FCM per aggiornare i token di dispositivo obsoleti a quelli nuovi. FCM conserva le informazioni sui token di dispositivo obsoleti per qualche tempo, ma non indefinitamente. Dopo che FCM avrà dimenticato la connessione tra il vecchio token del dispositivo e il nuovo token del dispositivo, Amazon SNS non sarà più in grado di aggiornare il token del dispositivo memorizzato nell'endpoint della piattaforma al suo valore corretto; si limiterà a disabilitare l'endpoint della piattaforma.

  • L'applicazione di piattaforma conterrà molteplici endpoint di piattaforma corrispondenti allo stesso token di dispositivo.

  • Amazon SNS impone una quota al numero di endpoint di piattaforma che è possibile creare a partire dallo stesso token di dispositivo. Alla fine, la creazione di nuovi endpoint non riuscirà con un'eccezione di parametro non valido e il messaggio di errore seguente: "This endpoint is already registered with a different token." (Questo endpoint è già registrato con un altro token.).

Per ulteriori informazioni sulla gestione degli endpoint FCM, consulta. Gestione Amazon SNS degli endpoint Firebase Cloud Messaging

Re-enabling un endpoint della piattaforma associato a un token di dispositivo non valido

Quando una piattaforma mobile (come APN o FCM) informa Amazon SNS che il token di dispositivo utilizzato nella richiesta di pubblicazione non è valido, Amazon SNS disattiva l'endpoint di piattaforma associato a quel token di dispositivo. Amazon SNS rifiuterà quindi le pubblicazioni successive in quel token di dispositivo. Sebbene si possa ritenere che la soluzione migliore consista semplicemente nel riattivare l'endpoint di piattaforma e continuare a pubblicare, nella maggior parte dei casi ciò non funzionerà: i messaggi pubblicati non verranno consegnati e l'endpoint di piattaforma sarà di nuovo disattivato poco tempo dopo.

Questo perché il token di dispositivo associato all'endpoint di piattaforma è effettivamente non valido. Le consegne a tale endpoint non possono riuscire in quanto non corrisponde più ad alcuna app installata. Al momento della pubblicazione successiva, la piattaforma mobile indicherà di nuovo aD Amazon SNS che il token di dispositivo non è valido e Amazon SNS disattiverà di nuovo l'endpoint di piattaforma.

Per riattivare un endpoint di piattaforma disattivato, è necessario associarlo a un token di dispositivo valido (con la chiamata dell'operazione di impostazione degli attributi di endpoint) e quindi attivarlo. Le consegne all'endpoint di piattaforma riusciranno solo dal momento dell'attivazione. L'unico caso in cui la riattivazione di un endpoint di piattaforma funziona senza l'aggiornamento del relativo token di dispositivo è quando un token di dispositivo associato a quell'endpoint che non era valido ridiventa valido. Ciò può verificarsi, ad esempio, quando un'app è stata disinstallata e quindi reinstallata nello stesso dispositivo mobile e riceve lo stesso token di dispositivo. L'approccio descritto qui sopra effettua questa operazione, assicurandosi di riattivare un endpoint di piattaforma solo dopo aver verificato che il token di dispositivo ad esso associato è quello più recente disponibile.