Come posso risolvere gli errori "DeviceTokenNotForTopic" durante la pubblicazione di notifiche push APN tramite Amazon SNS o Amazon Pinpoint?

Ultimo aggiornamento: 14/02/2022

Le mie notifiche push mobili di Apple Push Notification Service (APN) non vengono inviate tramite Amazon Simple Notification Service (Amazon SNS) o Amazon Pinpoint. Quando risulta impossibile eseguire le notifiche push, APN restituisce un codice di stato 400 con un messaggio di errore "DeviceTokenNotForTopic". Perché ricevo questo errore e come posso risolvere il problema?

Breve descrizione

Nel caso in cui gli APN non riconoscano l'ID bundle (argomento/applicazione) collegato a un certificato, gli APN restituiranno un codice di stato 400 e il seguente errore: "DeviceTokenNotForTopic".

Quando si verifica questo errore, gli APN disattivano anche l'endpoint della piattaforma associato.

Il problema è causato da un ID bundle APN errato nel campo dell'intestazione della richiesta API POST della notifica push.

Per risolvere l'errore quando si utilizza Amazon SNS o Amazon Pinpoint per inviare notifiche push agli APN, attiva prima l'endpoint della piattaforma disattivato. Quindi, controlla l'ID bundle registrato con gli APN per la tua applicazione ed esegui una delle seguenti operazioni in base al tuo caso d'uso:

  • Aggiorna l'ID bundle dell'applicazione in modo che corrisponda all'ID bundle registrato con gli APN.

-oppure-

  • Sostituisci l'ID bundle utilizzato da Amazon SNS o Amazon Pinpoint nel campo di intestazione della richiesta API POST della notifica push.

Per ulteriori informazioni, consulta le sezioni Panoramica del processo di notifica utente e Metodi di autenticazione Apple nella Guida per gli sviluppatori Amazon SNS. Inoltre, consulta la sezione Gestione delle risposte alle notifiche dagli APN sul sito Web di Apple Developer.

Nota: puoi impostare le notifiche degli eventi delle applicazioni per dispositivi mobili per quando si verificano determinati eventi dell'applicazione, in modo da poter intraprendere azioni programmatiche su quell'evento. Ad esempio, quando un endpoint della piattaforma viene disattivato.

Soluzione

Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi della AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente della AWS CLI.

Attiva l'endpoint della piattaforma disattivato

Per Amazon SNS

Esegui il comando della AWS CLI set-platform-application-attributes.

Per Amazon Pinpoint

Esegui il comando della AWS CLI update-endpoint.

Per ulteriori informazioni, consulta la sezione Creazione di un endpoint della piattaforma nella Guida per gli sviluppatori Amazon SNS e Aggiunta di endpoint ad Amazon Pinpoint.

Controlla l'ID bundle registrato con gli APN per la tua applicazione

1.    Apri il tuo account Apple Developer.

2.    Nella barra di navigazione a sinistra, scegli Certificates, IDs & Profiles (Certificati, ID e profili).

3.    Nella barra di navigazione a sinistra, scegli Identifiers (Identificatori). Quindi, App IDs (ID App).

4.    Scegli la tua applicazione.

5.    Copia l'ID bundle che si trova nel campo Name (Nome). Questo è l'ID bundle registrato con gli APN per la tua applicazione.

Per aggiornare l'ID bundle dell'applicazione in modo che corrisponda all'ID bundle registrato con gli APN

1.    Scarica Xcode, se non l'hai già fatto.

2.    Apri Xcode.

3.    Scegli la cartella root del progetto della tua applicazione.

4.    Scegli Signing & Capabilities (Firma e funzionalità).

5.    Nel campo di testo Bundle Identifier (Identificativo bundle), inserisci l'ID bundle registrato con gli APN per la tua applicazione. Il nuovo ID bundle viene salvato automaticamente.

Per sostituire l'ID bundle utilizzato da Amazon SNS o Amazon Pinpoint nel campo dell'intestazione della richiesta API POST della notifica push

Per Amazon SNS

Nella richiesta API POST inviata da Amazon SNS agli APN, specifica un valore di intestazione APN personalizzato per il seguente attributo del messaggio riservato: AWS.SNS.MOBILE.APNS.TOPIC. Assicurati che il valore dell'intestazione personalizzata corrisponda all'ID bundle registrato con gli APN.

Per le istruzioni e un comando esemplificativo, consulta la sezione Specifica dei valori dell'intestazione personalizzata degli APN nella Guida per gli sviluppatori di Amazon SNS.

Per Amazon Pinpoint

Nella richiesta API POST inviata da Amazon Pinpoint agli APN, modifica la proprietà ThreadId in modo che corrisponda all'ID bundle registrato con gli APN.

Per ulteriori informazioni, consulta la sezione Messaggi nella Documentazione di riferimento API REST di Amazon Pinpoint esend-messages nella Documentazione di riferimento di AWS CLI.

Esempio di comando send-messages di Amazon Pinpoint che invia una notifica push a un endpoint specifico

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

Esempio di schema di richiesta API Post di Amazon Pinpoint per le notifiche push APN che sostituiscono l'ID bundle di un'applicazione

Nota: il valore ThreadId (ID bundle) in questo schema di esempio è "com.example.push".

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

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?