Amazon Simple Notification Service
开发人员指南 (API Version 2010-03-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

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

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

下面列出您在使用 AWS SDK 或查询 API 时可以设置的推送通知服务 TTL 消息属性:

推送通知服务 TTL 消息属性
Amazon Device Messaging (ADM) AWS.SNS.MOBILE.ADM.TTL
Apple Push Notification Service (APNS) AWS.SNS.MOBILE.APNS.TTL
Apple Push Notification Service 沙盒 (APNS_SANDBOX) AWS.SNS.MOBILE.APNS_SANDBOX.TTL
Baidu Cloud Push (Baidu) AWS.SNS.MOBILE.BAIDU.TTL
Google Cloud Messaging for Android (GCM) AWS.SNS.MOBILE.GCM.TTL
Windows Push Notification Services (WNS) AWS.SNS.MOBILE.WNS.TTL

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

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

如果您为推送通知消息指定了 TTL,则 TTL 的值肯定是正整数,除非 0 值对该推送通知服务(如 APNS 和 GCM)有特定的含义。如果 TTL 值设为 0,但该推送通知服务对 0 无具体意义,则 Amazon SNS 将丢弃该消息。有关使用 APNS 时设置为 0 的 TTL 参数的更多信息,请参阅 Binary Provider API 文档中的 Table A-3 Item identifiers for remote notifications。有关在使用 GCM 时设为 0 的 TTL 参数的详细信息,请参阅信息使用期限

决定 TTL 的优先顺序

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

  1. 消息属性 TTL

  2. 消息正文 TTL

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

  4. Amazon SNS 默认 TTL(4 周)

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

使用 AWS 管理控制台 指定 TTL

您可以使用 AWS 管理控制台 来指定 TTL。

  1. 通过以下网址登录 AWS 管理控制台 并打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

  2. 在左侧 Navigation (导航) 窗格中单击 Apps (应用),然后单击包含(要在发布消息时为其设置 TTL 的)终端节点的应用。

  3. 选择要将消息发布到的终端节点,然后依次单击 Endpoint Actions (终端节点操作)Publish (发布)

  4. Publish (发布) 对话框中输入Time to Live (TTL) (生存时间 (TTL)) 秒数,然后单击 Publish Message (发布消息)

使用 AWS SDK 指定 TTL

AWS SDK 提供了多种语言的 API,以便将 TTL 用于 Amazon SNS。

有关 适用于 Java 的开发工具包 的更多信息,请参阅 AWS SDK for Java 入门

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

Copy
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-1:999999999999:endpoint/BAIDU/TestApp/318fc7b3-bc53-3d63-ac42-e359468ac730"); PublishResult publishResult = snsClient.publish(publishRequest);

想要了解更多有关与 Amazon SNS 一起使用消息属性的信息,请参阅 使用 Amazon SNS 消息属性