本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理和维护设备令牌
您可以按照以下步骤确保移动应用程序的推送通知的可送达性:
-
将所有设备令牌、相应的 Amazon SNS 终端节点 ARNs和时间戳存储在您的应用程序服务器上。
-
移除所有陈旧的令牌并删除相应的 Amazon SNS ARNs 终端节点。
应用程序首次启动后,您将收到该设备的设备令牌(也称为注册令牌)。此设备令牌由设备的操作系统创建,并与您的 FCM 应用程序相关联。收到此设备令牌后,您可以将其作为平台端点注册到 Amazon SNS。我们建议您存储设备令牌、Amazon SNS 平台端点 ARN 和时间戳,方法是将它们保存到您的应用程序服务器或其他永久存储中。要设置 FCM 应用以检索和存储设备令牌,请参阅 Google 的 Firebase 文档中的检索和存储注册令牌
维护 up-to-date代币很重要。如果满足以下条件,用户的设备令牌可以更改:
-
移动应用程序将在新设备上恢复。
-
用户卸载或更新应用程序。
-
用户清除应用程序数据。
当您的设备令牌发生变化时,我们建议您使用新令牌更新相应的 Amazon SNS 端点。这样,Amazon SNS 就可以继续与注册的设备进行通信。您可以通过在移动应用程序中实现以下伪代码来做到这一点。它描述了创建和维护已启用的平台端点的推荐做法。这种方法可以在每次移动应用程序启动时执行,也可以在后台作为计划任务执行。
伪代码
使用以下 FCM 伪代码管理和维护设备令牌。
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
要详细了解令牌更新要求,请参阅 Google 的 Firebase 文档中的定期更新令牌
检测令牌无效
当向带有无效设备令牌的 FCM v1 端点发送消息时,Amazon SNS 将收到以下例外情况之一:
-
UNREGISTERED
(HTTP 404)– 当 Amazon SNS 收到此异常时,您将收到一个传输失败事件,该事件的FailureType
为InvalidPlatformToken
,且FailureMessage
为与端点关联的平台令牌无效。当传送失败时,Amazon SNS 将禁用您的平台端点,但有此例外情况。 -
INVALID_ARGUMENT
(HTTP 400)– 当 Amazon SNS 收到此异常时,这意味着设备令牌或消息有效载荷无效。有关更多信息,请参阅ErrorCode谷歌的 Firebase 文档。
由于在这两种情况下都可以返回 INVALID_ARGUMENT
,因此 Amazon SNS 将返回 InvalidNotification
FailureType
以及通知正文无效 FailureMessage
。当您收到此错误时,请验证您的有效载荷是否正确。如果正确,请验证设备令牌是否正确 up-to-date。当传送失败时,Amazon SNS 不会禁用您的平台端点,但有此例外情况。
您会遇到 InvalidPlatformToken
传送失败事件的另一种情况是,注册的设备令牌不属于尝试发送该消息的应用程序。在这种情况下,Google 将返回 SENDER_ID_MISMATCH 错误。当传送失败时,Amazon SNS 将禁用您的平台端点,但有此例外情况。
当您为应用程序设置交付状态日志 CloudWatch时,可以查看从 FCM v1 API 收到的所有观察到的错误代码。
要接收应用程序的传送事件,请参阅可用应用程序事件。
移除过时令牌
一旦向端点设备传送消息开始失败,令牌就会被视为过时。Amazon SNS 将这些过时令牌设置为您的平台应用程序的禁用端点。当您向已禁用的端点发布内容时,Amazon SNS 将返回一个 EventDeliveryFailure
事件,该事件的 FailureType
为 EndpointDisabled
,FailureMessage
为端点处于禁用状态。要接收应用程序的传送事件,请参阅可用应用程序事件。
当您收到来自 Amazon SNS 的此错误时,您需要移除或更新平台应用程序中的过时令牌。