共计 5312 个字符,预计需要花费 14 分钟才能阅读完成。
在谈音讯推送款式之前,先来说说音讯推送。
什么是音讯推送?
简而言之,就是你的 app 被动向用户推送音讯。在竞争日益强烈的利用市场,灵活运用音讯推送,对用户增长、促活和留存有很大的促进作用。
音讯推送在不同推送类型中有不同的价值体现。
产品性能类推送
零碎音讯告诉:社交属性的 app 中的关注、赞评转互动音讯推送;购物 app 中物流信息告诉等……
资讯流动告诉:新闻媒体 app 的时效性讯息推送、游戏和常识等 app 的节假日流动、福利促销信息推送等……
用户经营类推送
缄默用户唤醒:用被动涉及用户的音讯推送形式唤醒缄默用户。
进步用户沉闷:联合福利流动等信息的推送,进步用户的沉闷。
音讯推送预期成果的实现,须要推送内容、推送款式以及工夫节奏的完满联合。明天咱们将详解华为推送服务所提供的 8 种音讯推送款式及其实现办法,为你的利用用户增长和沉闷助力。
华为推送服务(Push Kit)是华为提供的音讯推送平台,建设了从云端到终端的音讯推送通道。通过集成推送服务能够实时推送音讯到用户终端,构筑良好的用户关系,晋升用户的感知度和活跃度。
Push Kit 以后反对多种文本款式,Inbox 款式,按钮款式以及自定义图标等款式。你可定义极具个性化的音讯来吸引用户。本文通过简略的代码和成果展现,帮忙你疾速理解并上手华为 Push 音讯。
音讯款式介绍
首先,借助官网开发文档给出的示例,介绍告诉栏音讯的构造。
从上图能够看出,告诉栏音讯从上到下顺次蕴含音讯小图标、利用名称、音讯摘要、音讯达到工夫、题目、内容等局部。这其中,除了利用名称,其余因素独特形成了告诉栏音讯自定义款式。
作为各种款式的比照,首先给大家展现最根本的告诉栏音讯款式:
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "简要形容音讯的内容,自由发挥啦",
"click_action": {"type": 3},
"title": "这里是音讯题目"
}
},
"token": ["xxx"]
}
}
阐明:一条告诉栏音讯,至多须要蕴含以上字段,否则无奈发送。
上面,别离给大家解说各个款式自定义的形式。
1)自定义音讯小图标
Push Kit 提供了两种设置告诉栏音讯小图标的办法:
通过服务端 API 发送上行音讯携带“icon”字段,图标文件必须寄存在利用的 /res/raw 门路下,例如“res/raw/ic_launcher”,对应利用本地的“/res/raw/ic_launcher.xxx”
文件。{
"android": {
"notification": {
"body": "没错,音讯小图标能够自定义哦",
"click_action": {"type": 3},
"icon": "/raw/custom_notification_icon",
"title": "快看左上角小图标"
}
},
"token": ["xxx"]
}
通过利用的“AndroidManifest.xml”文件增加 meta-data 元数据来实现,参考代码如下:
<meta-data
android:name="com.huawei.messaging.default_notification_icon"
android:resource="@drawable/ic_push_notification" />
其中,meta-data 元数据“name”不可扭转,“resource”指定的资源图标由您指定,须要在利用的“res/drawable”目录下。
剖析:比照两种办法,办法 1 更加灵便,只须要提前把小图标预置在客户端,服务端就能够依据须要应用不同的小图标。
2)自定义音讯摘要
音讯摘要展现在利用名右侧,用于简要形容音讯的内容。通过服务端 API 中的“notify_summary”字段进行设置。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "简要形容音讯的内容,自由发挥啦",
"click_action": {"type": 3},
"notify_summary": "这里是摘要局部……",
"title": "这里是音讯题目",
}
},
"token": ["xxx"]
}
}
3)自定义音讯达到工夫(仅用于展现)
华为 Push 服务器一旦接管到开发者的音讯推送申请,就会立刻解决并发送给用户。因而,音讯理论达到用户手机的工夫是无奈自定义的。然而,服务端 API 提供了用于告诉栏音讯展现、排序的自定义工夫字段“when”。开发者一旦指定此参数,用户告诉栏的音讯将依据此工夫进行展现和排序。
上图的测试中,两条音讯都是在 10 点左右发送并收到的,且上方音讯发送工夫早于下方音讯。如果没有设置“when”字段,图片音讯应该展现在上面。然而因为下方音讯发送时应用“when”字段指定展现工夫为 ”2021-04-29T01:26:23.045123456Z”。因而,理论在用户手机上排序展现时,下方音讯展现了“when”字段设置的工夫。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "简要形容音讯的内容,自由发挥啦",
"click_action": {"type": 3},
"title": "这里是音讯题目",
"when": "2021-04-29T01:26:23.045123456Z"
}
},
"token": ["xxx"]
}
}
阐明:此参数应用 UTC 工夫,且必须小于以后工夫。
4)自定义音讯按钮
告诉栏音讯反对增加多个按钮,点击按钮能够触发相应的动作。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "推送音讯底部可增加多个按钮,点击按钮能够登程相应的动作",
"buttons": [{
"action_type": 0,
"name": "理解更多"
}, {
"action_type": 3,
"name": "任性漠视"
}],
"click_action": {"type": 3},
"title": "震惊!这个推送款式你必须理解"
}
},
"token": ["xxx"]
}
}
阐明:按钮动作类型:0:关上利用首页,1:关上利用自定义页面,2:关上指定的网页,3:革除告诉,4:华为分享性能;
“name”字段的值如果为英文,告诉音讯展现时按钮名字会以全大写字母展现。
上述音讯,扭转的次要是部分款式,不波及音讯的 title 和 body 字段。这些款式能够随便搭配应用,相互之间不影响。
上面介绍的 3 种款式,因为波及 title 和 body 字段,因而相互之间存在一些影响,调用服务端 API 时不倡议同时应用。
5)大文本款式
晚期版本推送服务,默认款式下仅反对单行文本,单行文本反对的字数太少,会有表白不全的缺点。大文本款式反对题目单行,内容文字多行(以后 EMUI 9 零碎限度最多显示 12 行中文或者 14 行英文,EMUI 10&11 零碎限度最多显示 11 行中文或者 13 行英文)。大文本开展后成果如下:
{
"validate_only": false,
"message": {
"android": {
"notification": {
"big_body": "大文本款式反对题目单行,内容文字多行。以后 EMUI 9 零碎限度最多显示 12 行中文或者 14 行英文,EMUI 10&11 零碎限度最多显示 11 行中文或者 13 行英文。",
"big_title": "这里是大文本音讯题目",
"body": "简要形容音讯的内容,自由发挥啦",
"click_action": {"type": 3},
"style":1,
"title": "这里是音讯题目"
}
},
"token": ["xxx"]
}
}
阐明
EMUI 9:大文本开展之前显示的题目与内容取自“title”与“body”字段,非“big_title”与“big_body”字段的内容。
EMUI 10:大文本开展之前显示的题目取自“title”字段,内容取自“big_body”字段。
6)Inbox 款式
此款式也能够展现多行文本,然而不同于大文本款式,Inbox 款式将每行内容都当作独立的单行文本去展现。文本内容最多可展现 5 行,每行内容展现不了时后边主动增加“…”。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "简要形容音讯的内容,自由发挥啦",
"click_action": {"type": 3},
"inbox_content": ["1. 首先你须要找到一头大象","2. 好吃好喝把大象骗到冰箱旁","3. 关上冰箱门","4. 把大象塞进冰箱","5. 关上冰箱门"],
"style": 3,
"title": "这里是音讯题目"
}
},
"token": ["xxx"]
}
}
总结:
7)音讯本地化展现
告诉音讯本地化又能够了解为国际化多语言展现,指的是告诉音讯能够依据手机本地语言变动展现对应语言的题目和内容,从而笼罩本音讯中一般的题目和内容。
Push Kit 提供了两种音讯本地化展现的办法:
齐全通过服务端提供的 REST API 接口实现;
{
"validate_only": false,
"message": {
"android": {
"notification": {
"body": "bbb",
"body_loc_args": ["Jack"],
"body_loc_key": "body_key",
"click_action": {"type": 3},
"multi_lang_key": {
"title_key": {
"en": "New Friend Request From %s",
"zh": "来自 %s 的好友申请"
},
"body_key": {
"en": "My name is %s.",
"zh": "我叫 %s。"
}
},
"title": "ttt",
"title_loc_args": ["Shanghai"],
"title_loc_key": "title_key"
}
},
"token": ["xxx"]
}
}
阐明:
1、“title_loc_key”、“body_loc_key”字段别离对应“multi_lang_key”中相干字段的名称;
2、“title_loc_args”、“body_loc_args”字段的值都是一个可变的字符串数组,用于填充对应字段的值中的占位符 %s;
3、“multi_lang_key”字段以后最多反对配置三种语言。
服务端 REST API 与利用本地的字符串资源文件“strings.xml”配合实现。
{
"validate_only": false,
"message": {
"android": {
"notification": {
"title": "ttt",
"body": "bbb",
"body_loc_args": ["Jack", "Shanghai"],
"body_loc_key": "body_key",
"click_action": {"type": 3},
"title_loc_key": "title_key"
}
},
"token": ["xxx"]
}
}
在 Android 资源文件“/res/values/strings.xml”中定义字符串资源。
反对占位符,% 前面是占位符的地位,从 1 开始,$ 前面是填充数据的类型。
反对多语言,比方“/res/values-en/strings.xml”进行英语本地化适配。
<string name="title_key">New Friend Request</string>
<string name="body_key">My name is %1$s, I am from %2$s.</string>
在 App 中增加代码,动静获取可变字符串,并对资源节点进行字符串格式化,填充内容到占位符中。
public class DemoHmsMessageService extends HmsMessageService {
@Override
public void onMessageReceived(RemoteMessage message) {String[] bodyArrays = message.getNotification().getBodyLocalizationArgs();
// 获取内容并进行格式化
String key = getResources().getString(R.string.body_key);
String body = String.format(key, bodyArrays[0], bodyArrays[1]);
Log.i(TAG, body);
}
}
剖析:比照 2 种办法,办法 1 应用灵便,不须要革新客户端代码。然而办法 2 能够同时反对更多的语言,实用于全球化水平更高的利用。
拜访华为开发者联盟官网,理解更多相干内容
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee
原文链接:https://developer.huawei.com/…
原作者:胡椒