Firebase 云消息传递 (FCM) 端点管理 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Firebase 云消息传递 (FCM) 端点管理

管理和维护设备令牌

您可以按照以下步骤确保移动应用程序的推送通知的可送达性:

  1. 将所有设备令牌、相应的 Amazon SNS 终端节点 ARN 和时间戳存储在您的应用程序服务器上。

  2. 移除所有陈旧的令牌并删除相应的 Amazon SNS 终端节点 ARN。

应用程序首次启动后,您将收到该设备的设备令牌(也称为注册令牌)。此设备令牌由设备的操作系统创建,并与您的 FCM 应用程序相关联。收到此设备令牌后,您可以将其注册为 Amazon SNS 作为平台终端节点。我们建议您存储设备令牌、Amazon SNS 平台终端节点 ARN 和时间戳,方法是将它们保存到您的应用程序服务器或其他永久存储中。要设置您的 FCM 应用程序以检索和存储设备令牌,请参阅 Google 的 F irebase 文档中的检索和存储注册令牌

维护 up-to-date 代币很重要。在以下情况下,用户的设备令牌可能会发生变化:

  1. 移动应用程序将在新设备上恢复。

  2. 用户卸载或更新应用程序。

  3. 用户清除应用程序数据。

当您的设备令牌发生变化时,我们建议您使用新令牌更新相应的 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 收到此异常时,您将收到一个传送失败事件,且FailureMessageFailureType终端节点关联的 of 平台令牌无效。InvalidPlatformToken当传送失败时,Amazon SNS 将禁用您的平台终端节点,但有此例外情况。

  • INVALID_ARGUMENT(HTTP 400) — 当 Amazon SNS 收到此异常时,这意味着设备令牌或消息负载无效。有关更多信息,请参阅ErrorCode谷歌的 Firebase 文档。

由于在这两种情况下INVALID_ARGUMENT都可以退货,因此 Amazon SNS 将返回 o FailureType fInvalidNotification,而通知正文无效FailureMessage当您收到此错误时,请验证您的有效载荷是否正确。如果正确,请验证设备令牌是否正确 up-to-date。除此例外情况外,当交付失败时,Amazon SNS 不会禁用您的平台终端节点。

您会遇到InvalidPlatformToken传送失败事件的另一种情况是,注册的设备令牌不属于尝试发送该消息的应用程序。在这种情况下,谷歌将返回 SENDER_ID_ MISMATCH 错误。当传送失败时,Amazon SNS 将禁用您的平台终端节点,但有此例外情况。

当您为应用程序设置交付状态日志 CloudWatch时,可以查看从 FCM v1 API 收到的所有观察到的错误代码。

要接收应用程序的交付事件,请参阅可用应用程序事件

移除陈旧的代币

一旦向端点设备传送消息开始失败,令牌就会被视为过时。Amazon SNS 将这些陈旧的令牌设置为您的平台应用程序的禁用终端节点。当您向已禁用的终端节点发布内容时,Amazon SNS 将返回一个EventDeliveryFailure事件EndpointDisabledFailureTypeFailureMessage其中终端节点处于禁用状态。要接收应用程序的交付事件,请参阅可用应用程序事件

当您收到来自 Amazon SNS 的此错误时,您需要删除或更新平台应用程序中的陈旧令牌。