Configurazione di un endpoint SNS della piattaforma Amazon 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 SNS della piattaforma Amazon per le notifiche mobili

Quando si esegue la registrazione di un'app e di un dispositivo mobile a un servizio di notifiche push, la notifica push restituisce un token di dispositivo. Amazon SNS utilizza il token del dispositivo per creare un endpoint mobile, al quale può inviare messaggi di notifica push diretti. Per ulteriori informazioni, consulta Prerequisiti per le notifiche agli SNS utenti di Amazon e Configurazione delle notifiche push con Amazon SNS.

Questa sezione descrive l'approccio consigliato per creare un endpoint di piattaforma.

Creazione di un endpoint di piattaforma

Per inviare notifiche a un'app con AmazonSNS, il token del dispositivo dell'app deve prima essere registrato su Amazon SNS chiamando l'azione create platform endpoint. Questa azione prende l'Amazon Resource Name (ARN) dell'applicazione della piattaforma e il token del dispositivo come parametri e restituisce l'endpoint ARN della piattaforma creato.

L'CreatePlatformEndpointazione esegue le seguenti operazioni:

  • Se l'endpoint della piattaforma esiste già, non crearlo di nuovo. Restituisci al chiamante l'ARNendpoint della piattaforma esistente.

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

  • Se l'endpoint della piattaforma non esiste, crealo. Restituisci al chiamante l'endpoint ARN della 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. L'endpoint di piattaforma esiste già per la combinazione app-dispositivo.

  2. Il token di dispositivo nell'endpoint di piattaforma è il token di dispositivo valido più recente.

  3. L'endpoint di piattaforma è attivato 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 Può essere utilizzato anche per notificare ad Amazon una modifica SNS del token del dispositivo. 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. Può essere richiamata all'inizio, quando l'app non conosce l'endpoint della propria piattaformaARN, come accade durante la prima registrazione. Viene chiamata anche se la chiamata all'GetEndpointAttributesazione iniziale fallisce con un'eccezione non trovata, come accadrebbe se l'applicazione conoscesse il suo endpoint ARN ma venisse eliminata.

  • L'GetEndpointAttributesazione viene richiamata 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 SDKesempio

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

Per utilizzare un AWS SDK, devi configurarlo con le tue credenziali. Per ulteriori informazioni, consulta I file di configurazione e credenziali condivisi nella AWS SDKs and Tools Reference Guide.

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
SDKper Java 2.x
Nota

C'è di più 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 APIAzioni 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 FCM endpoint, potreste pensare che sia meglio archiviare il primo token del dispositivo emesso dall'applicazione e quindi richiamare l'endpoint di creazione della piattaforma con quel token del dispositivo ogni volta all'avvio dell'applicazione. Ciò può sembrare corretto poiché libera l'app dalla necessità di gestire lo stato del token del dispositivo e Amazon SNS aggiornerà automaticamente il token del dispositivo al valore più recente. In verità, questa soluzione presenta alcuni seri inconvenienti:

  • Amazon SNS si affida FCM al feedback ricevuto per aggiornare i token del dispositivo scaduti con nuovi token del dispositivo. FCMconserva le informazioni sui token dei vecchi dispositivi per un certo periodo di tempo, ma non a tempo indeterminato. Una volta FCM dimenticata la connessione tra il vecchio token del dispositivo e il nuovo token del dispositivo, Amazon non SNS sarà più in grado di aggiornare il token del dispositivo archiviato nell'endpoint della piattaforma al suo valore corretto; si limiterà invece 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 sul numero di endpoint della piattaforma che possono essere creati a partire dallo stesso token del 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 FCM endpoint, consulta. SNSGestione Amazon degli endpoint Firebase Cloud Messaging

Riattivazione di un endpoint di piattaforma associato a un token di dispositivo non valido

Quando una piattaforma mobile (come APNs oFCM) informa Amazon SNS che il token del dispositivo utilizzato nella richiesta di pubblicazione non era valido, Amazon SNS disabilita l'endpoint della piattaforma associato a quel token del dispositivo. Amazon SNS rifiuterà quindi le pubblicazioni successive su quel token del 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. La prossima volta che verrà pubblicato su, la piattaforma mobile informerà nuovamente Amazon SNS che il token del dispositivo non è valido e Amazon SNS disabiliterà nuovamente l'endpoint della 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.