针对平台特定的有效负载发布 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

针对平台特定的有效负载发布

您可以使用Amazon Web Services Management Console或 Amazon SNS API 将自定义消息以及平台特定的负载发送到移动设备。有关使用 Amazon SNS API 的信息,请参阅。移动推送 API 操作SNSMobilePush.java中的文件snsmobilepush.zip

发送 JSON 格式化的消息

在发送平台特定的负载时,数据必须格式化为 JSON 键-值对字符串(用引号进行转义)。

以下示例显示 FCM 平台的自定义消息。

{ "GCM":"{ \"notification\": { \"body\": \"Sample message for Android endpoints\", \"title\":\"TitleTest\" } }" }

发送平台特定的消息

除了以键-值对形式发送自定义数据之外,您还可以发送平台特定的键-值对。

以下示例显示如何包含 FCM 参数time_to_livecollapse_keyFCM 中的自定义数据键-值对之后data参数。

{ "GCM":"{ \"notification\": { \"body\": \"Sample message for Android endpoints\", \"title\":\"TitleTest\" }, \"data\": {\"time_to_live\": 3600,\"collapse_key\":\"deals\"}" } }

有关 Amazon SNS 支持的每个推送通知服务所支持的键-值对列表,请参阅以下内容:

在多个平台上向应用程序发送消息

要为多个平台(如 FCM 和 APN)向设备上安装的应用程序发送消息,必须先使移动终端节点订阅 Amazon SNS 中的某个主题,然后向该主题发布消息。

以下示例显示在 APN、FCM 和 ADM 上发送给已订阅的移动终端节点的消息。

{ "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for one of the notification platforms.", "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }", "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}", "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" }

将消息作为警报或后台通知发送到 APNs

Amazon SNS 可以将消息发送到 APN 作为alert或者background通知(有关更多信息,请参阅将后台更新推送到您的应用在 APN 文档中)。

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的alertAPN 通知通过显示警告消息、播放声音或向应用程序的图标添加徽章来通知用户。

  • AbackgroundAPN 通知将唤醒或指示应用程序根据通知的内容进行操作,而不通知用户。

指定自定义 APN 标头值

我们建议为AWS.SNS.MOBILE.APNS.PUSH_TYPE 预留的消息属性使用 Amazon SNS 主题PublishAPI 操作,Amazon软件开发工具包或Amazon CLI。以下 CLI 示例为指定的主题将 content-available 设置为 1 并将 apns-push-type 设置为 background

aws sns publish \ --endpoint-url https://sns.us-east-1.amazonaws.com \ --target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \ --message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \ --message-attributes '{ \ "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \ "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"10"}}', \ "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"} \ --message-structure json

从负载推断 APNs 推送类型标头

如果您不设置apns-push-typeAPN 标头,Amazon SNS 将标题设置为alert或者background这取决于content-available键中的键apsJSON 格式的 APN 有效负载配置的字典。

注意

Amazon SNS 只能推断alert或者background标头,尽管apns-push-type标头设置为其他值。

  • apns-push-type 设置为 alert

    • 如果 aps 字典包含设置为 1content-available一个或多个触发用户交互的键。

    • 如果 aps 字典包含设置为 0content-available 如果 content-available 密钥不存在。

    • 如果 content-available 键的值不是整数或布尔值。

  • apns-push-type 设置为 background

    • 如果 aps 字典包含设置为 1content-available 且不包含触发用户交互的其他键

      重要

      如果 Amazon SNS 发送 APN 的原始配置对象以作为仅后台通知,则必须包括content-available设置为1中的aps词典。尽管您可以包含自定义键,但 aps 字典不得包含触发用户交互的任何键(例如,警报、徽章或声音)。

下面是一个示例原始配置对象。

{ "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"\Bar\",\"Foo2\":123}" }

在此示例中,Amazon SNS 将apns-push-type邮件的 APN 标头background。当 Amazon SNS 检测到apn词典包含content-available键设置为1-并且不包含任何其他可触发用户交互的键-它将标题设置为background