Configuration d'un point de terminaison sur SNS la plateforme Amazon pour les notifications mobiles - Amazon Simple Notification Service

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.

Configuration d'un point de terminaison sur SNS la plateforme Amazon pour les notifications mobiles

Lorsqu'une application et un appareil mobile s'inscrivent auprès d'un service de notification push, le service de notification push renvoie un jeton d'appareil. Amazon SNS utilise le jeton d'appareil pour créer un point de terminaison mobile, auquel il peut envoyer des messages de notification push directs. Pour plus d’informations, consultez Conditions requises pour les notifications aux SNS utilisateurs d'Amazon et Configuration des notifications push avec Amazon SNS.

Cette section décrit l'approche recommandée pour la création d'un point de terminaison de plateforme.

Création d'un point de terminaison de plateforme

Pour envoyer des notifications à une application avec AmazonSNS, le jeton d'appareil de cette application doit d'abord être enregistré auprès d'Amazon SNS en appelant l'action Create Platform Endpoint. Cette action prend le nom de ressource Amazon (ARN) de l'application de plateforme et le jeton de l'appareil comme paramètres et renvoie le point ARN de terminaison de la plateforme créé.

L'CreatePlatformEndpointaction effectue les opérations suivantes :

  • Si le point de terminaison de la plateforme existe déjà, ne le créez pas à nouveau. Renvoyez à l'appelant le point de terminaison ARN de la plateforme existant.

  • Si le point de terminaison de la plateforme avec le même jeton d'appareil mais des paramètres différents existe déjà, ne le créez pas à nouveau. Envoyez une exception à l'appelant.

  • Si le point de terminaison de la plateforme n'existe pas, créez-le. Renvoyez à l'appelant le point ARN de terminaison de la plateforme nouvellement créé.

Vous ne devez pas appeler l'action de création de point de terminaison de plateforme à chaque démarrage d'une application, car cette approche ne fournit pas toujours un point de terminaison en état de fonctionnement. Cela peut se produire, par exemple, lorsqu'une application est désinstallée et réinstallée sur le même appareil et que son point de terminaison existe déjà mais est désactivé. Un processus d'inscription réussi doit effectuer les opérations suivantes :

  1. S'assurer qu'un point de terminaison de plateforme existe pour cette combinaison application-appareil.

  2. Vérifier que le jeton d'appareil dans le point de terminaison de plateforme est le jeton d'appareil valide le plus récent.

  3. S'assurer que le point de terminaison de plateforme est activé et prêt à être utilisé.

Code fictif

Le pseudo-code suivant décrit une pratique recommandée pour la création d'un point de terminaison de plateforme en état de fonctionnement, actuel et activé dans une large gamme de conditions de démarrage. Cette approche fonctionne s’il s'agit de l’enregistrement initial de l'application, si le point de terminaison de plateforme pour cette application existe déjà et si le point de terminaison de plateforme est activé, possède le jeton d'appareil correct, etc. Il n'est pas risqué de l'appeler plusieurs fois d'affilée, car il ne créera pas de points de terminaison de plateforme en double ou ne modifiera pas un point de terminaison de plateforme existant s'il est déjà à jour et activé.

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

Cette approche peut servir chaque fois que l'application veut s'enregistrer ou se ré-enregistrer. Il peut également être utilisé pour informer Amazon SNS d'un changement de jeton d'appareil. Dans ce cas, il vous suffit d'appeler l'action avec la dernière valeur de jeton d'appareil. Voici quelques points à prendre en compte à propos de cette approche :

  • Il existe deux cas dans lesquels elle peut appeler l'action de création de point de terminaison de plateforme. Il peut être appelé au tout début, lorsque l'application ne connaît pas le point de terminaison de sa propre plateformeARN, comme cela se produit lors d'un premier enregistrement. Il est également appelé si l'appel GetEndpointAttributes d'action initial échoue avec une exception introuvable, comme cela se produirait si l'application connaît son point de terminaison ARN mais qu'il a été supprimé.

  • L'GetEndpointAttributesaction est appelée pour vérifier l'état du point de terminaison de la plate-forme même si le point de terminaison de la plate-forme vient d'être créé. Cela se produit lorsque le point de terminaison de plateforme existe déjà mais est désactivé. Dans ce cas, l'action de création de point de terminaison de plateforme réussit, mais n'active pas le point de terminaison de plateforme. Vous devez donc vérifier l'état du point de terminaison de plateforme avant d'indiquer la réussite.

AWS SDKexemple

