

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.

# Envoi de notifications push mobiles avec Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Vous pouvez utiliser Amazon SNS pour envoyer des messages de notification push directement aux applications sur les appareils mobiles. Les messages de notification push envoyés à un terminal mobile peuvent apparaître dans l'application mobile sous forme d'alertes, de mises à jour de badges ou d'alertes sonores. 

![\[Présentation des notifications push mobiles Amazon SNS\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Comment fonctionnent les notifications utilisateur Amazon SNS](#sns-how-user-notifications-work)
+ [Configuration des notifications push avec Amazon SNS](#sns-user-notifications-process-overview)
+ [Configuration d'une application mobile sur Amazon SNS](mobile-push-send.md)
+ [Utilisation d'Amazon SNS pour les notifications push mobiles](mobile-push-notifications.md)
+ [Attributs de l'application mobile Amazon SNS](sns-msg-status.md)
+ [Notifications d'événements liés aux applications Amazon SNS pour les applications mobiles](application-event-notifications.md)
+ [Actions d'API push mobile](mobile-push-api.md)
+ [Erreurs courantes de l'API push mobile Amazon SNS](mobile-push-api-error.md)
+ [Utilisation de l'attribut Amazon SNS time to live message pour les notifications push mobiles](sns-ttl.md)
+ [Régions prises en charge par l'application mobile Amazon SNS](sns-mobile-push-supported-regions.md)
+ [Bonnes pratiques pour gérer les notifications push mobiles Amazon SNS](mobile-push-notifications-best-practices.md)

## Comment fonctionnent les notifications utilisateur Amazon SNS
<a name="sns-how-user-notifications-work"></a>

Vous envoyez des messages de notification push aux appareils mobiles et aux ordinateurs de bureau, à l'aide de l'un des services de notification push pris en charge suivants : 
+ Amazon Device Messaging (ADM)
+ Service de notification push Apple (APNs) pour iOS et Mac OS X
+ Baidu Cloud Push (Baidu)
+ Messagerie cloud Firebase (FCM)
+ Service de notification push Microsoft pour Windows Phone (MPNS)
+ Services de notification push Windows (WNS)

Les services de notifications push, tels que APNs FCM, maintiennent une connexion avec chaque application et appareil mobile associé enregistrés pour utiliser leur service. Lorsqu'une application et un appareil mobile s'inscrivent, le service de notification push renvoie un jeton d'appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison mobile, auquel il peut envoyer directement des messages de notification push. Afin qu'Amazon SNS communique avec les différents services de notification push, soumettez vos informations d'identification de service de notification push à Amazon SNS pour qu'il les utilise en votre nom. Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](#sns-user-notifications-process-overview). 

 Outre l'envoi direct de messages de notification push, vous pouvez également utiliser Amazon SNS pour envoyer des messages aux points de terminaison mobiles abonnés à une rubrique. Le concept est le même que l'abonnement d'autres types de point de terminaison, comme Amazon SQS, HTTP/S, e-mail et SMS, à une rubrique, comme décrit dans [Qu'est-ce qu'Amazon SNS ?](welcome.md). La différence réside dans le fait qu'Amazon SNS communique à l'aide des services de notification push, afin que les points de terminaison mobiles abonnés reçoivent les messages de notification push envoyés à la rubrique.

## Configuration des notifications push avec Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Obtenez les informations d'identification et le jeton de périphérique](sns-prerequisites-for-mobile-push-notifications.md) pour les plates-formes mobiles que vous souhaitez prendre en charge.

1. Utilisez les informations d'identification pour créer un objet d'application de plate-forme (`PlatformApplicationArn`) à l'aide d'Amazon SNS. Pour de plus amples informations, veuillez consulter [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md).

1. Utilisez les informations d'identification renvoyées pour demander aux plateformes mobiles un jeton de périphérique pour votre application mobile et l'appareil. Le jeton que vous recevez représente votre application mobile et l'appareil.

1. Utilisez le jeton de périphérique et le `PlatformApplicationArn` pour créer un objet de point de terminaison de plate-forme (`EndpointArn`) avec Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration d'un point de terminaison sur la plateforme Amazon SNS pour les notifications mobiles](mobile-platform-endpoint.md).

1. Utilisez le `EndpointArn` pour [publier un message dans une application sur un appareil mobile](mobile-push-send.md). Pour plus d'informations, consultez [Messagerie directe sur appareil mobile Amazon SNS](mobile-push-notifications.md#mobile-push-send-directmobile) et l'API [Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) dans la Référence d'API Amazon Simple Notification Service.

# Configuration d'une application mobile sur Amazon SNS
<a name="mobile-push-send"></a>

Cette rubrique décrit comment configurer des applications mobiles à l' AWS Management Console aide des informations décrites dans[Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Conditions préalables pour les notifications utilisateur Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Pour commencer à utiliser les notifications push mobiles Amazon SNS, vous aurez besoin des éléments suivants :
+ Ensemble d'informations d'identification permettant de se connecter à l'un des services de notification push pris en charge : ADM APNs, Baidu, FCM, MPNS ou WNS.
+ Un jeton d'appareil ou un ID d'enregistrement pour l'application mobile et l'appareil.
+ Amazon SNS configuré pour envoyer des messages de notification push aux points de terminaison mobiles.
+ Une application mobile enregistrée et configurée pour utiliser l'un des services de notification push pris en charge.

L'enregistrement de votre application auprès d'un service de notification push nécessite plusieurs étapes. Amazon SNS a besoin de certaines des informations que vous fournissez au service de notification push pour envoyer des messages de notification push directs au point de terminaison mobile. En général, vous avez besoin des informations d'identification requises pour la connexion au service de notification push, d'un jeton d'appareil ou d'un ID d'enregistrement (représentant votre appareil mobile et votre application mobile), que vous avez reçu du service de notification push, et de l'application mobile inscrite auprès du service de notification push. 

La forme exacte des informations d'identification diffère selon les plateformes mobiles, mais dans tous les cas, ces informations d'identification doivent être soumises lors de l'établissement d'une connexion à la plateforme. Un ensemble d'informations d'identification est émis pour chaque application mobile et doit être utilisé pour envoyer un message à une instance de cette application. 

Les noms spécifiques varient en fonction du service de notification push utilisé. Par exemple, lorsque vous l'utilisez APNs comme service de notification push, vous avez besoin d'un *jeton d'appareil*. Parallèlement, avec FCM, l'équivalent du jeton d'appareil est appelé *ID d'enregistrement*. Le *jeton d'appareil* ou l'*ID d'enregistrement* est une chaîne qui est envoyée à l'application par le système d'exploitation de l'appareil mobile. Ils identifient de façon unique une instance d'une application mobile en cours d'exécution sur un appareil mobile spécifique et peuvent être considérés comme les identifiants uniques de cette paire application-appareil. 

Amazon SNS stocke les informations d'identification (plus quelques autres paramètres) sous forme de ressource d'application de plateforme. Les jetons de l'appareil (encore une fois avec quelques paramètres supplémentaires) sont représentés sous forme d'objets appelés *points de terminaison de plate-forme*. Chaque point de terminaison de plateforme appartient à une application de plateforme spécifique, et la communication avec chaque point de terminaison de plateforme est possible à l'aide des informations d'identification qui sont stockées dans son application de plateforme correspondante.

Les sections suivantes incluent les conditions préalables pour chacun des services de notification push pris en charge. Une fois que vous avez obtenu les informations requises, vous pouvez envoyer un message de notification push en utilisant le AWS Management Console ou le push mobile Amazon SNS. APIs Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Création d'une application de plateforme Amazon SNS
<a name="mobile-push-send-register"></a>

Pour envoyer des notifications depuis Amazon SNS aux terminaux mobiles, que ce soit directement ou par le biais d'abonnements à un sujet, vous devez d'abord créer une application de plateforme. Après avoir enregistré l'application AWS, vous devez créer un point de terminaison pour l'application et pour l'appareil mobile. Ce point de terminaison permet à Amazon SNS d'envoyer des messages à l'appareil.

**Pour créer une application de plateforme**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Platform applications (Applications de plateforme)**, choisissez **Create platform application (Créer une application de plateforme)**.

1. Choisissez votre **Région AWS**. Pour obtenir une liste des Régions AWS dans lesquelles vous pouvez créer des applications mobiles, consultez la section [Régions prises en charge par l'application mobile Amazon SNS](sns-mobile-push-supported-regions.md).

1. Entrez les **informations de candidature** suivantes :
   + **Nom de l'application** : donnez un **nom** à l'application de votre plateforme. Le nom doit comporter entre 1 et 256 caractères et peut contenir des lettres majuscules et minuscules, des chiffres, des traits de soulignement, des traits d'union et des points.
   + **Plateforme de notifications push** : sélectionnez le **service de notification** approprié auprès duquel l'application est enregistrée (par exemple, Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM)).

1. En fonction de la plateforme que vous avez sélectionnée, vous devrez fournir des informations d'identification spécifiques :
   + Pour **APNs**(Apple Push Notification Service) : choisissez entre une authentification basée sur des **jetons ou une authentification basée sur** des **certificats**.
     + Pour l'authentification basée sur des jetons, téléchargez un **fichier .p8** (généré via Keychain Access).
     + Pour l'authentification par certificat, téléchargez un **fichier .p12** (également exporté depuis Keychain Access).
   + Pour **FCM** (Firebase Cloud Messaging) : entrez la **clé du serveur** depuis la console Firebase.
   + **Pour les **autres plateformes** (telles que ADM ou GCM), entrez les **clés d'API ou les informations d'identification** correspondantes.**

1. Après avoir saisi les informations nécessaires, choisissez **Créer une application de plateforme**. Cette action enregistre l'application auprès d'Amazon SNS et crée l'objet d'application de plateforme correspondant.

1. Lors de la création, Amazon SNS génère et renvoie un ([https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)Amazon Resource Name). Cet ARN identifie de manière unique l'application de votre plateforme et est utilisé lors de la création de points de terminaison pour les appareils mobiles.

# Configuration d'un point de terminaison sur la plateforme Amazon SNS pour les notifications mobiles
<a name="mobile-platform-endpoint"></a>

Lorsqu'une application et un appareil mobile s'enregistrent auprès d'un service de notification push (tel que APNs Firebase Cloud Messaging), le service de notification push renvoie un jeton d'appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison de plateforme, qui sert de cible pour envoyer des messages de notification push directs à l'application installée sur l'appareil. Le point de terminaison de la plateforme sert de pont et achemine les messages envoyés par Amazon SNS vers le service de notification push pour qu'ils soient transmis à l'appareil mobile correspondant. Pour plus d’informations, consultez [Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) et [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Comprendre les jetons des appareils et les points de terminaison de la plateforme
<a name="device-token-platform-endpoint"></a>

Un jeton d'appareil identifie de manière unique un appareil mobile enregistré auprès d'un service de notification push (par exemple APNs, Firebase Cloud Messaging). Lorsqu'une application s'enregistre auprès du service de notification push, elle génère un jeton spécifique à cette application et à cet appareil. Amazon SNS utilise ce jeton d'appareil pour créer un point de terminaison de plateforme dans l'application de plateforme correspondante.

Le point de terminaison de la plateforme permet à Amazon SNS d'envoyer des messages de notification push à l'appareil via le service de notification push, en maintenant la connexion entre votre application et l'appareil de l'utilisateur.

## Création d'un point de terminaison de plateforme
<a name="mobile-platform-endpoint-create"></a>

Pour envoyer des notifications à une application à l'aide d'Amazon SNS, le jeton d'appareil de cette application doit d'abord être inscrit auprès d'Amazon SNS grâce à l'appel de l'action de création d'un point de terminaison de plateforme. Cette action utilise l'Amazon Resource Name (ARN) de l'application de plateforme et le jeton d'appareil en tant que paramètres et renvoie l’ARN du point de terminaison de plateforme créé.

L'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)action 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 l'ARN du point de terminaison de 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 l'ARN du point de terminaison de 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.

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

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

## Code fictif
<a name="mobile-platform-endpoint-pseudo-code"></a>

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. Elle peut également être utilisée lors de la notification d'une modification du jeton d'appareil à Amazon SNS. 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. Elle peut être appelée au tout début, lorsque l'application ne connaît pas son propre ARN de point de terminaison de plateforme, comme cela se produit lors d'une inscription initiale. 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 ARN de point de terminaison mais qu'il a été supprimé.
+ L'`GetEndpointAttributes`action 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 Exemple de SDK
<a name="mobile-platform-endpoint-sdk-examples"></a>

Le code suivant montre comment implémenter le pseudo code précédent à l'aide des clients Amazon SNS 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](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) 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 ]

**SDK pour Java 2.x**  
 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](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
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 [Actions d'API push mobile](mobile-push-api.md).

## Résolution des problèmes
<a name="mobile-platform-endpoint-problems"></a>

### Appel répété de la création du point de terminaison de plateforme avec un jeton d'appareil obsolète
<a name="mobile-platform-endpoint-problems-outdated"></a>

En particulier pour les points de terminaison FCM, 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 fois que l'application démarre. Cela peut sembler correct dans la mesure où l'application n'a pas à gérer l'état du jeton d'appareil et où Amazon SNS met automatiquement à jour le jeton d'appareil à l'aide de sa valeur la plus récente. Cependant, cette solution présente un certain nombre de problèmes graves :
+ Amazon SNS s'appuie sur les retours de FCM pour remplacer les jetons d'appareil expirés par de nouveaux jetons d'appareil. FCM conserve les informations concernant les anciens jetons d'appareil un certain temps, mais pas indéfiniment. Une fois que FCM a oublié la connexion entre l'ancien jeton d'appareil et le nouveau, Amazon SNS ne peut plus mettre à jour le jeton d'appareil stocké dans le point de terminaison de plateforme avec la valeur correcte ; au lieu de cela, il désactive simplement le point de terminaison de plateforme.
+ L'application de plateforme contient plusieurs points de terminaison de plateforme correspondant au même jeton d'appareil.
+ Amazon SNS impose un quota au nombre de points de terminaison de plateforme qui peuvent être créés en commençant par le 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 points de terminaison FCM, consultez. [Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS](sns-fcm-endpoint-management.md)

### Réactivation d'un point de terminaison de plateforme associé à un jeton d'appareil non valide
<a name="mobile-platform-endpoint-problems-invalid"></a>

Lorsqu'une plateforme mobile (telle que APNs FCM) 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 plateforme associé à ce jeton d'appareil. Amazon SNS rejettera ensuite 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 la prochaine publication, la plateforme mobile informera à nouveau Amazon SNS que le jeton d'appareil n'est pas valide et Amazon SNS désactivera à nouveau le point de terminaison de 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.

# Intégration de jetons d'appareils à Amazon SNS pour les notifications mobiles
<a name="mobile-push-send-devicetoken"></a>

Lorsque vous enregistrez pour la première fois une application et un appareil mobile auprès d'un service de notification, tel que Apple Push Notification Service (APNs) et Firebase Cloud Messaging (FCM), les jetons d'appareil ou l'enregistrement IDs sont renvoyés par le service. Ils tokens/IDs sont ajoutés à Amazon SNS afin de créer un point de terminaison pour l'application et l'appareil, à l'aide de l'[https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)API. Une fois le point de terminaison créé, un [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)est renvoyé, qu'Amazon SNS utilise pour diriger les notifications vers l'application/l'appareil approprié.

Vous pouvez ajouter des jetons d'appareil ou un enregistrement IDs sur Amazon SNS de la manière suivante :
+ Ajoutez manuellement un seul jeton via AWS Management Console
+ Chargement de plusieurs jetons à l'aide de l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Enregistrez des jetons pour les futurs appareils

****Pour ajouter manuellement un jeton d'appareil ou un identifiant d'enregistrement****

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez votre application, puis choisissez **Modifier**. Si vous n'avez pas encore créé d'application de plateforme, suivez le [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md) guide pour le faire dès maintenant.

1. Choisissez **Créer un point de terminaison**.

1. Dans le champ **Endpoint Token**, entrez le **jeton** ou l'**ID d'enregistrement**, selon le service de notification que vous utilisez (par exemple, l'ID d'enregistrement FCM).

1. (Facultatif) Entrez des données supplémentaires dans le champ **Données utilisateur**. Ces données doivent être codées en UTF-8 et être inférieures à 2 Ko.

1. Choisissez **Créer un point de terminaison**.

Une fois le point de terminaison créé, vous pouvez envoyer des messages directement à l'appareil mobile ou aux appareils mobiles abonnés à une rubrique Amazon SNS.

****Pour télécharger plusieurs jetons à l'aide de l'`CreatePlatformEndpoint`API****

Les étapes suivantes montrent comment utiliser l'exemple d'application Java (`bulkupload`package) fourni par AWS pour télécharger plusieurs jetons (jetons d'appareil ou enregistrement IDs) sur Amazon SNS. Vous pouvez utiliser cet exemple d'application pour vous familiariser avec le chargement des jetons existants. 
**Note**  
Les étapes suivantes utilisent l'IDE Eclipse Java. Les étapes supposent que vous avez installé le AWS SDK pour Java et que vous disposez des informations d'identification AWS de sécurité pour votre Compte AWS. Pour de plus amples informations, veuillez consulter [AWS SDK pour Java](https://aws.amazon.com/sdkforjava/). Pour plus d'informations sur les informations d'identification, consultez les [informations d'identification AWS de sécurité](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) dans le *guide de l'utilisateur IAM*. 

1. Téléchargez et décompressez le fichier [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Créez un nouveau **projet Java** dans Eclipse et importez le `SNSSamples` dossier dans le projet. 

1. Téléchargez la bibliothèque [OpenCSV](http://sourceforge.net/projects/opencsv/) et ajoutez-la au chemin de compilation.

1. Dans le `BulkUpload.properties` fichier, spécifiez les éléments suivants : 
   + Votre `ApplicationArn` (ARN de l'application de plateforme).
   + Le chemin absolu vers votre fichier CSV contenant les jetons.
   + Enregistrement des noms de fichiers pour les jetons réussis et échoués. Par exemple : `goodTokens.csv` et `badTokens.csv`.
   + (Facultatif) Configuration du délimiteur, du guillemet et du nombre de fils à utiliser.

   Votre `BulkUpload.properties` terminé devrait ressembler à ce qui suit :

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  Exécutez l'application **BatchCreatePlatformEndpointSample.java** pour télécharger les jetons sur Amazon SNS. Les jetons téléchargés avec succès seront connectés`goodTokens.csv`, tandis que les jetons mal formés seront connectés. `badTokens.csv`

**Pour enregistrer des jetons provenant d'appareils pour de futures installations d'applications**

Deux options s'offrent à vous pour ce processus :

**Utiliser le service Amazon Cognito**  
Votre application mobile peut utiliser des informations d'identification de sécurité temporaires pour créer des points de terminaison. Il est recommandé d'utiliser Amazon Cognito pour générer des informations d'identification temporaires. Pour plus d'informations, consultez le guide du *[développeur Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*   
Pour suivre [les inscriptions](application-event-notifications.md) aux applications, utilisez les événements Amazon SNS pour recevoir des notifications lors de la création d'un nouveau point de terminaison ARNs .  
Vous pouvez également utiliser l'[https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)API pour récupérer la liste des points de terminaison enregistrés.

**Utilisation d'un serveur proxy**  
Si l'infrastructure de votre application prend déjà en charge l'enregistrement des appareils lors de l'installation, vous pouvez utiliser votre serveur comme proxy. Il transmettra les jetons de l'appareil à Amazon SNS via l'[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)API.  
L'ARN du point de terminaison créé par Amazon SNS sera renvoyé et pourra être stocké par votre serveur pour la publication de futurs messages.

# Amazon SNS Méthodes d'authentification par notification push Apple
<a name="sns-apple-authentication-methods"></a>

Vous pouvez autoriser Amazon SNS à envoyer des notifications push à votre appli iOS ou macOS en communiquant des informations qui vous identifient en tant que développeur de l'application. Pour vous authentifier, fournissez une *clé* ou un *certificat* [ lors de la création d'une application de plateforme](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html), que vous pouvez obtenir à partir de votre compte Apple Developer.

**Clé de signature de jeton**  
Clé de signature privée utilisée par Amazon SNS pour signer les jetons d'authentification Apple Push Notification Service (APNs).  
Si vous fournissez une clé de signature, Amazon SNS utilise un jeton pour s'authentifier APNs pour chaque notification push que vous envoyez. Avec votre clé de signature, vous pouvez envoyer des notifications push aux environnements de APNs production et de sandbox.  
Votre clé de signature n'expire pas, et vous pouvez l’utiliser pour plusieurs appli. Pour plus d'informations, consultez la section [Communiquer avec APNs des jetons d'authentification](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) dans la section d'**aide relative au compte développeur** du site Web d'Apple.

**Certificat**  
Certificat TLS utilisé par Amazon SNS pour s'authentifier lorsque vous envoyez APNs des notifications push. Procurez-vous le certificat à partir de votre compte Apple Developer.  
Les certificats prennent fin au bout d'un an. Dans ce cas, vous devez créer un certificat et le fournir à Amazon SNS. Pour plus d'informations, consultez la section [Etablissement d'une connexion basée sur des certificats APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) sur le site Web des développeurs Apple.

**Pour gérer les APNs paramètres à l'aide de la console AWS de gestion**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez l'**application** dont vous souhaitez modifier les APNs paramètres, puis choisissez **Modifier**. Si vous n'avez pas encore créé d'application de plateforme, suivez le [Création d'une application de plateforme Amazon SNS](mobile-push-send-register.md) guide pour le faire dès maintenant.

1. Choisissez **Modifier** pour modifier les paramètres de votre application de plateforme.

1. Dans la section **Type d'authentification**, choisissez l'une des options suivantes :
   + **Authentification basée sur des jetons** (recommandée pour les intégrations modernes APNs )
   + **Authentification basée sur des certificats** (ancienne méthode)

1. Configurez vos **informations d'identification** en fonction du type d'authentification :
   + **Pour l'authentification basée sur des jetons :**
     + Téléchargez le **fichier .p8**, qui est la clé de signature du jeton d'authentification que vous avez téléchargée depuis votre compte Apple Developer.
     + Entrez l'**identifiant de la clé de signature** que vous trouverez dans votre compte Apple Developer. Accédez à **Certificats IDs****, profils**, **clés**, puis sélectionnez la **clé** que vous souhaitez utiliser.
     + Fournissez l'**identifiant d'équipe** de votre compte Apple Developer. Vous pouvez le trouver sur la page d'adhésion.
     + Entrez l'**identifiant du bundle** attribué à votre application. Vous pouvez le trouver sous Certificats IDs et profils, App IDs.
   + **Pour l'authentification basée sur des certificats :**
     + Téléchargez le **fichier .p12** pour votre certificat TLS. Ce fichier peut être exporté depuis Keychain Access sur macOS après avoir téléchargé le certificat depuis votre compte Apple Developer.
     + Si vous avez attribué un **mot de passe** à votre certificat .p12, saisissez-le ici.

1. Après avoir saisi les informations d'identification nécessaires, choisissez **Enregistrer les modifications** pour mettre à jour les paramètres.

# Configuration de l'authentification de l'intégration d'Amazon SNS avec Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Cette rubrique explique comment obtenir les informations d'identification de l'API FCM (HTTP v1) requises auprès de Google pour les utiliser avec l' AWS API, AWS CLI et le AWS Management Console.

**Important**  
26 mars 2024 — Amazon SNS prend en charge l'API FCM HTTP v1 pour les appareils Apple et les destinations Webpush. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 afin d'éviter toute interruption des applications.  
18 janvier 2024 — Amazon SNS a introduit la prise en charge de l'API FCM HTTP v1 pour l'envoi de notifications push mobiles aux appareils Android.  
20 juin 2023 — Google a déconseillé son ancienne API HTTP Firebase Cloud Messaging (FCM). Amazon SNS prend désormais en charge la livraison vers tous les types d'appareils à l'aide de l'API FCM HTTP v1. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 pour éviter toute interruption.

Vous pouvez autoriser Amazon SNS à envoyer des notifications push à vos applications en communiquant des informations qui vous identifient en tant que développeur de l’application. Pour vous authentifier, fournissez une **clé d'API** ou un **jeton** [lors de la création d'une application de plateforme](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Vous pouvez obtenir les informations suivantes depuis votre [console d'application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds) :

**Clé d'API**  
La clé d'API est une information d'identification utilisée lors de l'appel de l'ancienne API de Firebase. Le FCM Legacy APIs sera supprimé par Google le 20 juin 2024. Si vous utilisez actuellement une clé d'API comme information d'dentification de plateforme, vous pouvez mettre à jour les informations d'identification de la plateforme en sélectionnant l'option **Jeton** et en téléchargeant le fichier JSON associé pour votre application Firebase.

**Jeton**  
Un jeton d'accès de courte durée est utilisé lors de l'appel de l'API HTTP v1. Il s'agit de l'API suggérée par Firebase pour envoyer des notifications push. Afin de générer des jetons d'accès, Firebase fournit aux développeurs un ensemble d'informations d'identification sous la forme d'un fichier de clé privée (également appelé fichier service.json).

## Prérequis
<a name="sns-fcm-authentication-prerequisite"></a>

Vous devez obtenir vos informations d'identification FCM service.json pour pouvoir gérer les paramètres FCM dans Amazon SNS. Pour obtenir vos informations d'identification service.json, consultez la section [Migrer de l'ancienne version de FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) dans la documentation de Google Firebase.

## Gestion des paramètres FCM à l'aide de la CLI
<a name="sns-fcm-authentication-api"></a>

Vous pouvez créer des notifications push FCM à l'aide de l' AWS API. Le nombre et la taille des ressources Amazon SNS d'un AWS compte sont limités. Pour plus d'informations, consultez la section [Points de terminaison et quotas Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) dans le *Références générales AWS Guide*.

**Pour créer une notification push FCM associée à une rubrique AWS Amazon SNS (API)**  
Lorsque vous utilisez des informations d'identification de type **clé**, les données `PlatformCredential` se présentent sous forme d'une `API key`. Lorsque vous utilisez des informations d'identification de type **jeton**, les données `PlatformCredential` se présentent sous forme d'un fichier de clé privée au format JSON :
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Pour récupérer un type d'identifiant FCM pour une rubrique Amazon SNS (API) existante AWS**  
Récupère le type d'information d'identification `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"` :
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Pour définir un attribut FCM pour une rubrique AWS Amazon SNS (API) existante**  
Définit l'attribut FCM :
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Gestion des paramètres FCM à l'aide de la console
<a name="sns-fcm-authentication-cli"></a>

Vous pouvez créer des notifications push FCM à l'aide de la AWS Command Line Interface (CLI). Le nombre et la taille des ressources Amazon SNS d'un AWS compte sont limités. Pour plus d'informations, consultez [Points de terminaison et quotas Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

**Pour créer une notification push FCM avec une rubrique Amazon SNS (AWS CLI)**  
Lorsque vous utilisez des informations d'identification de type **clé**, les données `PlatformCredential` se présentent sous forme d'une `API key`. Lorsque vous utilisez des informations d'identification de type **jeton**, les données `PlatformCredential` se présentent sous forme d'un fichier de clé privée au format JSON. Lorsque vous utilisez la AWS CLI, le fichier doit être au format chaîne et les caractères spéciaux doivent être ignorés. Pour formater correctement le fichier, Amazon SNS recommande d'utiliser la commande suivante : `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Pour récupérer un type d'information d'identification FCM pour une rubrique Amazon SNS existante (AWS CLI)**  
Récupère le type d'information d'identification `"AuthenticationMethod": "Token"` ou ` "AuthenticationMethod": "Key"` :
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Pour définir un attribut FCM pour une rubrique Amazon SNS existante (AWS CLI)**  
Définit l'attribut FCM :
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Gestion des paramètres FCM (console)
<a name="sns-fcm-authentication-console"></a>

Suivez les étapes suivantes pour saisir et gérer vos informations d'identification Firebase Cloud Messaging (FCM) dans Amazon SNS.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le volet de navigation, sélectionnez **Notifications push**.

1. Dans la section **Applications de plate-forme**, sélectionnez l'**application de plate-forme FCM** dont vous souhaitez modifier les informations d'identification, puis choisissez **Modifier**.

1. Dans la section **Informations d'identification de Firebase Cloud Messaging**, choisissez l'une des options suivantes :
   + **Authentification basée sur des jetons** (méthode recommandée) : téléchargez le **fichier de clé privée** (JSON) que vous avez téléchargé depuis la console Firebase. Ce fichier contient les informations d'identification nécessaires pour générer des jetons d'accès de courte durée pour les notifications FCM. Pour obtenir ce fichier, procédez comme suit :

     1. Accédez à la [console de votre application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Dans les **paramètres du projet**, sélectionnez **Cloud Messaging**.

     1. Téléchargez le fichier JSON de **clé privée** (à utiliser dans la méthode d'authentification basée sur des jetons).
   + **Authentification par clé d'API** — Si vous préférez utiliser l'ancienne méthode d'authentification par clé d'API, entrez la **clé d'API Google** dans le champ prévu à cet effet. Pour obtenir ce fichier, procédez comme suit :

     1. Accédez à la [console de votre application Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds).

     1. Dans **les paramètres du projet**, sélectionnez **Cloud Messaging**.

     1. Copiez la **clé du serveur** (clé API) à utiliser pour envoyer des notifications.

1. Lorsque vous avez terminé, choisissez **Enregistrer les modifications**.

**Voir aussi**
+ [Utilisation des charges utiles de Google Firebase Cloud Messaging v1 dans Amazon SNS](sns-fcm-v1-payloads.md)

# Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS
<a name="sns-fcm-endpoint-management"></a>

## Gestion et maintenance des jetons d'appareils
<a name="sns-managing-device-tokens"></a>

Vous pouvez garantir la délivrabilité des notifications push de votre application mobile en suivant ces étapes :

1. Stockez tous les jetons de l'appareil, le point de terminaison ARNs Amazon SNS correspondant et les horodatages sur votre serveur d'applications.

1. Supprimez tous les jetons périmés et supprimez le point de terminaison Amazon ARNs SNS correspondant.

Au démarrage initial de votre application, vous recevrez un jeton d'appareil (également appelé jeton d'enregistrement) pour l'appareil. Ce jeton d'appareil est émis par le système d'exploitation de l'appareil et est lié à votre application FCM. Une fois que vous avez reçu ce jeton d'appareil, vous pouvez l'enregistrer auprès d'Amazon SNS en tant que point de terminaison de plateforme. Nous vous recommandons de stocker le jeton de l'appareil, l'ARN du point de terminaison de la plateforme Amazon SNS et l'horodatage en les enregistrant sur votre serveur d'applications ou sur un autre magasin persistant. Pour configurer votre application FCM afin de récupérer et de stocker les jetons d'appareil, consultez la section [Récupérer et stocker les jetons d'enregistrement](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) dans la documentation *Firebase* de Google.

Il est important que vous conserviez up-to-date les jetons. Les jetons de l'appareil de votre utilisateur peuvent changer dans les conditions suivantes :

1. L'application mobile est restaurée sur un nouvel appareil.

1. L'utilisateur désinstalle ou met à jour l'application.

1. L'utilisateur efface les données de l'application.

Lorsque le jeton de votre appareil change, nous vous recommandons de mettre à jour le point de terminaison Amazon SNS correspondant avec le nouveau jeton. Cela permet à Amazon SNS de poursuivre la communication avec l'appareil enregistré. Vous pouvez le faire en implémentant le pseudo code suivant dans votre application mobile. Il décrit une pratique recommandée pour créer et gérer des points de terminaison de plateforme activés. Cette approche peut être exécutée à chaque démarrage des applications mobiles ou sous forme de tâche planifiée en arrière-plan.

### Code fictif
<a name="sns-device-token-pseudo-code"></a>

Utilisez le pseudo-code FCM suivant pour gérer et gérer les jetons de l'appareil.

```
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
    # first time registration
    call CreatePlatformEndpoint
    store returned endpoint arn
endif

call GetEndpointAttributes on the endpoint arn 

if (getting attributes encountered NotFound exception)
    #endpoint was deleted 
    call CreatePlatformEndpoint
    store returned endpoint arn
else 
    if (token in endpoint does not match latest) or 
        (GetEndpointAttributes shows endpoint as disabled)
        call SetEndpointAttributes to set the 
                     latest token and enable the endpoint
    endif
endif
```

Pour en savoir plus sur les exigences relatives à la mise à [jour des jetons, consultez la section Mettre à jour régulièrement](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) les jetons dans la documentation *Firebase* de Google.

## Détection de jetons non valides
<a name="sns-detecting-invalid-tokens"></a>

Lorsqu'un message est envoyé à un point de terminaison FCM v1 avec un jeton d'appareil non valide, Amazon SNS reçoit l'une des exceptions suivantes :
+ `UNREGISTERED`(HTTP 404) — Lorsqu'Amazon SNS reçoit cette exception, vous recevez un événement d'échec de livraison avec un identifiant `FailureType` de`InvalidPlatformToken`, et un *jeton de plateforme `FailureMessage` of associé au point de terminaison n'est pas valide*. Amazon SNS désactivera le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.
+ `INVALID_ARGUMENT`(HTTP 400) — Lorsqu'Amazon SNS reçoit cette exception, cela signifie que le jeton de l'appareil ou la charge utile du message n'est pas valide. Pour plus d'informations, consultez [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentation *Firebase* de Google.

Comme il `INVALID_ARGUMENT` peut être renvoyé dans l'un ou l'autre de ces cas, Amazon SNS renverra un « de »`InvalidNotification`, et le *corps `FailureType` de notification « `FailureMessage` of » n'est* pas valide. Lorsque vous recevez cette erreur, vérifiez que votre charge utile est correcte. Si c'est correct, vérifiez que le jeton de l'appareil l'est up-to-date. Amazon SNS ne désactive pas le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.

Un autre cas où vous rencontrerez un échec de `InvalidPlatformToken` livraison est lorsque le jeton de l'appareil enregistré n'appartient pas à l'application qui tente d'envoyer ce message. Dans ce cas, Google renverra une *erreur SENDER\$1ID\$1MISMATCH*. Amazon SNS désactivera le point de terminaison de votre plateforme en cas d'échec d'une livraison, à cette exception près.

Tous les codes d'erreur observés reçus de l'API FCM v1 sont disponibles CloudWatch lorsque vous configurez l'[enregistrement de l'état de livraison](topics-attrib.md) pour votre application. 

Pour recevoir les événements de livraison de votre application, consultez[Événements d'application disponibles](application-event-notifications.md#application-event-notifications-events).

## Supprimer les jetons périmés
<a name="sns-removing-stale-tokens"></a>

Les jetons sont considérés comme périmés une fois que les envois de messages au terminal commencent à échouer. Amazon SNS définit ces jetons périmés comme des points de terminaison désactivés pour votre application de plateforme. Lorsque vous publiez sur un point de terminaison désactivé, Amazon SNS renvoie un `EventDeliveryFailure` événement avec le point de terminaison `FailureType` of`EndpointDisabled`, et le *point `FailureMessage` de terminaison est* désactivé. Pour recevoir les événements de livraison de votre application, consultez[Événements d'application disponibles](application-event-notifications.md#application-event-notifications-events).

Lorsque vous recevez cette erreur d'Amazon SNS, vous devez supprimer ou mettre à jour le jeton périmé dans l'application de votre plateforme.

# Utilisation d'Amazon SNS pour les notifications push mobiles
<a name="mobile-push-notifications"></a>

 Cette section décrit comment envoyer un message de notification push mobile.

## Publier dans une rubrique
<a name="mobile-push-send-topicmobile"></a>

Vous pouvez également utiliser Amazon SNS pour envoyer des messages à des points de terminaison mobiles abonnés à une rubrique. Le concept est le même que l'abonnement d'autres types de point de terminaison, comme Amazon SQS, HTTP/S, e-mail et SMS, à une rubrique, comme décrit dans [Qu'est-ce qu'Amazon SNS ?](welcome.md). La différence est qu'Amazon SNS communique via des services de notification tels que Apple Push Notification Service (APNS) et Google Firebase Cloud Messaging (FCM). Les points de terminaison mobiles abonnés reçoivent les notifications envoyées à la rubrique grâce au service de notification. 

## Messagerie directe sur appareil mobile Amazon SNS
<a name="mobile-push-send-directmobile"></a>

Vous pouvez envoyer des messages de notification push Amazon SNS directement à un point de terminaison qui représente une application sur un appareil mobile. 

**Pour envoyer directement un message**

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Push notifications** (Notifications Push).

1. Sur la page **des notifications push mobiles**, dans la section **Applications de la plateforme**, choisissez le nom de l'application, par exemple***MyApp***.

1. Sur la ***MyApp*** page, dans la section **Points de terminaison**, choisissez un point de terminaison, puis choisissez **Publier le message**.

1. Sur la page **Publier un message vers un point de terminaison**, saisissez le message qui s'affiche dans l'application sur l'appareil mobile, puis choisissez **Publier un message**.

   Amazon SNS envoie le message de notification à la plateforme de notification qui, à son tour, envoie le message à l'application.

# Publication de notifications Amazon SNS avec des charges utiles spécifiques à la plate-forme
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Vous pouvez utiliser Amazon SNS AWS Management Console ou Amazon APIs pour envoyer des messages personnalisés avec des charges utiles spécifiques à la plate-forme vers des appareils mobiles. Pour plus d'informations sur l'utilisation d'Amazon SNS APIs, consultez la section [Actions d'API push mobile](mobile-push-api.md) et le `SNSMobilePush.java` fichier dans. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Envoi de messages au format JSON
<a name="mobile-push-send-json"></a>

Lors de l'envoi de charges utiles propres à une plateforme, les données doivent être formatées en tant que chaînes de paire valeur clé JSON, avec les guillemets dans une séquence d'échappement.

Les exemples suivants montrent un message personnalisé pour la plateforme FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## Envoi de messages propres à une plateforme
<a name="mobile-push-send-platform"></a>

En plus d'envoyer des données personnalisées en tant que paires valeur clé, vous pouvez envoyer des paires valeur clé propres à une plateforme.

L'exemple suivant illustre l'inclusion des paramètres FCM `time_to_live` et `collapse_key` après les paires valeur clé de données personnalisées dans le paramètre FCM `data`.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Pour une liste des paires valeur clé prises en charge dans chacun des services de notification push pris en charge dans Amazon SNS, consultez les liens suivants : 

**Important**  
Amazon SNS prend désormais en charge l'API HTTP v1 de Firebase Cloud Messaging (FCM) pour envoyer des notifications push mobiles aux appareils Android.  
26 mars 2024 — Amazon SNS prend en charge l'API FCM HTTP v1 pour les appareils Apple et les destinations Webpush. Nous vous recommandons de migrer vos applications push mobiles existantes vers la dernière API HTTP v1 de FCM au plus tard le 1er juin 2024 afin d'éviter toute interruption des applications.
+ [Référence clé de charge utile](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) dans la documentation APNs 
+ [Protocole HTTP de Firebase Cloud Messaging](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) dans la documentation FCM
+ [Envoi d'un message](https://developer.amazon.com/sdk/adm/sending-message.html) dans la documentation ADM

## Envoi de messages à une application sur plusieurs plateformes
<a name="mobile-push-send-multiplatform"></a>

Pour envoyer un message à une application installée sur des appareils pour plusieurs plateformes, telles que FCM APNs, vous devez d'abord abonner les points de terminaison mobiles à une rubrique sur Amazon SNS, puis publier le message dans cette rubrique.

L'exemple suivant montre un message à envoyer aux terminaux mobiles abonnés sur APNs, FCM et ADM : 

```
{ 
  "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for 
one of the notification platforms.",     
  "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }",
  "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}",
  "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" 
}
```

## Envoi de messages APNs sous forme d'alerte ou de notifications en arrière-plan
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS peut envoyer des messages `alert` ou des `background` notifications (pour plus d'informations, consultez la section Envoyer des [mises à jour en arrière-plan à votre application](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app) dans la APNs documentation). APNs 
+ Une `alert` APNs notification informe l'utilisateur en affichant un message d'alerte, en émettant un son ou en ajoutant un badge à l'icône de votre application.
+ Une `background` APNs notification active ou demande à votre application d'agir en fonction du contenu de la notification, sans en informer l'utilisateur.

### Spécification de valeurs APNs d'en-tête personnalisées
<a name="specify-custom-header-value"></a>

Nous vous recommandons de spécifier des valeurs personnalisées pour l'[attribut de message `AWS.SNS.MOBILE.APNS.PUSH_TYPE` réservé](sns-message-attributes.md#sns-attrib-mobile-reserved) à l'aide de l'action d'`Publish`API Amazon SNS AWS SDKs, ou du. AWS CLI L'exemple DE CLI suivant définit `content-available` pour `1` et `apns-push-type` `background` pour la rubrique spécifiée. 

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**Note**  
Assurez-vous que la structure JSON est valide. Ajoutez une virgule après chaque paire clé-valeur, sauf la dernière.

### Déduire l'en-tête de type APNs push à partir de la charge utile
<a name="inferring-push-type-header-from-payload"></a>

Si vous ne définissez pas l'`apns-push-type` APNs en-tête, Amazon SNS définit l'en-tête `background` selon `alert` ou selon la `content-available` clé du `aps` dictionnaire de votre configuration de charge utile au format JSON APNs .

**Note**  
Amazon SNS est capable de déduire uniquement les en-têtes `alert` ou `background`, bien que l'en-tête `apns-push-type` puisse être défini sur d'autres valeurs.
+ `apns-push-type` a la valeur `alert`
  + Si le `aps` dictionnaire contient `content-available` défini sur `1` et *une ou plusieurs clés* qui déclenchent des interactions utilisateur.
  + Si le dictionnaire `aps` contient `content-available` défini sur `0` *ou* si la clé `content-available` est absente.
  + Si la valeur de la clé `content-available` n'est pas un entier ou un booléen.
+ `apns-push-type` a la valeur `background`
  + Si le dictionnaire `aps` contient *uniquement* la valeur `content-available` définie sur `1` et *aucune clé* qui déclenchent des interactions utilisateur.
**Important**  
Si Amazon SNS envoie un objet de configuration brut APNs sous forme de notification de fond uniquement, vous devez inclure `content-available` set to `1` dans le dictionnaire. `aps` Bien que vous puissiez inclure des clés personnalisées, le dictionnaire `aps` ne doit contenir aucune clé qui déclenche des interactions utilisateur (par exemple, des alertes, des badges ou des sons).

Voici un exemple d'objet de configuration brut.

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

Dans cet exemple, Amazon SNS définit l'`apns-push-type` APNs en-tête du message sur. `background` Lorsqu'Amazon SNS détecte que le dictionnaire `apn` contient la clé `content-available` définie sur `1` et ne contient aucune autre clé pouvant déclencher des interactions utilisateur, il définit l'en-tête sur `background`.

# Utilisation des charges utiles de Google Firebase Cloud Messaging v1 dans Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS prend en charge l'utilisation de l'API FCM HTTP v1 pour envoyer des notifications vers des destinations Android, iOS et Webpush. Cette rubrique fournit des exemples de structure de charge utile lors de la publication de notifications push mobiles à l'aide de la CLI ou de l'API Amazon SNS.

Vous pouvez inclure les types de messages suivants dans votre charge utile lorsque vous envoyez une notification FCM :
+ **Message de données** : un message de données est géré par votre application cliente et contient des paires clé-valeur personnalisées. Lorsque vous créez un message de données, vous devez inclure la `data` clé avec un objet JSON comme valeur, puis saisir vos paires clé-valeur personnalisées.
+ **Message de notification** ou **message d'affichage** : un message de notification contient un ensemble prédéfini de touches gérées par le SDK FCM. Ces clés varient en fonction du type d'appareil sur lequel vous livrez. Pour plus d'informations sur les clés de notification spécifiques à la plate-forme, consultez les rubriques suivantes :
  + [Clés de notification Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Clés de notification APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Clés de notification Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Pour plus d'informations sur les types de messages FCM, consultez la section [Types de messages](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) dans la documentation *Firebase* de Google.

## Utilisation de la structure de charge utile FCM v1 pour envoyer des messages
<a name="sending-messages-using-v1-payload"></a>

Si vous créez une application FCM pour la première fois, ou si vous souhaitez profiter des fonctionnalités de FCM v1, vous pouvez choisir d'envoyer une charge utile au format FCM v1. Pour ce faire, vous devez inclure la clé `fcmV1Message` de niveau supérieur. *Pour plus d'informations sur la création de charges utiles FCM v1, consultez [Migrer de l'ancienne FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) et [Personnalisation d'un message sur toutes les plateformes](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) dans la documentation Firebase de Google.*

**Exemple de charge utile FCM v1 envoyée à Amazon SNS :**

**Note**  
La valeur `GCM` clé utilisée dans l'exemple suivant doit être codée sous forme de chaîne lors de la publication d'une notification via Amazon SNS. 

```
{
  "GCM": "{ 
    \"fcmV1Message\": { 
      \"validate_only\": false,
      \"message\": {
        \"notification\": {
          \"title\": \"string\",
          \"body\": \"string\"
        },
        \"data\": {
          \"dataGen\": \"priority message\"
        },
        \"android\": {
          \"priority\": \"high\",
          \"notification\": {
            \"body_loc_args\": [\"string\"],
            \"title_loc_args\": [\"string\"],
            \"sound\": \"string\",
            \"title_loc_key\": \"string\",
            \"title\": \"string\",
            \"body\": \"string\",
            \"click_action\": \"clicky_clacky\",
            \"body_loc_key\": \"string\"
          },
          \"data\": {
            \"dataAndroid\": \"priority message\"
          },
          \"ttl\": \"10023.32s\"
        },
        \"apns\": {
          \"payload\": {
            \"aps\": {
              \"alert\": {
                \"subtitle\": \"string\",
                \"title-loc-args\": [\"string\"],
                \"title-loc-key\": \"string\",
                \"loc-args\": [\"string\"],
                \"loc-key\": \"string\",
                \"title\": \"string\",
                \"body\": \"string\"
              },
              \"category\": \"Click\",
              \"content-available\": 0,
              \"sound\": \"string\",
              \"badge\": 5
            }
          }
        },
        \"webpush\": {
          \"notification\": {
            \"badge\": \"5\",
            \"title\": \"string\",
            \"body\": \"string\"
          },
          \"data\": {
            \"dataWeb\": \"priority message\"
          }
        }
      }
    }
  }"
}
```

Lorsque vous envoyez une charge utile JSON, veillez à inclure l'`message-structure`attribut dans votre demande et à `json` le définir sur.

**Exemple de CLI :**

```
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
```

*Pour plus d'informations sur l'envoi de charges utiles au format FCM v1, consultez les informations suivantes dans la documentation Firebase de Google :*
+ [Migrer de l'ancienne FCM APIs vers HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [À propos des messages de la FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Ressource REST : projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Utilisation de l'ancienne structure de charge utile pour envoyer des messages à l'API FCM v1
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Lors de la migration vers FCM v1, il n'est pas nécessaire de modifier la structure de charge utile que vous utilisiez pour vos anciennes informations d'identification. Amazon SNS transforme votre charge utile dans la nouvelle structure de charge utile FCM v1 et l'envoie à Google.

Format de charge utile du message d'entrée :

```
{
  "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}"
}
```

Message envoyé à Google :

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Risques potentiels**
+ Le mappage de l'ancienne version à la version v1 ne prend pas en charge le service de notification push (APNS) d'Apple `headers` ni les `fcm_options` touches. Si vous souhaitez utiliser ces champs, envoyez une charge utile FCM v1.
+ Dans certains cas, les en-têtes de message sont requis par FCM v1 pour envoyer des notifications silencieuses à vos APNs appareils. Si vous envoyez actuellement des notifications silencieuses à vos APNs appareils, elles ne fonctionneront pas avec l'ancienne approche. Nous vous recommandons plutôt d'utiliser la charge utile FCM v1 pour éviter des problèmes inattendus. Pour obtenir la liste des APNs en-têtes et leur utilité, consultez la section [Communiquer avec APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) dans le manuel *Apple Developer Guide*.
+ Si vous utilisez l'attribut `TTL` Amazon SNS lors de l'envoi de votre notification, celui-ci ne sera mis à jour que dans le `android` champ. Si vous souhaitez définir l'attribut `TTL` APNS, utilisez la charge utile FCM v1.
+ Les `webpush` touches `android``apns`, et seront mappées et renseignées avec toutes les clés pertinentes fournies. Par exemple, si vous fournissez `title` une clé partagée entre les trois plateformes, le mappage FCM v1 renseignera les trois plateformes avec le titre que vous avez fourni.
+ Certaines clés partagées entre plateformes supposent des types de valeur différents. Par exemple, la `badge` clé transmise à `apns` attend une valeur entière, tandis que la `badge` clé transmise à `webpush` attend une valeur String. Dans les cas où vous fournissez la `badge` clé, le mappage FCM v1 ne renseigne que la clé pour laquelle vous avez fourni une valeur valide.

## Événements d'échec de livraison du FCM
<a name="sns-fcm-delivery-failure-events"></a>

Le tableau suivant indique le type de défaillance Amazon SNS correspondant aux codes d'erreur/d'état reçus de Google pour les demandes de notification FCM v1. Tous les codes d'erreur observés reçus de l'API FCM v1 sont disponibles CloudWatch lorsque vous configurez l'[enregistrement du statut de livraison](topics-attrib.md) pour votre application.


| Code FCM error/status  | Type de panne Amazon SNS | Message d’échec | Cause et atténuation | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  Le jeton de plateforme associé au point de terminaison n'est pas valide.  |  Le jeton d'appareil attaché à votre terminal est périmé ou non valide. Amazon SNS a désactivé votre terminal. Mettez à jour le point de terminaison Amazon SNS avec le jeton d'appareil le plus récent.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  Le corps de notification n'est pas valide.  |  Le jeton ou la charge utile du message de l'appareil n'est peut-être pas valide. Vérifiez que la charge utile de votre message est valide. Si la charge utile du message est valide, mettez à jour le point de terminaison Amazon SNS avec le jeton d'appareil le plus récent.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  Le jeton de plateforme associé au point de terminaison n'est pas valide.  |  L'application de plateforme associée au jeton d'appareil n'est pas autorisée à envoyer au jeton d'appareil. Vérifiez que vous utilisez les informations d'identification FCM correctes dans votre application de plateforme Amazon SNS.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  La dépendance n'est pas disponible.  |  FCM n'a pas pu traiter la demande à temps. Toutes les tentatives exécutées par Amazon SNS ont échoué. Vous pouvez stocker ces messages dans une file d'attente de lettres mortes (DLQ) et les rediffuser ultérieurement.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Défaillance inattendue ; veuillez contacter Amazon. Phrase d'échec [Erreur interne].  |  Le serveur FCM a rencontré une erreur lors de la tentative de traitement de votre demande. Toutes les tentatives exécutées par Amazon SNS ont échoué. Vous pouvez stocker ces messages dans une file d'attente de lettres mortes (DLQ) et les rediffuser ultérieurement.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Les informations d'identification de l'application de plateforme ne sont pas valides.  |  Impossible d'envoyer un message destiné à un appareil iOS ou à un appareil Webpush. Vérifiez que vos informations de développement et de production sont valides.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Demande limitée par [gcm].  |  Le quota de débit de messages, le quota de débit de messages de l'appareil ou le quota de débit de messages thématiques a été dépassé. Pour plus d'informations sur la manière de résoudre ce problème, consultez [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)la documentation *Firebase* de Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  Le corps de notification n'est pas valide.  |  Dans le cas d'une `PERMISSION_DENIED` exception, l'appelant (votre application FCM) n'est pas autorisé à exécuter l'opération spécifiée dans la charge utile. Accédez à votre console FCM et vérifiez que les actions d'API requises sont activées sur vos informations d'identification.  | 

# Attributs de l'application mobile Amazon SNS
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) prend en charge la journalisation de l'état de diffusion des messages de notification push. Après avoir configuré les attributs de l'application, les entrées du journal seront envoyées à CloudWatch Logs pour les messages envoyés depuis Amazon SNS vers les terminaux mobiles. La journalisation du statut de distribution du message permet de fournir des informations opérationnelles plus précises, par exemple : 
+ Savoir si un message de notification push a été diffusé au service de notification push à partir d'Amazon SNS.
+ Identifier la réponse envoyée par le service de notification push à Amazon SNS.
+ Déterminer la durée de conservation du message (la durée entre l'horodatage de publication et juste avant sa remise à un service de notification push).

 Pour configurer les attributs de l'application en fonction de l'état de livraison des messages AWS Management Console, vous pouvez utiliser les kits de développement AWS logiciel (SDKs) ou l'API de requête. 

## Configuration des attributs d'état de livraison des messages à l'aide du AWS Management Console
<a name="sns-msg-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, puis **Notifications Push**.

1. Dans la section **Applications de plate-forme**, choisissez l'application qui contient les points de terminaison pour lesquels vous souhaitez recevoir des CloudWatch journaux.

1. Choisissez **Actions sur l'application**, puis **Statut de diffusion**.

1. Dans la boîte de dialogue **État de la distribution**, sélectionnez **Créer des rôles IAM**.

   Vous serez ensuite redirigé vers la console IAM.

1. Choisissez **Autoriser** pour accorder à Amazon SNS l'accès en écriture afin qu'il puisse utiliser CloudWatch Logs en votre nom.

1. Maintenant, revenez dans la boîte de dialogue **État de livraison**, entrez un nombre dans le champ **Pourcentage de réussite par rapport à l'échantillon (0-100)** pour le pourcentage de messages envoyés avec succès pour lesquels vous souhaitez recevoir des CloudWatch journaux.
**Note**  
Une fois que vous avez configuré les attributs de l'application pour l'état de livraison des messages, tous les messages ayant échoué génèrent des CloudWatch journaux.

1. Enfin, sélectionnez **Enregistrer la configuration**. Vous pouvez désormais consulter et analyser les CloudWatch journaux contenant l'état de livraison des messages. Pour plus d'informations sur l'utilisation CloudWatch, consultez la [CloudWatchdocumentation](https://aws.amazon.com/documentation/cloudwatch).

## Exemples de journaux d'état CloudWatch de livraison des messages Amazon SNS
<a name="sns-msg-examples"></a>

Une fois que vous avez configuré les attributs d'état de livraison des messages pour un point de terminaison d'application, CloudWatch des journaux sont générés. Les exemples de journaux, au format JSON, se présentent comme suit :

**SUCCÈS**

```
{
  "status": "SUCCESS",
  "notification": {
    "timestamp": "2015-01-26 23:07:39.54",
    "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
  },
  "delivery": {
    "statusCode": 200,
    "dwellTimeMs": 65,
    "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
    "attempts": 1,
    "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d"
  }
}
```

**ÉCHEC**

```
{
  "status": "FAILURE",
  "notification": {
    "timestamp": "2015-01-26 23:29:35.678",
    "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
  },
  "delivery": {
    "statusCode": 8,
    "dwellTimeMs": 1451,
    "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
    "attempts": 1,
    "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
  }
}
```

Pour obtenir une liste des codes de réponse du service de notification push, consultez la page [Codes de réponse de la plateforme](#platform-returncodes).

## Configuration des attributs d'état de livraison des messages à l'aide du AWS SDKs
<a name="sns-msg-sdk"></a>

Ils [AWS SDKs](https://aws.amazon.com/tools/)fournissent APIs en plusieurs langues l'utilisation des attributs d'état de livraison des messages avec Amazon SNS. 

L'exemple Java suivant montre comment utiliser l'API `SetPlatformApplicationAttributes` pour configurer les attributs d'application pour l'état de diffusion des messages de notification push. Vous pouvez utiliser les attributs suivants pour l'état de diffusion du message : `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn` et `SuccessFeedbackSampleRate`. Les `FailureFeedbackRoleArn` attributs `SuccessFeedbackRoleArn` et sont utilisés pour donner à Amazon SNS un accès en écriture lui permettant d'utiliser CloudWatch Logs en votre nom. L'attribut `SuccessFeedbackSampleRate` permet de spécifier le pourcentage de la fréquence d’échantillonnage (0-100) des messages diffusés avec succès. Une fois que vous avez configuré l'`FailureFeedbackRoleArn`attribut, tous les messages ayant échoué génèrent des CloudWatch journaux. 

```
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("SuccessFeedbackSampleRate", "5");
setPlatformApplicationAttributesRequest.withAttributes(attributes);
setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");
sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
```

Pour plus d'informations sur le SDK pour Java, consultez [Mise en route avec le kit AWS SDK pour Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Codes de réponse de la plateforme
<a name="platform-returncodes"></a>

Voici une liste de liens pour les codes de réponse du service de notification push :


****  

| Service de notification push | Codes de réponse | 
| --- | --- | 
| Amazon Device Messaging (ADM) | Consultez [Format de la réponse](https://developer.amazon.com/docs/adm/send-message.html#response-format) dans la documentation ADM. | 
| Service de notification push Apple (APNs) | Voir la réponse HTTP/2 de APNs la section [Communiquer avec APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) dans le guide de programmation des notifications locales et distantes. | 
| Messagerie cloud Firebase (FCM) | Consultez [Codes de réponse aux messages d'erreur en aval](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) dans la documentation Firebase Cloud Messaging. | 
| Service de notification push Microsoft pour Windows Phone (MPNS) | Consultez [Codes de réponse du service de notification push pour Windows Phone 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) dans la documentation Windows 8 Development. | 
| Services de notification push Windows (WNS) | Consultez « Codes de réponse » dans [En-têtes de demande et de réponse du service de notification Push (applications d'exécution Windows)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) dans la documentation Windows 8 Development. | 

# Notifications d'événements liés aux applications Amazon SNS pour les applications mobiles
<a name="application-event-notifications"></a>

Amazon SNS prend en charge le déclenchement de notifications lorsque certains évènements d'application se produisent. Vous pouvez ensuite effectuer une action par programmation sur cet événement. Votre application doit inclure la prise en charge d'un service de notification push tel que Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM) et Windows Push Notification Services (WNS). Vous définissez les notifications d'événements d'application à l'aide de la console Amazon SNS ou du. AWS CLI AWS SDKs

## Événements d'application disponibles
<a name="application-event-notifications-events"></a>

Les notifications d'événements d'application suivent la création, la suppression et la mise à jour de points de terminaison de plateforme individuels, ainsi que les échecs de diffusion. Voici les noms d'attributs pour les événements d'application.


| Nom d’attribut | Déclencheur de notification | 
| --- | --- | 
| EventEndpointCreated | Un nouveau point de terminaison de plateforme est ajouté à votre application. | 
| EventEndpointDeleted | Tous les points de terminaison de plateforme associés à votre application sont supprimés. | 
| EventEndpointUpdated | Tous les attributs des points de terminaison de plateforme associés à votre application sont modifiés. | 
| EventDeliveryFailure | Une diffusion vers n’importe quel point de terminaison de plateforme associé à votre application fait l’objet d'une utilisation hors limites permanente.  Pour suivre les échecs de diffusion du côté application de plateforme, abonnez-vous aux événements d'état de diffusion du message pour l'application. Pour plus d'informations, consultez la page [Utilisation des attributs d'application Amazon SNS pour le statut de distribution du message](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

Vous pouvez associer n'importe quel attribut avec une application, qui peut alors recevoir ces notifications d'événements. 

## Envoi de notifications push mobile
<a name="application-event-notifications-howto-set"></a>

Pour envoyer des notifications d'événements d'application, spécifiez une rubrique qui recevra les notifications pour chaque type d'événement. Lorsqu'Amazon SNS envoie les notifications, la rubrique peut les acheminer à des points de terminaison qui effectueront l'action par programmation.

**Important**  
Des applications à volume élevé créeront un grand nombre de notifications d’événements d'application (par exemple, des dizaines de milliers), qui envahiront les points de terminaison destinés à une utilisation humaine, tels que les adresses e-mail, les numéros de téléphone et les applications mobiles. Respectez les consignes suivantes lorsque vous envoyez des notifications d’événements d'application à une rubrique :  
Chaque rubrique recevant des notifications ne doit contenir que des abonnements pour les points de terminaison programmatiques, tels que les points de terminaison HTTP ou HTTPS, les files d'attente Amazon SQS ou les fonctions. AWS Lambda 
Pour réduire le volume de traitement qui est déclenché par les notifications, limitez les abonnements de chaque rubrique à un petit nombre (par exemple, cinq ou moins).

Vous pouvez envoyer des notifications d'événements d'application à l'aide de la console Amazon SNS, du AWS Command Line Interface (AWS CLI) ou du. AWS SDKs 

### AWS Management Console
<a name="application-event-notifications-howto-set-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, **Notifications Push**.

1. Sur la page **des notifications push mobiles**, dans la section **Applications de la plateforme**, choisissez une application, puis sélectionnez **Modifier**.

1. Développez la section **Notifications d'événement**.

1. Choisissez **Actions**, **Configurer les évènements**.

1. Entrez ARNs les sujets à utiliser pour les événements suivants :
   + Point de terminaison créé
   + Point de terminaison supprimé
   + Point de terminaison mis à jour
   + Échec de diffusion

1. Sélectionnez **Enregistrer les modifications**.

### AWS CLI
<a name="awscli"></a>

Exécutez la commande [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

L'exemple suivant définit la même rubrique Amazon SNS pour les quatre évènements d'application :

```
aws sns set-platform-application-attributes
--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"
```

### AWS SDKs
<a name="application-event-notifications-sdk"></a>

Définissez les notifications d'événements d'application en soumettant une `SetPlatformApplicationAttributes` demande à l'aide de l'API Amazon SNS à l'aide d'un AWS SDK.

Pour obtenir la liste complète des guides du développeur et des exemples de code du AWS SDK, y compris l'aide au démarrage et des informations sur les versions précédentes, consultez[Utilisation d'Amazon SNS avec un SDK AWS](sdk-general-information-section.md).

# Actions d'API push mobile
<a name="mobile-push-api"></a>

Pour utiliser le service push mobile Amazon SNS APIs, vous devez d'abord remplir les conditions requises pour le service de notification push, telles que le service de notification push Apple (APNs) et Firebase Cloud Messaging (FCM). Pour obtenir plus d'informations sur les conditions préalables, consultez la page [Conditions préalables pour les notifications utilisateur Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Pour envoyer un message de notification push à une application mobile et à un appareil à l'aide de APIs, vous devez d'abord utiliser l'`CreatePlatformApplication`action, qui renvoie un `PlatformApplicationArn` attribut. L'attribut `PlatformApplicationArn` est ensuite utilisé par `CreatePlatformEndpoint`, qui renvoie un attribut `EndpointArn`. Vous pouvez alors utiliser l'attribut `EndpointArn` avec l'action `Publish` pour envoyer un message de notification à une application mobile et un appareil, ou vous pouvez utiliser l'attribut `EndpointArn` avec l'action `Subscribe` pour l'abonnement à une rubrique. Pour de plus amples informations, veuillez consulter [Configuration des notifications push avec Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

Les notifications push d'Amazon SNS sur mobile APIs sont les suivantes : 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Crée un objet d'application de plate-forme pour l'un des services de notification push pris en charge, tel que APNs FCM, auquel les appareils et les applications mobiles peuvent s'enregistrer. Renvoie un attribut `PlatformApplicationArn`, qui est utilisé par l'action `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Crée un point de terminaison pour un appareil et une application mobile sur l'un des services de notification push pris en charge. `CreatePlatformEndpoint` utilise l'attribut `PlatformApplicationArn` renvoyé par l'action `CreatePlatformApplication`. L'attribut `EndpointArn`, qui est renvoyé lors de l'utilisation de `CreatePlatformEndpoint`, est ensuite utilisé avec l'action `Publish` pour envoyer un message de notification à une application mobile et un appareil. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Crée une rubrique dans laquelle des messages peuvent être publiés. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Supprime le point de terminaison pour un appareil et une application mobile sur l'un des services de notification push pris en charge.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Supprime un objet d'application de plateforme.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Supprime une rubrique et tous ses abonnements.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Récupère les attributs de point de terminaison pour un appareil et une application mobile.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Récupère les attributs de l'objet d'application de plateforme.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Répertorie les points de terminaison et leurs attributs pour des appareils et des applications mobiles dans un service de notification push pris en charge.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Répertorie les objets d'application de plateforme pour les services de notification push pris en charge.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Envoie un message de notification à tous les points de terminaison abonnés à une rubrique.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Définit les attributs d'un point de terminaison pour un appareil et une application mobile.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Définit les attributs de l'objet d'application de plateforme.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Prépare l'abonnement d'un point de terminaison en lui envoyant un message de confirmation. Pour créer réellement un abonnement, le propriétaire du terminal doit lancer l' ConfirmSubscription action à l'aide du jeton figurant dans le message de confirmation. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Supprime un abonnement.

# Erreurs courantes de l'API push mobile Amazon SNS
<a name="mobile-push-api-error"></a>

Les erreurs renvoyées par Amazon SNS APIs pour mobile push sont répertoriées dans le tableau suivant. Pour plus d'informations sur Amazon SNS APIs pour mobile push, consultez. [Actions d'API push mobile](mobile-push-api.md)


| Erreur | Description | Code d'état HTTPS | Action d'API | 
| --- | --- | --- | --- | 
| Le nom de l'application est une chaîne nulle | Le nom d'application requis est défini sur null. | 400 | `CreatePlatformApplication` | 
| Platform Name is null string | Le nom de plateforme requis est défini sur null. | 400 | `CreatePlatformApplication` | 
| Platform Name is invalid | Une valeur non valide ou une out-of-range valeur a été fournie pour le nom de plate-forme. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas un certificat valide | Un certificat non valide a été fourni pour le APNs principal, à savoir le certificat SSL. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal est un certificat valide mais pas au format .pem | Un certificat valide qui n'est pas au format .pem a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal est un certificat expiré | Un certificat expiré a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas un certificat émis par Apple | Un certificat non émis par Apple a été fourni pour le mandataire APNs qui est le certificat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Le principal n'est pas fourni | Le APNs principal, à savoir le certificat SSL, n'a pas été fourni. | 400 | `CreatePlatformApplication` | 
| APNs — Les informations d'identification ne sont pas fournies | L' APNs identifiant, qui est la clé privée, n'a pas été fourni. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| APNs — Les informations d'identification ne sont pas au format .pem valide | L' APNs identifiant, qui est la clé privée, n'est pas dans un format .pem valide. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur n'APIKey est pas fourni | Les informations d'identification FCM, qui sont la clé API, n'ont pas été fournies. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey est vide | Les informations d'identification FCM, qui sont la clé API, sont vides. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey est une chaîne nulle | Les informations d'identification FCM, qui sont la clé API, sont null. | 400 | `CreatePlatformApplication` | 
| FCM — le serveur APIKey n'est pas valide | Les informations d'identification FCM, qui sont la clé API, ne sont pas valides. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is not provided | Le code secret du client requis n'est pas fourni. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret is a null string | La chaîne requise pour le code secret du client est null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is empty string | La chaîne requise pour le code secret du client est vide. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret is not valid | La chaîne requise pour le code secret du client n'est pas valide. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is empty string | La chaîne requise pour l'ID client est vide. | 400 | `CreatePlatformApplication` | 
| ADM — clientId is not provided | La chaîne requise pour l'ID client n'est pas fournie. | 400 | `CreatePlatformApplication` | 
| ADM — clientid is a null string | La chaîne requise pour l'ID client est null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id is not valid | La chaîne requise pour l'ID client n'est pas valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated possède un format ARN non valide | EventEndpointCreated possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted possède un format ARN non valide | EventEndpointDeleted possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure possède un format ARN non valide | EventDeliveryAttemptFailure possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure possède un format ARN non valide | EventDeliveryFailure possède un format ARN non valide. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated n'est pas un sujet existant | EventEndpointCreated n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted n'est pas un sujet existant | EventEndpointDeleted n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated n'est pas un sujet existant | EventEndpointUpdated n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure n'est pas un sujet existant | EventDeliveryAttemptFailure n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure n'est pas un sujet existant | EventDeliveryFailure n'est pas un sujet existant. | 400 | `CreatePlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `SetPlatformAttributes` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas un certificat valide | Un certificat non valide a été fourni pour le APNs principal, à savoir le certificat SSL. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal est un certificat valide mais pas au format .pem | Un certificat valide qui n'est pas au format .pem a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal est un certificat expiré | Un certificat expiré a été fourni pour le APNs principal, à savoir le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas un certificat émis par Apple | Un certificat non émis par Apple a été fourni pour le mandataire APNs qui est le certificat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Le principal n'est pas fourni | Le APNs principal, à savoir le certificat SSL, n'a pas été fourni. | 400 | `SetPlatformAttributes` | 
| APNs — Les informations d'identification ne sont pas fournies | L' APNs identifiant, qui est la clé privée, n'a pas été fourni. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| APNs — Les informations d'identification ne sont pas au format .pem valide | L' APNs identifiant, qui est la clé privée, n'est pas dans un format .pem valide. | 400 | `SetPlatformAttributes` | 
| FCM — le serveur n'APIKey est pas fourni | Les informations d'identification FCM, qui sont la clé API, n'ont pas été fournies. Pour plus d'informations, consultez [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)le manuel Amazon Simple Notification Service API Reference. | 400 | `SetPlatformAttributes` | 
| FCM — le serveur APIKey est une chaîne nulle | Les informations d'identification FCM, qui sont la clé API, sont null. | 400 | `SetPlatformAttributes` | 
| ADM — clientId is not provided | La chaîne requise pour l'ID client n'est pas fournie. | 400 | `SetPlatformAttributes` | 
| ADM — clientid is a null string | La chaîne requise pour l'ID client est null. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is not provided | Le code secret du client requis n'est pas fourni. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret is a null string | La chaîne requise pour le code secret du client est null. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted possède un format ARN non valide | EventEndpointDeleted possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated possède un format ARN non valide | EventEndpointUpdated possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure possède un format ARN non valide | EventDeliveryAttemptFailure possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure possède un format ARN non valide | EventDeliveryFailure possède un format ARN non valide. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated n'est pas un sujet existant | EventEndpointCreated n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted n'est pas un sujet existant | EventEndpointDeleted n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated n'est pas un sujet existant | EventEndpointUpdated n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure n'est pas un sujet existant | EventDeliveryAttemptFailure n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure n'est pas un sujet existant | EventDeliveryFailure n'est pas un sujet existant. | 400 | `SetPlatformAttributes` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `GetPlatformApplicationAttributes` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 403 | `GetPlatformApplicationAttributes` | 
| Token specified is invalid | Le jeton spécifié n'est pas valide. | 400 | `ListPlatformApplications` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 404 | `ListEndpointsByPlatformApplication` | 
| Token specified is invalid | Le jeton spécifié n'est pas valide. | 400 | `ListEndpointsByPlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `DeletePlatformApplication` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 403 | `DeletePlatformApplication` | 
| Platform ARN is invalid | L'ARN de plateforme n'est pas valide. | 400 | `CreatePlatformEndpoint` | 
| Platform ARN is valid but does not belong to the user | L'ARN de plateforme est valide, mais n'appartient pas à l'utilisateur. | 404 | `CreatePlatformEndpoint` | 
| Token is not specified | Le jeton n'est pas spécifié. | 400 | `CreatePlatformEndpoint` | 
| Token is not of correct length | La longueur du jeton est incorrecte. | 400 | `CreatePlatformEndpoint` | 
| Les données utilisateurs du client sont trop volumineuses. | Les données utilisateur du client ne doivent pas dépasser 2 048 octets en encodage UTF-8. | 400 | `CreatePlatformEndpoint` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `DeleteEndpoint` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `DeleteEndpoint` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `SetEndpointAttributes` | 
| Token is not specified | Le jeton n'est pas spécifié. | 400 | `SetEndpointAttributes` | 
| Token is not of correct length | La longueur du jeton est incorrecte. | 400 | `SetEndpointAttributes` | 
| Les données utilisateurs du client sont trop volumineuses. | Les données utilisateur du client ne doivent pas dépasser 2 048 octets en encodage UTF-8. | 400 | `SetEndpointAttributes` | 
| Endpoint ARN is invalid | L'ARN du point de terminaison n'est pas valide. | 400 | `GetEndpointAttributes` | 
| Endpoint ARN is valid but does not belong to the user | L'ARN du point de terminaison est valide, mais n'appartient pas à l'utilisateur. | 403 | `GetEndpointAttributes` | 
| Target ARN is invalid | L'ARN cible n'est pas valide. | 400 | `Publish` | 
| Target ARN is valid but does not belong to the user | L'ARN cible est valide, mais n'appartient pas à l'utilisateur. | 403 | `Publish` | 
| Message format is invalid | Le format du message n'est pas valide. | 400 | `Publish` | 
| Message size is larger than supported by protocol/end-service | La taille du message est supérieure à la taille prise en charge par le protocole/service final. | 400 | `Publish` | 

# Utilisation de l'attribut Amazon SNS time to live message pour les notifications push mobiles
<a name="sns-ttl"></a>

Amazon Simple Notification Service (Amazon SNS) prend en charge la définition d'un attribut de message de *time-to-live (TTL)* pour les messages de notification push mobile. Cela s'ajoute à la capacité existante de définir le TTL dans le corps du message Amazon SNS pour les services de notification push mobiles qui le prennent en charge, tels qu'Amazon Device Messaging (ADM) et Firebase Cloud Messaging (FCM) lors de l'envoi vers Android.

L'attribut de message TTL est utilisé pour spécifier des métadonnées d'expiration relatives à un message. Cela vous permet de spécifier le délai dont dispose le service de notification push, tel que Apple Push Notification Service (APNs) ou FCM, pour transmettre le message au terminal. Si, pour une raison quelconque (telle que la mise hors tension de l'appareil mobile), le message ne peut pas être diffusé dans la durée de vie spécifiée, il est supprimé et aucune autre tentative de diffusion n'est effectuée. Pour spécifier le TTL dans les attributs des messages, vous pouvez utiliser les AWS Management Console kits de développement AWS logiciel (SDKs) ou l'API de requête. 

## Attributs de message TTL pour les services de notification push
<a name="sns-ttl-msg-attrib"></a>

Voici une liste des attributs de message TTL pour les services de notification push que vous pouvez utiliser pour définir lors de l'utilisation de l'API AWS SDKs or query :


****  

| Service de notification push | Attribut de message TTL | 
| --- | --- | 
| Amazon Device Messaging (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Service de notification push Apple (APNs) | AWS.SNS.MOBILE.APNS.TTL | 
| Sandbox du service de notification push Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM lors de l'envoi vers Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Services de notification push Windows (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Chacun des services de notification push gère la durée de vie différemment. Amazon SNS fournit une vue abstraite de la durée de vie pour tous les services de notification push, ce qui facilite la spécification de la durée de vie. Lorsque vous utilisez le AWS Management Console pour spécifier le TTL (en secondes), vous ne devez saisir la valeur TTL qu'une seule fois et Amazon SNS calculera ensuite le TTL pour chacun des services de notification push sélectionnés lors de la publication du message. 

 La durée de vie est relative à l'heure de publication. Avant de remettre un message de notification push à un service de notification push spécifique, Amazon SNS calcule la durée de conservation (la durée entre l'horodatage de publication et juste avant sa remise à un service de notification push) pour la notification push et transmet la durée de vie restante au service de notification push spécifique. Si la durée de vie est inférieure à la durée de conservation, Amazon SNS ne tente pas d'effectuer la publication. 

Si vous spécifiez un TTL pour un message de notification push, la valeur TTL doit être un entier positif, sauf si la valeur de `0` a une signification spécifique pour le service de notification push, par exemple with APNs et FCM (lors de l'envoi vers Android). Si la valeur de durée de vie est définie sur`0` et que le service de notification push n'a pas de signification spécifique pour `0`, Amazon SNS supprime le message. Pour plus d'informations sur le paramètre TTL défini sur `0` lors de l'utilisation APNs, consultez le *tableau A-3 Identifiants d'élément pour les notifications à distance* dans la documentation de l'[API Binary Provider](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html).

## Ordre de priorité pour déterminer la durée de vie
<a name="sns-ttl-precedence"></a>

La priorité utilisée par Amazon SNS pour déterminer la durée de vie pour un message de notification push se fonde sur l'ordre suivant, où le plus petit nombre a la priorité la plus élevée : 

1. Durée de vie de l'attribut de message

1. Durée de vie du corps du message

1. Durée de vie par défaut du service de notification push (varie selon le service)

1. Durée de vie par défaut d'Amazon SNS (4 semaines)

Si vous définissez des valeurs de durée de vie différentes (une dans les attributs de message et une autre dans le corps du message) pour le même message, Amazon SNS modifie la durée de vie dans le corps du message pour qu'elle corresponde à celle spécifiée dans l'attribut du message.

## Spécifier le TTL à l'aide du AWS Management Console
<a name="sns-ttl-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Mobile**, **Notifications Push**.

1. Sur la page **Notifications Push mobile**, dans la section **Applications de plateforme**, sélectionnez une application.

1. Sur la ***MyApplication*** page, dans la section **Points de terminaison**, choisissez un point de terminaison d'application, puis choisissez **Publier le message**.

1. Dans la section **Détails du message**, saisissez la valeur de la durée de vie (la durée, en secondes, pendant laquelle le service de notification push doit diffuser le message au point de terminaison).

1. Choisissez **Publier le message**.

# Régions prises en charge par l'application mobile Amazon SNS
<a name="sns-mobile-push-supported-regions"></a>

Actuellement, vous pouvez créer des applications mobiles dans les régions suivantes :
+ USA Est (Ohio)
+ USA Est (Virginie du Nord)
+ USA Ouest (Californie du Nord)
+ USA Ouest (Oregon)
+ Afrique (Le Cap)
+ Asie-Pacifique (Hong Kong)
+ Asie-Pacifique (Jakarta)
+ Asie-Pacifique (Mumbai)
+ Asie-Pacifique (Osaka)
+ Asia Pacific (Seoul)
+ Asie-Pacifique (Singapour)
+ Asie-Pacifique (Sydney)
+ Asie-Pacifique (Tokyo)
+ Canada (Centre)
+ Europe (Francfort)
+ Europe (Irlande)
+ Europe (Londres)
+ Europe (Milan)
+ Europe (Espagne)
+ Europe (Paris)
+ Europe (Stockholm)
+ Middle East (Bahrain)
+ Moyen-Orient (EAU)
+ Amérique du Sud (São Paulo)
+ AWS GovCloud (US-Ouest)

# Bonnes pratiques pour gérer les notifications push mobiles Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Cette section décrit plusieurs bonnes pratiques qui peuvent vous aider à améliorer votre engagement client.

## Gestion des terminaux
<a name="channels-sms-best-practices-endpoint-management"></a>

Des problèmes de livraison peuvent survenir lorsque les jetons de l'appareil changent en raison d'une action de l'utilisateur sur l'appareil (par exemple, une application est réinstallée sur l'appareil) ou lorsque des [mises à jour de certificats](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) affectent des appareils fonctionnant sur une version iOS particulière. Il s'agit d'une bonne pratique recommandée par Apple pour [s'inscrire](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) à APNs chaque lancement de votre application.

Étant donné que le jeton d'appareil ne change pas chaque fois qu'une application est ouverte par un utilisateur, l'API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) idempotente peut être utilisée. Toutefois, cela peut créer des doublons pour le même appareil dans les cas où le jeton lui-même n'est pas valide ou si le point de terminaison est valide mais désactivé (par exemple, une incompatibilité entre les environnements de production et de sandbox).

Un mécanisme de gestion des jetons d'appareil tel que celui présent dans le [pseudo-code](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code) peut être utilisé.

Pour plus d'informations sur la gestion et la maintenance des jetons de périphérique FCM v1, consultez[Gestion des points de terminaison Firebase Cloud Messaging par Amazon SNS](sns-fcm-endpoint-management.md).

## Journalisation de l'état de distribution
<a name="channels-sms-best-practices-delivery-logging"></a>

Pour surveiller l'état de distribution des notifications push, nous vous recommandons d'activer la journalisation de l'état de distribution pour votre application de plateforme Amazon SNS. Cela vous aide à résoudre les échecs de livraison, car les journaux contiennent des [codes de réponse](sns-msg-status.md#platform-returncodes) fournisseur renvoyés par le service push de plateforme. Pour plus d'informations sur l'activation de la journalisation de l'état de distribution, consultez [Comment puis-je accéder aux journaux de diffusion des rubriques Amazon SNS pour les notifications push ?](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/).

## Notifications d’événements
<a name="channels-sms-best-practices-event-notifications"></a>

Pour gérer les points de terminaison d'une manière axée sur les événements, vous pouvez utiliser la fonctionnalité de [notification d'événement](application-event-notifications.md#application-event-notifications-sdk). Elle permet à la rubrique Amazon SNS configurée de distribuer les événements aux abonnés, tels qu'une fonction Lambda, pour des événements d'application de plateforme relatifs à la création de points de terminaison, à des suppressions, à des mises à jour ou à des échecs de livraison.