Como soluciono problemas de erros “DeviceTokenNotForTopic” ao publicar notificações por push do APNs por meio do Amazon SNS ou do Amazon Pinpoint?

Data da última atualização: 14-02-2022

Minhas notificações por push móveis do Apple Push Notification Service (APNs) não são enviadas por meio do Amazon Simple Notification Service (Amazon SNS) ou do Amazon Pinpoint. Quando as notificações por push falham, o APNs retorna um código de status 400 com uma mensagem de erro “DeviceTokenNotForTopic”. Por que estou recebendo este erro e como faço para resolvê-lo?

Breve descrição

Se o APNs não reconhecer o ID do pacote (tópico/aplicação) vinculado a um certificado, o APNs retornará um código de status 400 e o seguinte erro: “DeviceTokenNotForTopic”.

Quando esse erro ocorre, o APNs também desativa o endpoint da plataforma associado.

O problema é causado por um ID de pacote do APNs incorreto no campo de cabeçalho da solicitação da API POST da notificação por push.

Para resolver o erro ao usar o Amazon SNS ou o Amazon Pinpoint para enviar notificações por push para o APNs, primeiro ative o endpoint da plataforma desativado. Em seguida, verifique o ID do pacote registrado no APNs para sua aplicação e siga um destes procedimentos com base no seu caso de uso:

  • Atualize o ID do pacote da aplicação para corresponder ao ID do pacote registrado no APNs.

-ou-

  • Substitua o ID do pacote que o Amazon SNS ou o Amazon Pinpoint usam no campo de cabeçalho da solicitação de API POST da notificação por push.

Para obter mais informações, consulteVisão geral do processo de notificação do usuário e Métodos de autenticação da Apple, no Guia do desenvolvedor do Amazon SNS. Além disso, Lidar com respostas de notificação do APNs no site Apple Developer.

Observação: você pode configurar notificações de eventos de aplicações móveis para quando determinados eventos de aplicação ocorrerem, para que você possa executar ações programáticas nesse evento. Por exemplo, quando um endpoint de plataforma é desativado.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique e confirme estar usando a versão mais recente da AWS CLI.

Ativar o endpoint da plataforma desativado

Para o Amazon SNS

Execute o comando set-platform-application-attributes da AWS CLI.

Para o Amazon Pinpoint

Execute o comandoupdate-endpoint da AWS CLI.

Para obter mais informações, consulte Criar um endpoint de plataforma, no Guia do desenvolvedor do Amazon SNS, e Adicionar endpoints ao Amazon Pinpoint.

Verificar o ID do pacote registrado no APNs para sua aplicação

1.    Abra sua conta do Apple Developer.

2.    Na barra de navegação esquerda, escolha Certificates, IDs & Profiles (Certificados, IDs e perfis).

3.    Na barra de navegação esquerda, escolha Identifiers (Identificadores). Em seguida, App IDs (IDs de aplicação).

4.    Escolha sua aplicação.

5.    Copie o ID do pacote que está no campo Name (Nome). Esse é o ID do pacote registrado no APNs para sua aplicação.

Para atualizar o ID do pacote da aplicação de forma que ele corresponda ao ID do pacote registrado no APNs

1.    Baixe o Xcode, se ainda não tiver feito isso.

2.    Abra o Xcode.

3.    Escolha a pasta do projeto raiz da sua aplicação.

4.    Escolha Signing & Capabilities (Assinatura e recursos).

5.    No campo de texto Bundle Identifier (Identificador do pacote), insira o ID do pacote registrado no APNs para sua aplicação. O novo ID do pacote é salvo automaticamente.

Para substituir o ID do pacote utilizado pelo Amazon SNS ou Amazon Pinpoint no campo de cabeçalho da solicitação de API POST da notificação por push

Para o Amazon SNS

Na solicitação da API POST que o Amazon SNS envia para o APNs, especifique um valor de cabeçalho do APNs personalizado para o seguinte atributo de mensagem reservada: AWS.SNS.MOBILE.APNS.TOPIC. Certifique-se de que o valor do cabeçalho personalizado corresponda ao ID do pacote registrado no APNs.

Para obter instruções e um exemplo de comando, consulte Especificar valores de cabeçalho do APNs personalizados, no Guia do desenvolvedor do Amazon SNS.

Para o Amazon Pinpoint

Na solicitação da API POST que o Amazon Pinpoint envia para o APNs, modifique a propriedade threadId para corresponder ao ID do pacote registrado no APNs.

Para obter mais informações, consulte Mensagens na referência de API REST do Amazon Pinpoint e send-messages na Referência da AWS CLI.

Exemplo do comando send-messages do Amazon Pinpoint que envia uma notificação por push para um endpoint específico

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

Exemplo de esquema de solicitação de API Post do Amazon Pinpoint para notificações por push do APN que substituem o ID do pacote de uma aplicação

Observação: o valor ThreadId (ID do pacote) neste esquema de exemplo é “com.example.push”.

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

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?