Le code suivant montre comment implémenter le pseudo code précédent à l'aide SNS des clients Amazon fournis par le AWS SDKs.

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez la section Les fichiers de configuration et d'identification partagés dans le guide de référence des outils AWS SDKs et des outils.

CLI
AWS CLI

Pour créer un point de terminaison d'application de plateforme

L'exemple create-platform-endpoint suivant crée un point de terminaison pour l'application de plateforme spécifiée à l'aide du jeton spécifié.

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

Sortie :

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

Il y en a plus à ce sujet GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code 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()); } } }

Pour de plus amples informations, veuillez consulter APIActions push mobiles.

Résolution des problèmes

Appel répété de la création du point de terminaison de plateforme avec un jeton d'appareil obsolète

En particulier pour les FCM terminaux, vous pensez peut-être qu'il est préférable de stocker le premier jeton d'appareil émis par l'application, puis d'appeler le point de terminaison de la plateforme de création avec ce jeton d'appareil à chaque démarrage de l'application. Cela peut sembler correct car cela évite à l'application d'avoir à gérer l'état du jeton de l'appareil et Amazon SNS mettra automatiquement à jour le jeton de l'appareil à sa dernière valeur. Cependant, cette solution présente un certain nombre de problèmes graves :

  • Amazon SNS s'appuie sur les commentaires du formulaire FCM pour remplacer les jetons d'appareil expirés par de nouveaux jetons d'appareil. FCMconserve les informations relatives aux anciens jetons de l'appareil pendant un certain temps, mais pas indéfiniment. Une fois la connexion entre l'ancien jeton d'appareil et le nouveau jeton d'appareil FCM oubliée, Amazon ne SNS sera plus en mesure de mettre à jour le jeton d'appareil stocké dans le point de terminaison de la plateforme à sa valeur correcte ; il désactivera simplement le point de terminaison de la plateforme à la place.

  • L'application de plateforme contient plusieurs points de terminaison de plateforme correspondant au même jeton d'appareil.

  • Amazon SNS impose un quota sur le nombre de points de terminaison de plateforme pouvant être créés à partir du même jeton d'appareil. Enfin, la création de nouveaux points de terminaison échoue avec une exception de paramètre non valide et le message d'erreur suivant : « This endpoint is already registered with a different token (Ce point de terminaison est déjà enregistré avec un jeton différent) ».

Pour plus d'informations sur la gestion des FCM points de terminaison, consultezSNSGestion par Amazon des points de terminaison Firebase Cloud Messaging.

Réactivation d'un point de terminaison de plateforme associé à un jeton d'appareil non valide

Lorsqu'une plateforme mobile (telle que APNs ouFCM) informe Amazon SNS que le jeton d'appareil utilisé dans la demande de publication n'était pas valide, Amazon SNS désactive le point de terminaison de la plateforme associé à ce jeton d'appareil. Amazon SNS rejettera alors les publications ultérieures sur ce jeton d'appareil. Bien que vous puissiez penser qu'il est préférable de simplement réactiver le point de terminaison de plateforme et de continuer la publication, dans la plupart des cas, cela ne fonctionnera pas : les messages qui sont publiés ne sont pas diffusés et le point de terminaison de plateforme est à nouveau désactivé peu de temps après.

En effet, cela vient du fait que le jeton d'appareil associé au point de terminaison de plateforme est réellement non valide. Les diffusions à ce point de terminaison ne peuvent pas réussir, car il ne correspond plus à aucune application installée. Lors de sa prochaine publication sur, la plateforme mobile informera à nouveau Amazon SNS que le jeton de l'appareil n'est pas valide, et Amazon SNS désactivera à nouveau le point de terminaison de la plateforme.

Pour réactiver un point de terminaison de plateforme désactivé, ce dernier doit être associé à un jeton d'appareil valide (avec un appel d'action de définition d'attributs de point de terminaison), puis activé. Les diffusions à ce point de terminaison de plateforme ne réussiront qu'à ce moment-là. La seule fois où la réactivation d'un point de terminaison de plateforme fonctionne sans mise à jour de son jeton d'appareil est lorsqu'un jeton d'appareil associé à ce point de terminaison qui était non valide redevient valide. Cela peut se produire, par exemple, lorsqu'une application a été désinstallée, puis réinstallée sur le même appareil mobile et reçoit le même jeton d'appareil. L'approche présentée ci-dessus effectue cette opération, en s'assurant de ne réactiver un point de terminaison de plateforme qu'après avoir vérifié que le jeton d'appareil qui lui est associé est le dernier en date disponible.