Comment résoudre les erreurs « DeviceTokenNotForTopic » lors de la publication de notifications push APNs via Amazon SNS ou Amazon Pinpoint ?

Dernière mise à jour : 14/02/2022

Les notifications push mobiles de mon Apple Push Notification Service (APNs) ne parviennent pas à être envoyées via Amazon Simple Notification Service (Amazon SNS) ou Amazon Pinpoint. Lorsque les notifications push échouent, APNs renvoie un code d'état 400 avec un message d'erreur « DeviceTokenNotForTopic ». Pourquoi est-ce que je reçois cette erreur et comment puis-je résoudre le problème ?

Brève description

Si APNs ne reconnaît pas l'identifiant de lot (rubrique/application) lié à un certificat, APNs renvoie un code d'état 400 et l'erreur suivante : « DeviceTokenNotForTopic ».

Lorsque cette erreur se produit, APNs désactive également le point de terminaison de plateforme associé.

Le problème est dû à un identifiant de lot APNs incorrect dans le champ d'en-tête de la demande d'API POST de la notification push.

Pour résoudre l'erreur lors de l'utilisation d'Amazon SNS ou d'Amazon Pinpoint pour envoyer des notifications push à APNs, activez d'abord le point de terminaison de plateforme désactivé. Vérifiez ensuite l'identifiant de lot enregistré sur APNs pour votre application et effectuez l'une des opérations suivantes en fonction de votre cas d'utilisation :

  • Mettez à jour l'identifiant de lot de l'application pour qu'il corresponde à celui enregistré sur APNs.

-ou-

  • Remplacez l'identifiant de lot utilisé par Amazon SNS ou Amazon Pinpoint dans le champ d'en-tête de la demande d'API POST de la notification push.

Pour plus d'informations, consultez Présentation du processus de notification utilisateur et Méthodes d'authentification Apple dans le guide du développeur Amazon SNS. Regardez également Gestion des réponses aux notifications d'APNs sur le site web Apple Developer.

Remarque : vous pouvez configurer des notifications d'événement d'application mobile lorsque certains événements d'application se produisent, afin de pouvoir effectuer des actions programmatiques sur cet événement. Par exemple, lorsqu'un point de terminaison de plateforme est désactivé.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS Command Line Interface (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Activer le point de terminaison de plateforme désactivé

Pour Amazon SNS

Exécutez la commande AWS CLI set-platform-application-attributes.

Pour Amazon Pinpoint

Exécutez la commande AWS CLI update-endpoint.

Pour plus d'informations, consultez Créer un point de terminaison de plateforme dans le guide du développeur Amazon SNS et Ajouter des points de terminaison à Amazon Pinpoint.

Vérifier l'identifiant de lot enregistré sur APNs pour votre application

1.    Ouvrez votre compte Apple Developer.

2.    Dans la barre de navigation de gauche, choisissez Certificates, IDs & Profiles (Certificats, identifiants et profils).

3.    Dans la barre de navigation de gauche, choisissez Identifiers (Identifiants). Ensuite, App IDs (ID d'application).

4.    Choisissez votre application.

5.    Copiez l'identifiant de lot qui se trouve dans le champ Nom. Il s'agit de l'identifiant de lot enregistré sur APNs pour votre application.

Pour mettre à jour l'identifiant de lot de l'application afin qu'il corresponde à celui d'APNs

1.    Téléchargez Xcode, si ce n'est déjà fait.

2.    Ouvrez Xcode.

3.    Choisissez le dossier de projet racine de votre application.

4.    Choisissez Signing & Capabilities (Signature et fonctionnalités).

5.    Dans le champ de texte Bundle Identifier (Identificateur de lot), saisissez l'identifiant de lot enregistré sur APNs pour votre application. Le nouvel identifiant de lot est enregistré automatiquement.

Pour remplacer l'identifiant de lot utilisé par Amazon SNS ou Amazon Pinpoint dans le champ d'en-tête de la demande d'API POST de la notification push

Pour Amazon SNS

Dans la demande d'API POST qu'Amazon SNS envoie à APNs, spécifiez une valeur d'en-tête APNs personnalisée pour l'attribut de message réservé suivant : AWS.SNS.MOBILE.APNS.TOPIC. Assurez-vous que la valeur de l'en-tête personnalisée correspond à l'identifiant de lot enregistré sur APNs.

Pour obtenir des instructions et un exemple de commande, consultez la section Spécification de valeurs d'en-tête APNs personnalisées dans le guide du développeur Amazon SNS.

Pour Amazon Pinpoint

Dans la demande d'API POST qu'Amazon Pinpoint envoie à APNs, modifiez la propriété ThreadId pour qu'elle corresponde à l'identifiant de lot enregistré sur APNs.

Pour plus d'informations, consultez Messages dans le guide Amazon Pinpoint REST API Reference et send-messages dans AWS CLI Reference.

Exemple de commande d'envoi de messages Amazon Pinpoint qui envoie une notification push à un point de terminaison spécifique

aws pinpoint send-messages --application-id 38d6b2282bdc4b46b2e24a14efe04914 --message-request file://pinpointapns.json

Exemple de schéma de demande d'API Post Amazon Pinpoint pour les notifications push APNs qui remplacent un identifiant de lot d'une application

Remarque : la valeurThreadId (identifiant de lot) dans cet exemple de schéma est « com.example.push ».

{   
 "Addresses": {
 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": {  
 "ChannelType": "APNS_SANDBOX"  
 }     
 },       
 "MessageConfiguration": {  
 "APNSMessage": {
 "APNSPushType": "alert",
 "Body":"Sample Text for iOS Endpoints",  
 "ThreadId":"com.example.push" 
 }      
 }        
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?