如何解决通过 Amazon SNS 或 Amazon Pinpoint 发布 APN 推送通知时出现的“DeviceTokenNotForTopic”错误?

上次更新日期:2022 年 8 月 17 日

我的 Apple Push Notification Service (APN) 无法通过 Amazon Simple Notification Service (Amazon SNS) 或 Amazon Pinpoint 发送移动推送通知。推送通知失败时,APN 会返回 400/410 状态代码和“DeviceTokenNotForTopic”错误消息。为什么我会收到此错误消息,我该如何解决这个问题?

简短描述

创建 Amazon SNS 平台应用程序或配置 Amazon Pinpoint APN 渠道时,需要链接到特定服务包 ID 的证书/令牌。您的应用程序使用该服务包 ID 生成设备令牌。向设备端点发送消息时,APN 需要此设备令牌具有相同的服务包 ID。

如果 APN 获取具有不同服务包 ID 的设备令牌,其将返回 400/410 状态码和以下错误:“DeviceTokenNotForTopic”。发生此错误时,APN 会停用关联的平台端点,并在 SNS 上显示此端点的“已禁用”状态。

有关更多信息,请参阅《Amazon SNS 开发人员指南》中的用户通知流程概览Apple 身份验证方法。另请参阅 Apple 开发人员网站上的处理来自 APN 的通知响应

注意:您可以在某些应用程序事件发生时设置移动应用程序事件通知,以便对该事件采取编程式化操作。例如,您可以在平台端点停用时设置事件通知。

解决方法

注意:如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版的 AWS CLI

解决使用 Amazon SNS 或 Amazon Pinpoint 向 APN 发送推送通知时出现的错误

1.    检查为应用程序向 APN 注册的服务包 ID。

2.    更新应用程序的服务包 ID 以匹配向 APN 注册的服务包 ID,并生成新的设备令牌。

3.    然后,使用新生成的设备令牌更新平台端点。

检查为应用程序向 APN 注册的服务包 ID

基于证书的身份验证

1.    登录您的 Apple 开发人员账户。

2.    在左侧导航栏中选择 Certificates, IDs & Profiles(证书、标识符和描述文件)。

3.    在左侧导航栏中选择 Identifiers(标识符)。

4.    选择您的应用程序。

      注意:若要验证您的应用程序是否已链接到证书,请导航至 Certificates(证书),然后在 Name(名称)下查看服务包 ID。

5.    复制 Name(名称)字段中的捆绑包 ID。这就是为应用程序向 APN 注册的服务包 ID。

基于令牌的身份验证

对于基于令牌的身份验证,您可以使用单个令牌映射多个服务包 ID(应用程序)。若要验证您使用的服务包 ID 是否正确,请在 Apple 开发人员账户或 SNS 控制台上进行确认。

1.    登录您的 Apple 开发人员账户。

2.    在左侧导航栏中选择 Certificates, IDs & Profiles(证书、标识符和描述文件)。

3.    在左侧导航栏中选择 Identifiers(标识符)。然后选择 App IDs(App ID)。

4.    选择您的应用程序。

5.    复制 Name(名称)字段中的捆绑包 ID。这就是为应用程序向 APN 注册的服务包 ID。

6.    登录您的 SNS Console(SNS 控制台)。

7.    导航至“Mobile”(移动)下的 Push Notification(推送通知)。

8.    选择您的平台应用程序。

9.    确认 Apple 服务包 ID 是正确的服务包 ID。

更新应用程序的服务包 ID 以匹配向 APN 注册的服务包 ID

1.    如果没有 Xcode,就请下载一个。

2.    打开 Xcode。

3.    选择应用程序的根项目文件夹。

4.    选择 Signing & Capabilities(签名和功能)。

5.    在 Bundle Identifier(捆绑包标识符)文本字段中,输入应用程序向 APN 注册的捆绑包 ID。系统会自动保存新的服务包 ID。

6.    运行应用程序以生成具有正确服务包 ID 的新设备令牌。

更新平台端点

对于 Amazon SNS

1.    运行 set-endpoint-attributes AWS CLI 命令。

2.    将 Enabled(已启用)属性更改为 true。然后,对于 Token(令牌),指定新生成的设备令牌。

对于 Amazon Pinpoint

1.    运行 update-endpoint AWS CLI 命令。

2.    对于 Address(地址)属性,指定新生成的设备令牌。

有关更多信息,请参阅《Amazon SNS 开发人员指南》中的创建平台端点以及向 Amazon Pinpoint 添加端点


这篇文章对您有帮助吗?


您是否需要账单或技术支持?