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

推送使用中的各种坑

分类: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

要回复文章请先登录注册

zidongbaba

zidongbaba

回复 所谓 :
配置厂商 重新打包 发布到应用市场 都不行
2022-01-17 20:11
3***@qq.com

3***@qq.com

写了个推送的小demo,前后端都有,遇到问题可以参照一下。博客地址:http://www.club888.cn//article/19
希望能帮到大家
2021-04-28 18:44
1***@qq.com

1***@qq.com

应用退出或者时间一长被系统干掉,需要配置厂商推送解决,我最近遇到的坑是安装app后一切正常,在后台运行一天后就收不到新推送了,而且我发现上架小米应用市场后才没有这个问题,所以我怀疑不上架到官方应用市场多多少少消息推送有点问题
2020-06-13 06:42
河南dev

河南dev

在线帮解决安卓平台,华为小米手机在线和离线推送各种问题,只需帮我头条点点赞,评论,就能获得我的从零到一的完美解决,欢迎加q 476988188
2020-06-03 15:32
杨_哈哈哈

杨_哈哈哈

回复 杨_哈哈哈 :
{result=ok, taskId=OSS-04**********379f125d9b0b, status=successed_offline}当status是offline的时候就收不到了
2020-04-28 17:18
杨_哈哈哈

杨_哈哈哈

我用的透传消息的标准模板,然后APP后台运行没有被杀死,为什么也没有触发receive事件呢?APP后台运行就没有收到消息了
2020-04-28 16:44
指尖上的代码

指尖上的代码

回复 7***@qq.com :
我也是遇到了 ,我app在线时收到透传消息,我创建通知消息都执行了两次,脑阔疼。
2020-04-28 10:40
1***@qq.com

1***@qq.com

想问下透传消息点击了厂商通道为什么还是走的个推
2020-04-06 16:04
7***@qq.com

7***@qq.com

监听ios透传消息click ios会默认执行一次click 用户再点击通知会再次执行click click 加起来会执行两次 安卓正常 ios太恶心了 一步一个坑
2019-06-25 11:04
2019

2019

回复 1***@qq.com :
我改用了腾讯的信鸽。在Android Studio上集成的,然后集成手机厂商的推送。现在app离线状态下也能接收到了
2019-06-24 17:34