蜡笔小鑫
蜡笔小鑫
  • 发布:2016-08-14 11:23
  • 更新:2022-01-17 20:11
  • 阅读:30711

推送使用中的各种坑

分类:HTML5+

最近做的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);  
        }  
}

此代码仅是我个人最近尝试的结果,仅针对安卓版本,如果有误请指正。

12 关注 分享
熬枯受淡 中文 周羊羊 2***@qq.com 小新的狗叫小白 杜林 9***@qq.com kingdeeBin 天空微算 3***@qq.com z***@126.com 9***@qq.com

要回复文章请先登录注册

黑色摩天轮

黑色摩天轮

NotificationTemplate是标准透传数据模板吗?
2017-01-04 21:30
wclssdn

wclssdn

回复 flashplume :
我今天打开app,也闪退了。。。 是关着应用的时候,我发了几条push,然后,第一次开app就闪退,再次打开就没问题了。
2016-12-16 22:49
flashplume

flashplume

追问一下,安卓版的有没有遇到开着应用,推送透传消息,app闪退的。
2016-12-08 14:57
zapoi

zapoi

回复 fredzhu :
小米手机只要进入到后台过push就会被干掉,就不能接受消息了
2016-12-01 14:36
fredzhu

fredzhu

貌似小米手机对HBuilder编译出来的程序,只要不在前台就直接杀掉啊。这个你们碰到没有?都没进程了,推送根本没反应啊。
2016-11-21 17:11
林暗风

林暗风

mark
2016-11-10 21:07
1***@qq.com

1***@qq.com

ios的做了吗?ios打开的时候收到透传消息只能用receive来处理消息并展示,你有好的展示方法吗?有没有方法进入消息中心啊
2016-11-02 16:45
tantou

tantou

你好,我按照官方的文档做了 个推的推送,现在遇到的问题是“我在电脑的模拟器上可以接受到推送的消息,云打包之后,安装到手机上就接受不到消息了,安卓和iphone都接受不到”,请问是什么原因,看到的话,能帮忙解答一下,感激不尽
2016-10-28 18:02
2***@qq.com

2***@qq.com

用参数打开指定页面,没看明白
2016-10-20 14:14
中文

中文

你好,我用标准透析模板,app在线的时候 但是receive接受不到,仍然是通知栏弾的消息 。 非标准的时候才进receive不知道有没有遇到过。
2016-10-18 17:31