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

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

使用特定于平台的负载发布

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

发送 JSON 格式化的消息

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

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

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

发送静默通知消息

如果您要将消息作为静默通知发送,则需要在 JSON 格式的消息中将 content_available 属性设置为 true

下面的示例显示 FCM 平台的静默通知消息。

{ "GCM": "{ \"notification\": {\"content_available\": true }, \"data\": { \"body\": \"Sample message for Android or iOS endpoints\", \"title\": \"Hello world\"}}" }

发送平台特定的消息

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

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

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

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

重要

亚马逊 SNS 现在支持 Firebase 云消息 (FCM) HTTP V1 API,用于向安卓设备发送移动推送通知。从 2024 年 3 月 15 日起,亚马逊 SNS 将支持通过 FCM HTTP V1 API 向苹果设备或网络推送目的地发送通知。

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

要为多个平台(如 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\"} }", "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 可以将消息发送到 APNs 作为 alertbackground 通知(有关更多信息,请参阅 APNs 文档中的将后台更新推送到您的应用程序)。

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

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

指定自定义 APNs 标头值

我们建议使用 Amazon SNS Publish API 操作、Amazon 开发工具包或 Amazon 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.PUSH_TYPE":{"DataType":"String","StringValue":"background"} \ "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}', \ --message-structure json

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

如果您没有设置 apns-push-type APNs 标头,Amazon SNS 将标头设置为 alertbackground,具体取决于 JSON 格式的 APNs 有效负载配置的 aps 字典中的 content-available 键。

注意

Amazon SNS 只能推断 backgroundalert 标头,尽管 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