使用 Amazon SNS 生存时间 (TTTTTTTTTTTTTL) 消息属性进行移动推送通知 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Amazon SNS 生存时间 (TTTTTTTTTTTTTL) 消息属性进行移动推送通知

Amazon Simple Notification Service (Amazon SNS) 提供设置生存时间 (TTTL)消息属性。这不同于在移动推送通知服务的 Amazon SNS 消息正文中设置 TTL(如果该推送通知服务支持的话)的功能,如 Amazon SNS 消息正文中的 TTL(如 Amazon Device Messaging (FCM) 和 Firebase Cloud Messaging (FCM)。

TTL 消息属性用于指定有关消息的过期元数据。这允许您指定推送通知服务(如 Apple Push Notification Service (APN) 或 FCM)必须在多长的时间内将消息传送至终端节点。如果因为某种原因(如移动设备已关闭),消息无法在指定的 TTL 内传达,则系统将丢弃该消息,且不再尝试传送它。要在消息属性中指定 TTTL,您可以使用Amazon Web Services Management Console、Amazon软件开发工具包 (SDK) 或查询 API。

推送通知服务的 TTL 消息属性

以下列出推送通知服务 TTL 消息属性(您可以在使用Amazon软件开发工具包或查询 API:

推送通知服务 TTL 消息属性
Amazon Device Messaging (ADM) AWS.SNS.MOBILE.ADM.TTL
Apple Push Notification Service (APN) AWS.SNS.MOBILE.APNS.TTL
Apple Push Notification Service 沙盒 (APNS_Sandbox) AWS.SNS.MOBILE.APNS_SANDBOX.TTL
百度云推送 (百度) AWS.SNS.MOBILE.BAIDU.TTL
Firebase Cloud Messaging (FCM) AWS.SNS.MOBILE.FCM.TTL
Windows 推送通知服务 (WNS) AWS.SNS.MOBILE.WNS.TTL

每个推送通知服务以不同的方式处理 TTL。Amazon SNS 提供涵盖所有推送通知服务的 TTL 抽象视图,使您能够更方便地指定 TTL。当您使用Amazon Web Services Management Console指定 TTL(以秒为单位),您只需输入 TTL 值一次,就会自动计算在发布该消息时各种选定推送通知服务的 TTL。

TTL 是相对于发布时间的。在将推送通知消息转交给特定的推送通知服务之前,Amazon SNS 会计算该推送通知的停留时间(发布时间戳与将消息转交给推送通知服务之间的时间差),并将剩余的 TTL 传递给特定的推送通知。服务。如果 TTTTTTTTL 短于停留时间,Amazon SNS 不会尝试发布。

如果为推送通知消息指定 TTL,则 TTL 值必须为正整数,除非0对推送通知服务具有特定含义,例如使用 APN 和 FCM。如果 TTL 值设置为0,并且推送通知服务对于0,那么 Amazon SNS 将丢弃该消息。有关 TTL 参数设为0使用 APN 时,请参阅表 A-3 远程通知的项目标识符中的二进制提供程序 API文档中)。

决定 TTL 的优先顺序

Amazon SNS 根据以下顺序来决定推送通知消息的 TTL,数字越小,优先级越高:

  1. 消息属性 TTL

  2. 消息正文 TTL

  3. 推送通知服务默认 TTL(随服务而变)

  4. Amazon SNS 默认 TTL(4 周)

如果您为同一条消息设置了不同的 TTL 值(分别是消息属性和消息正文的 TTL),Amazon SNS 将修改消息正文中的 TTL,以匹配消息属性中指定的 TTL。

使用 Amazon Web Services Management Console指定 TTL

  1. 登录到Amazon SNS 控制台

  2. 在导航面板中,选择移动推送通知

  3. Mobile push notifications (移动推送通知) 页面上的平台应用程序部分中,选择应用程序。

  4. 我的应用程序页面上的终端节点部分中,选择应用程序终端节点,然后选择发布消息

  5. 消息详细信息部分中,输入 TTL(推送通知服务必须向终端节点发送消息的秒数)。

  6. 选择发布消息

使用 Amazon SDK 指定 TTL

这些区域有:Amazon软件开发工具包提供了多种语言的 API,以便将 TTTL 用于 Amazon SNS。

有关 SDK for Java 的更多信息,请参阅。入门Amazon SDK for Java

以下 Java 示例说明如何配置 TTL 消息属性和向终端节点(在本例中是向百度 Cloud Push Push 注册的)发布消息:

Map<String, MessageAttributeValue> messageAttributes = new HashMap<String, MessageAttributeValue>(); // Insert your desired value (in seconds) of TTL here. For example, a TTL of 1 day would be 86,400 seconds. messageAttributes.put("AWS.SNS.MOBILE.BAIDU.TTL", new MessageAttributeValue().withDataType("String").withStringValue("86400")); PublishRequest publishRequest = new PublishRequest(); publishRequest.setMessageAttributes(messageAttributes); String message = "{\"title\":\"Test_Title\",\"description\":\"Test_Description\"}"; publishRequest.setMessage(message); publishRequest.setMessageStructure("json"); publishRequest.setTargetArn("arn:aws:sns:us-east-2:999999999999:endpoint/BAIDU/TestApp/318fc7b3-bc53-3d63-ac42-e359468ac730"); PublishResult publishResult = snsClient.publish(publishRequest);

有关将消息属性与 Amazon SNS 结合使用的更多信息,请参阅Amazon SNS 消息属性