最近做的app中使用到了推送,就直接使用官方集成的个推,然后按照官方案例看了一遍又一遍,写了一遍又一遍,app打包了一遍又一遍,终于算是弄好了安卓版,ios版还没弄呢。现在把一些踩过的坑跟大家分享下,主要是在问答里实在是找不到答案啊!
我使用的是最新的mui(3.2)、hbuilder(7.3.2.201607212211)。
我先描述下,我要求的推送效果:app不管在线还是离线,系统通知栏中都显示消息,点击消息按照消息里的要求打开指定页面显示内容。接下来我一步一步分析下。
1、注册个推,填写appid等,这就不说了;确保安卓系统中app的push进程没有被安全软件杀死。
2、推送模板:个推的模板有好几个,为了能给安卓和ios都能推送,只能选择透传消息模板。
3、透传消息模板又分成标准数据和非标准数据,标准数据格式为:{title:'标题',content:'内容',payload:'数据'},非标准就是不按这个标准格式来的^_^。那到底选择哪个呢?这个是我踩得最惨的坑!!!按官方文档,标准格式会在通知栏里显示消息,点击消息后触发‘click’事件,可是经过我测试,点击消息后根本不触发‘click’事件!重要的事情说三遍:标准格式点击消息后不触发‘click’事件!标准格式点击消息后不触发‘click’事件!标准格式点击消息后不触发‘click’事件!不知道这个标准格式不触发‘click’事件是bug还是原本就这样??!!我后来尝试了非标准格式,在‘receive’里接受透传数据,然后创建本地消息(plus.push.createMessage),系统通知栏能正常显示消息,点击后顺利触发‘click’事件,但是当app不在线(就是被关闭了,push进程还在),receive事件就不执行了,自然就不能创建系统通知了。所以为了实现我最初要的推送效果,我只能选择标准透传数据模板。
4、如何获得透传数据?刚才我说过标准格式不触发‘click’事件,那怎么获得透传数据,并打开我们指定的页面呢?这里需要使用到app的启动参数plus.runtime.arguments。如果app是启动状态,不管前台还是后台,都可以用新意图事件来获得启动参数,如果app是未启动状态,可以在plusReady里获得启动参数。直接上代码
mui.plusReady(function() {
//仅支持竖屏显示
plus.screen.lockOrientation("portrait-primary");
document.addEventListener("newintent", function() {
openWebviewFromOthers();
});
plus.push.addEventListener("click", function(msg) {
console.log("push click");
pushGetRun(msg.payload);
}, false);
plus.push.addEventListener("receive", function(msg) {
//获取透传数据
var data = JSON.parse(msg.payload);
//创建本地消息
//plus.push.createMessage(data.content, data.payload, {
// title: data.title,
// cover: false
//});
}, false);
openWebviewFromOthers();
});
function pushGetRun(payload) {
payload = JSON.parse(payload);
var id = payload.id;
var autoShow = payload.autoshow;
var event = payload.event;
var params = JSON.stringify(payload.params);
......//用参数打开指定页面
}
//获取通知栏(app未启动)点击、第三方程序启动本app
function openWebviewFromOthers() {
var args = plus.runtime.arguments;
if(args) {
pushGetRun(args);
}
}
此代码仅是我个人最近尝试的结果,仅针对安卓版本,如果有误请指正。
54 个评论
要回复文章请先登录或注册
9***@qq.com
8***@qq.com
lshiyou
天空微算
4***@qq.com
thirteenth
1***@qq.com
m***@worldflying.cn
我是好人
2***@qq.com