云端打包时,提示未添加push模块
推送消息类型
通常推送消息分以下两种类型:
-
通知栏消息(推送通知)
UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。 -
透传消息
即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
使用5+ API处理推送消息
uni-app应用中使用推送服务参考:http://ask.dcloud.net.cn/article/35726。
获取APP终端标识
在应用安装后第一次运行时应该调用5+ API的plus.push.getClientInfo方法获取客户端标识,并将此标识提交到开发者的业务服务器进行注册设备,以便在用户登录时可绑定设备,实现向登录用户推送专属消息。
示例代码如下:
document.addEventListener('plusready', function(){
// 页面加载时触发
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid;//客户端标识
}, false );
如果获取的cid为空,说明客户端向推送服务器注册还未完成,可以使用setTimeout延时重试。
监听推送消息事件
通常在应用入口页面(首页)中调用5+ API的plus.push.addEventListener方法监听消息事件,在回调函数中处理消息的响应业务逻辑,如下示例:
//监听系统通知栏消息点击事件
plus.push.addEventListener('click', function(msg){
//处理点击消息的业务逻辑代码
}, false);
//监听接收透传消息事件
plus.push.addEventListener('receive', function(msg){
//处理透传消息的业务逻辑代码
}, false);
启动回调函数的参数msg为PushMessage对象,保存消息的标题(title)、内容(content)、自定义数据(payload)等。
推送消息包括以下事件类型:
- click
用户点击系统通知栏中的消息,APP启动或者激活到前台运行,触发click事件。 - receive
客户端接收到透传消息时(在系统通知栏中不显示消息),触发receive事件。
注意:特殊情况
- Android平台
推送服务器下发的透传消息符合以下json格式:{title:"标题",content:"内容",payload:"自定义数据"}
时,会作为普通推送通知处理,在系统通知栏创建消息,点击消息激活APP触发"click"事件。
- iOS平台
如果应用在前台运行,并且监听了"receive"事件,此时接收到APNs通道下发的消息时,会触发"receive"事件。此时可在回调的参数PushMessage对象中获取aps属性值来判断是否是APNs下发的消息。// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else { //其它情况接收消息 } //其它逻辑 }, false );
通知栏消息操作
5+ Push模块还提供一系列API操作系统通知栏,解决比较少见的业务场景需求。
-
清空消息
5+ API提供[plus.push.clear]()方法可用于清空系统通知栏中属于当前应用的所有消息,示例代码如下:plus.push.clear();
-
创建本地消息
开发者在业务逻辑中如需创建本地消息可以调用plus.push.createMessage接口,可以指定消息的标题,显示消息的时间或者使用延迟时间。
示例代码如下: -
var options = {cover:false}; var str = dateToStr(new Date()); str += ": 欢迎使用Html5 Plus创建本地消息!"; plus.push.createMessage(str, "LocalMSG", options);
-
// 监听在线消息事件 plus.push.addEventListener( "receive", function( msg ) { if ( msg.aps ) { // Apple APNS message //APNS下发的消息,应用在前台 } else if ( 'LocalMSG' == msg.payload ) { // 特殊payload标识本地创建的消息 //本地创建的消息,通常不需要处理 //注意:不要在这种情况下再此调用plus.push.createMessage,从而引起循环创建本地消息 } else { //接收到在线透传消息 } //其它逻辑 }, false );
-
获取所有消息
可以调用plus.push.getAllMessage获取系统通知栏中属于当前应用的所有消息,示例代码如下: -
var msgs = plus.push.getAllMessage(); for(var i in msgs){ var msg = msgs[i]; console.log( i+": "+msg.title+" - "+msg.content ); }
-
iOS平台不支持获取系统通知栏消息,返回空数组。
解决方案:
- 若没有用到,找到manifest 文件,删掉push{}
- 若删掉push还是会提示未添加push模块,搜索以上关于plus.push相关的方法、对象、权限等。(HTML5+ API Reference)
- 只要用到就需要push模块。