Amazon Simple Notification Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将自定义平台特定负载发送到移动设备

您可以使用 AWS 管理控制台或 Amazon SNS API 将自定义消息以及平台特定的负载发送到移动设备。有关使用 Amazon SNS API 的信息,请参阅使用 Amazon SNS 移动推送 APIsnsmobilepush.zip 中的 SNSMobilePush.java 文件。

发送 JSON 格式化的消息

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

下面的示例显示 FCM 平台的一条自定义消息。

{ "FCM":"{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" }

发送平台特定的消息

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

以下示例显示如何在 FCM data 参数中的自定义数据键-值对之后加入 FCM 参数 time_to_livecollapse_key

{ "FCM":"{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"},\"time_to_live\": 3600,\"collapse_key\":\"deals\"}" }

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

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

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

以下示例显示在 APNs、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\"} }", "FCM": "{\"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 可以将消息作为 alertbackground 通知发送到 APNs(有关更多信息,请参阅 APNs 文档中的将后台更新推送到您的应用程序

  • alert APNs 通知通过显示警告消息、播放声音或向应用程序的图标添加徽章来通知用户。

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

指定自定义 APNs 标头值

我们建议使用 Amazon SNS Publish API 操作、AWS 开发工具包或 AWS CLI 为AWS.SNS.MOBILE.APNS.PUSH_TYPE 保留消息属性指定自定义值。以下 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-type APNs 标头,Amazon SNS 将标头设置为 alertbackground,具体取决于 JSON 格式的 APNs 有效负载配置的 aps 字典中的 content-available 键。

注意

Amazon SNS 只能推断 alertbackground 标头,尽管 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 发送 APNs 的原始配置对象以作为仅后台通知,则必须在 aps 字典中包括设置为 1content-available。尽管您可以包含自定义键,但 aps 字典不得包含触发用户交互的任何键(例如,警报、徽章或声音)。

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

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

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