BJ_Q
BJ_Q
  • 发布:2019-07-04 15:28
  • 更新:2024-06-20 17:59
  • 阅读:9466

uni-push ,iOS 通过透传 发送通知,但手机通知知栏未显示

分类:uni-app

前提 :1、Uni Push后台 配置ok (iOS 推送p12证书)
2、通过 this.clientid=plus.push.getClientInfo().clientid 获取客户端id
3、* plus.push.createMessage(message.title,message.content);这段代码必须要有,手机通知栏才会显示通知,也就是说需要在接收消息回调里面 自己注册本地通知才会有通知栏的 ,但经过测试,使用透传方式,app在线状态会收到通知,离线收不到。

继续更新 ....目前已实现安卓、苹果在线离线接收消息。。


在App.vue 文件里 onLaunch: function () {}   方法如下  
//判断客户端  
 var clent=uni.getSystemInfoSync().platform  
plus.push.setAutoNotification(true)  
const _self = this;  
        //收到透传消息    
        //只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息    
        plus.push.addEventListener("receive", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(receive):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload = msg.payload;    
                //【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)    
                //【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环                  
                if (msg.aps == null && msg.type == "receive") {     
                    var messageTitle = payload.messageTitle;    
                    var messageContent = payload.messageContent;    
                    //创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null    
                    plus.push.createMessage(messageContent, JSON.stringify(payload), {title: messageTitle});    
                }  
                // else{  
                //  var payload = JSON.parse(msg.payload);    
                //  plus.push.createMessage(payload.messageContent, JSON.stringify(payload.payload), {title: payload.messageTitle});    
                // }    
            }    
            if (clent=='android') {   
              //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。    
                var payload = JSON.parse(msg.content);    
                var messageTitle = payload.messageTitle;    
                var messageContent = payload.messageContent;    
                plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});  
                plus.runtime.setBadgeNumber(1)  
            }    
        }, false);    

        //消息点击事件    
        //【APP在线】,收到透传消息通过,不会提醒至通知栏目,需要发送本地消息,再进行点击触发的点击事件。    
        //【APP离线】,收到离线透传消息,必须通过Java后台的Intent字符串携带payload,且符合格式才能触发click事件,格式不符合不会触发  

        plus.push.addEventListener("click", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(click):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload;    
                if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象    
                    payload = msg.payload;    
                } else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象    
                    payload = JSON.parse(msg.payload);    
                }    
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                    //_self.callback(payload+"");    
                    _self.setUniPush_state("1")  
                    _self.setUniPush_url(payload.payload)  
                    uni.reLaunch({  
                        url: '/pages/tabBar/index/index'  
                    })  
                }    
            }    
            if (clent=='android') { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象    
                var payload = msg.payload;    
                console.log("msg.payload:"+msg.payload)  
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                   // _self.callback(payload+"");    
                   _self.setUniPush_state("1")  
                   _self.setUniPush_url(payload)  
                   uni.reLaunch({  
                    url: '/pages/tabBar/index/index'  
                   })  
                }    
            }    
        }, false);  

另外:在 DCloud 平台发送消息时 :注意 intent格式
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.XXXXXX/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=你好,这是标题;S.content=这是通知的内容,你好,这是内容。;S.payload=;end
注意:component 为你的 应用id(io.dcloud.xxx)
可以看下这个链接https://ask.dcloud.net.cn/article/36622?notification_id-760228__item_id-32878写的,我也是根据她的来写的,挺不错的

0 关注 分享

要回复文章请先登录注册

7***@qq.com

7***@qq.com

请问_self.setUniPush_state("1")
_self.setUniPush_url(payload)这两个是在哪里?执行的逻辑是?
2023-04-20 14:17
爱编程的小学究

爱编程的小学究

app离线状态始终收不到消息,但是我查询看个推可以实现啊 unipush不就是内嵌的个推吗
2022-11-26 20:30
3***@qq.com

3***@qq.com

要对接厂商
2020-12-23 19:33
aliang888

aliang888

自定义基座,苹果在线和离线都能收到透传,安卓应用离线,死活收不到消息,但是app离线状态,在模拟器确可以收到,不知道啥情况
2020-08-20 15:10
qq1563204347

qq1563204347

回复 jtshushu :
if (msg.aps == null && msg.type == "receive") { }
2020-07-29 17:42
qq1563204347

qq1563204347

同问+1,ios离线推送搞好了吗
2020-07-29 17:39
8***@qq.com

8***@qq.com

请问下 IOS可以做到离线透传吗
2020-07-27 17:24
8***@qq.com

8***@qq.com

回复 07shou :
同问 ,现在有解决嘛
2020-06-30 21:03
jtshushu

jtshushu

你好怎么解决

plus.push.createMessage
这个多次收到信息问题呢
2020-05-15 15:38
07shou

07shou

哥们我也遇到这个问题,请问你解决了吗
2019-12-13 15:49