在谈音讯推送款式之前,先来说说音讯推送。

什么是音讯推送?

简而言之,就是你的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/...
原作者:胡椒