本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
发布带有特定平台有效负载的 Amazon SNS 通知
您可以使用 AWS Management Console 或 Amazon SNS APIs 向移动设备发送包含特定平台负载的自定义消息。有关使用 Amazon 的信息 SNSAPIs,请参阅移动推送API操作和中的SNSMobilePush.java
文件snsmobilepush.zip
。
主题
发送JSON格式化的消息
发送特定于平台的负载时,必须将数据格式化为JSON键值对字符串,并对引号进行转义。
以下示例显示了FCM平台的自定义消息。
{ "GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}" }
发送平台特定的消息
除了以键-值对形式发送自定义数据之外,您还可以发送平台特定的键-值对。
以下示例显示了在FCM参数中包含参数time_to_live
以及自定义数据键值对之collapse_key
后的情况。FCM data
{ "GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}" }
有关 Amazon 支持的每种推送通知服务支持的键值对的列表SNS,请参阅以下内容:
重要
亚马逊SNS现在支持 Firebase Cloud Messaging (FCM) HTTP v1,API用于向安卓设备发送移动推送通知。
2024 年 3 月 26 日 — 亚马逊SNS支持 FCM HTTP v1 API 适用于苹果设备和 Webpush 目的地。我们建议您在 2024 年 6 月 1 API 日当天或之前将现有的移动推送应用程序迁移到最新的 FCM HTTP v1,以避免应用程序中断。
-
APNs文档中的@@ 有效载荷密钥参考
-
文档中的 Firebase 云消息HTTP协议
FCM
在多个平台上向应用程序发送消息
要向安装在多个平台(例如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广告发送消息alert
或background
通知(有关更多信息,请参阅APNs文档中的向您的应用程序推送后台更新
-
alert
APNs通知通过显示警报消息、播放声音或在应用程序的图标上添加徽章来通知用户。 -
background
APNs通知会被唤醒或指示您的应用程序根据通知的内容采取行动,而不通知用户。
指定自定义 APNs 标头值
我们建议使用 Amazon SNS Publish
API 操作为AWS.SNS.MOBILE.APNS.PUSH_TYPE
保留消息属性指定自定义值 AWS SDKs,或 AWS CLI。以下CLI示例content-available
将指定主题的设置apns-push-type
background
为1
和为。
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
注意
确保JSON结构有效。在每个键值对后面添加一个逗号,最后一个键值对除外。
根据有效载荷APNs推断推送类型标头
如果您未设置apns-push-type
APNs标头,Amazon SNS 会background
根据您JSON格式的APNs负载配置aps
字典中的content-available
密钥将标头设置为alert
或依据。
注意
尽管background
标题可以设置为其他值,但亚马逊SNS只能alert
推断apns-push-type
标题。
-
apns-push-type
设置为alert
-
如果
aps
字典包含设置为1
的content-available
和一个或多个触发用户交互的键。 -
如果
aps
字典包含设置为0
的content-available
或如果content-available
密钥不存在。 -
如果
content-available
键的值不是整数或布尔值。
-
-
apns-push-type
设置为background
-
如果
aps
字典仅包含设置为1
的content-available
且不包含触发用户交互的其他键。重要
如果 Amazon SNS 将原始配置对象APNs作为仅限后台的通知发送,则您必须在字典
1
中包含content-available
set to。aps
尽管您可以包含自定义键,但aps
字典不得包含触发用户交互的任何键(例如,警报、徽章或声音)。
-
下面是一个示例原始配置对象。
{ "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}" }
在此示例中,Amazon SNS 将消息apns-push-type
APNs标题设置为background
。当 Amazon SNS 检测到apn
字典中包含设置为1
(且不包含任何其他可以触发用户交互的密钥)时,它会将标题设置为。content-available
background