ADM消息类型
Amazon Device Messaging (ADM)提供推送通知(消息),可用于在用户设备上显示有关应用的消息。在开始使用ADM消息之前,请确保已将应用与ADM集成。
消息类型
在ADM中,消息是开发者应用和开发者服务器之间的通信。ADM提供三种类型的消息,如下表所述。
ADM消息类型 | 描述 | 示例用例 |
---|---|---|
数据消息 | 由应用处理并由自定义键值对定义的消息。 | 如果要使用自定义逻辑处理消息,请使用数据消息。例如,可以使用数据消息向应用的后台任务发送消息。 |
通知消息 | 由ADM SDK处理并由预设键值对定义的消息。 | 将通知消息用于自动向用户显示的消息,例如促销优惠或营销通知。 |
数据消息和通知消息 | 其中也包含自定义键值对的数据消息有效负载的通知消息。 | 如果要自动显示用户可以对其采取操作的消息,请使用数据消息和通知消息。例如,您可以发送一条消息,说明用户购物车中的商品有促销优惠。用户点触该消息后,会跳转到需要促销代码的页面。关于优惠的消息是通知消息,而需要促销代码的第二页是具有自定义逻辑的数据消息。 |
有关每种消息类型的详细信息,请参阅以下各节。
数据消息
数据消息是使用自定义逻辑创建并使用ADM传递给设备的ADM消息。您需要在应用中配置这些通知的逻辑。以下是数据
消息的消息负载示例:
{
"data":
{
"key1":"value1",
"key2":"value2"
},
"consolidationKey":"一些键",
"expiresAfter":86400
}
有关更多详细信息,请参阅发送消息。
通知消息
ADM通知是ADM发送到用户设备的消息。ADM SDK代表您处理消息并发送通知。
要以编程方式发送通知消息,请设置通知
键并添加用户可见消息的键值对。例如,您可以设置诸如“我们为您提供了最新优惠!”之类的通知消息,具体方式如下:
{
"notification":
{
"title":"ADM消息通知",
"body":"我们为您提供了最新优惠!"
}
"expiresAfter":86400
}
通知消息需要使用预定义的键值对。下表列出了ADM通知支持的键值对。
字段 | 类型 | 描述 |
---|---|---|
title |
字符串 |
通知的标题。 |
body |
字符串 |
通知的正文文本。 |
icon |
字符串 |
通知的图标。将可绘制对象资源myicon的通知图标设置为myicon。如果您没有在请求中发送此密钥,则显示应用清单中指定的启动器图标。 |
color |
字符串 |
通知的图标颜色,以#rrggbb格式表示。 |
sound |
字符串 |
设备收到通知时播放的声音。支持“默认”或应用中绑定的声音资源文件名。声音文件必须位于/res/raw/。 |
tag |
字符串 |
用于替换通知抽屉中现有通知的标识符。如果未指定,则每个请求会创建一条新通知。如果已指定且已显示带有相同标记的通知,则新通知将替换通知抽屉中的现有通知。 |
click_action |
字符串 |
与用户点击通知相关联的操作。如果指定,则用户点击通知后,会启动带有匹配意图筛选条件的活动。 |
body_loc_key |
字符串 |
应用字符串资源中正文字符串的键,用于将正文文本本地化为用户当前本地化版本。 |
body_loc_args[] |
字符串 |
用于替换body_loc_key中格式说明符的变量字符串值,用于将正文文本本地化为用户的当前本地化版本。 |
title_loc_key |
字符串 |
应用字符串资源中标题字符串的键,用于将标题文本本地化为用户当前本地化版本。 |
title_loc_args[] |
字符串 |
用于替换title_loc_key中格式说明符的变量字符串值,用于将标题文本本地化为用户的当前本地化版本。 |
channel_id |
字符串 |
通知的渠道ID(Android O中的新增内容)。应用必须创建一个带有此渠道ID的渠道,才能收到带有此渠道ID的通知。如果您未在请求中发送此渠道ID,或者如果应用尚未创建所提供的渠道ID,则FCM会使用应用清单中指定的渠道ID。 |
ticker |
字符串 |
设置发送至无障碍服务的“ticker”文本。在先于API级别21 (Lollipop)的版本中,设置首次收到通知时状态栏中显示的文本。 |
sticky |
布尔值 |
如果设置为false或unset,则用户在面板中点击通知后,会自动关闭通知。如果设置为true,则即使在用户点击通知后,通知也会持续存在。 |
event_time |
字符串(时间戳格式) |
设置通知中事件发生的时间。面板中的通知按此时间排序。时间点用protobuf.Timestamp表示。RFC3339 UTC"Zulu"格式的时间戳,精确到纳秒。示例: "2014-10-02T15:01:23.045123456Z"。 |
local_only |
布尔值 |
设置此通知是否仅与当前设备相关。一些通知可以桥接到其他设备(如Wear OS手表)以进行远程显示。可以将此提示设置为建议不桥接此通知。 |
notification_priority |
枚举(通知优先级) |
设置此通知的相对优先级。优先级表示此通知应在多大程度上占用用户的注意力。在某些情况下,低优先级通知可能对用户隐藏,而高优先级通知可能会打断用户。在不同平台上设置相同优先级,效果可能略有不同。请注意,此优先级不同于AndroidMessagePriority。此优先级在消息送达后由客户端处理,而AndroidMessagePriority是一个FCM概念,可以控制消息送达时间。 |
default_sound |
布尔值 |
如果设置为true,则针对通知使用Android框架的默认声音。默认值在config.xml中指定。 |
visibility |
枚举(可见性) |
设置通知的Notification.visibility。 |
notification_count |
整数 |
设置此通知表示的项目数。可能显示为支持通知标志的启动器的通知标志计数。例如,如果您仅使用一条通知来表示多条新消息,但希望此处的计数表示新消息总数,那么这可能很有用。如果为零或未指定,则支持通知标志的系统会使用默认值,即每次收到新通知时,长按菜单上显示的数字将递增。 |
image |
字符串 |
包含将在通知中显示的图像的URL。如果存在,则它会覆盖google.firebase.fcm.v1.Notification.image。 |
有关如何定义消息负载的更多详细信息,请参阅发送消息。
数据消息和通知消息
您还可以通过配置通知
和数据
负载,从数据消息发送包含键值对的通知消息。在此场景中,ADM SDK处理通知消息,而数据消息负载由应用处理。
以下是带有通知和数据消息的消息负载示例:
{
"data":
{
"key1":"value1",
"key2":"value2"
},
"notification":
{
"title":"ADM消息通知",
"body":"我们为您提供了最新优惠!"
}
"expiresAfter":86400
}
消息行为
ADM SDK使用onMessage
方法处理消息。设备上ADM消息的行为取决于应用的状态(应用是在后台还是前台)。
对于数据消息和通知消息这两者,前台应用都会在设备接收到消息时接收相应的消息负载。后台应用在系统托盘中接收通知负载,并在用户点击通知时发送消息。
下表描述了基于应用状态的消息行为。
应用状态 | 通知消息 | 数据消息 | 数据消息和通知消息 |
---|---|---|---|
前台 | onMessage |
onMessage |
onMessage |
后台 | 系统托盘 | onMessage |
通知消息:系统托盘 数据信息:在意图的额外信息中 |
消息优先级
对于数据消息和通知消息这两者,有两种优先级状态:“普通”和“高”。“普通”是这两种消息类型的默认优先级。
当应用位于前台时,会立即向用户传递普通优先级消息。当设备处于低电耗模式时,普通消息的传递会延迟,直至应用出现在前台。
对于高优先级消息,ADM会尝试立即传递消息,而不考虑用户设备的状态如何。应用在一天内可接收的高优先级消息数量受到应用待机存储桶的限制。
可以使用priority
参数来设置消息优先级。以下是高优先级消息请求的示例:
{
"data":{"key1":"value1","key2":"value2"},
"priority":"high"
"expiresAfter":86400
}
有关更多详细信息,请参阅发送消息。
测试ADM集成
可以通过向设备发送测试通知来确认应用完成了ADM集成设置。有关更多信息,请参阅发送消息。
Last updated: 2022年6月8日