uni-app 安卓APP不在线时点击推送信息不触发 plus.push.addEventListener 函数

uni-app 安卓APP不在线时点击推送信息不触发 plus.push.addEventListener 函数

开发环境 版本号 项目创建方式
Windows win 11 HBuilderX

示例代码:

plus.push.addEventListener(‘click’, (msg) => {
if(plus.os.name==‘iOS’){
var payload = msg.payload;

    var UIApplication = plus.ios.import("UIApplication");  
    var app = UIApplication.sharedApplication();  
    //获取应用图标的数量  
    var oldNum = app.applicationIconBadgeNumber();  
    if (oldNum != 0) {  
        //console.log('角标取值', oldNum);  
        // console.log("oldNum:"+oldNum);  
        var newNum = oldNum - 1;  
        //设置应用图标的数量  
        plus.runtime.setBadgeNumber(newNum);  
        //导入个推原生类  
        var GeTuiSdk = plus.ios.importClass('GeTuiSdk');  
        GeTuiSdk.setBadge(newNum);  
        console.log(payload);  
        if (payload.type == "tab") { //跳转订单页面  
            uni.switchTab({  
                url:'/'+payload.path,  
                complete:(res)=>{  
                    console.log(JSON.stringify(res));  
                }  
            });  
        }else if (payload.type == "nav") { //跳转订单页面  
            uni.navigateTo({  
                url:'/'+payload.path,  
                complete:(res)=>{  
                    console.log(JSON.stringify(res));  
                }  
            });  
        }  
    }  

}else{  
    console.log(6666);  
    let routes = getCurrentPages(); // 获取当前打开过的页面路由数组  
    let curRoute = routes[routes.length - 1].route //获取当前页面路由  
    var luyou_num=curRoute.split('/').length-1;  
    var qpath='';  
    for(var i=0;i<luyou_num;i++){  
        qpath=qpath+'../';  
    }  
    console.log(qpath);  
    var args = plus.runtime.arguments;  
    console.log(args);  
    var data = JSON.parse(args);  
    var payload = JSON.parse(data.payload);  
    plus.runtime.setBadgeNumber(0);    
    console.log(payload);  

    if (payload.type == "tab") { //跳转订单页面  
        uni.switchTab({  
            url:qpath+payload.path,  
            complete:(res)=>{  
                console.log(JSON.stringify(res));  
            }  
        });  
    }else if (payload.type == "nav") { //跳转订单页面  
        uni.navigateTo({  
            url:qpath+payload.path,  
            complete:(res)=>{  
                console.log(JSON.stringify(res));  
            }  
        });  
    }  
}  

});


### 操作步骤:

安卓应用不在线点击推送信息启动APP无法跳转页面,但安卓应用在线时,页面可以跳转,在监听函数反复调试输出打印完全没有输出打印数据


### 预期结果:

安卓应用不在线点击推送信息启动APP无法跳转页面,但安卓应用在线时,页面可以跳转,在监听函数反复调试输出打印完全没有输出打印数据


### 实际结果:

安卓应用不在线点击推送信息启动APP无法跳转页面,但安卓应用在线时,页面可以跳转,在监听函数反复调试输出打印完全没有输出打印数据


### bug描述:

plus.push.addEventListener
控制台打印调试无法进入该监听


更多关于uni-app 安卓APP不在线时点击推送信息不触发 plus.push.addEventListener 函数的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

您发送推送消息的时候,传了intent字段了么?

更多关于uni-app 安卓APP不在线时点击推送信息不触发 plus.push.addEventListener 函数的实战教程也可以访问 https://www.itying.com/category-93-b0.html


$androidnotif->setClickType(‘intent’);//intent:打开应用内特定页面(厂商都支持),url:打开网页地址(厂商都支持,华为要求https协议),startapp:打开应用首页(厂商都支持) //$androidnotif->setUrl(‘https://shfw:pages/index/index’);//打开应用地址 setClickType为url必填 $androidnotif->setIntent(‘intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=uni.UNIF0F5EEF/io.dcloud.PandoraEntry;S.title=’.$this->title.’;S.content=’.$this->body.’;S.payload=’. $this->path .’;end’);//打开应用地址 setClickType为intent必填

离线推送不用这个intent那用那个呢?

回复 c***@126.com: intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end

注意事项:

component=io.dcloud.HBuilder/io.dcloud.PandoraEntry,其中 io.dcloud.HBuilder 为 App 包名,需要替换为自己 App 的包名,与 App 云端打包界面设置的 Android 包名一致。

回复 c***@126.com: 你发的intent内容没有 UP-OL-SU标志。

回复 DCloud_Android_THB: 安卓加了标志后 能触发click了 但是苹果还是不行 苹果也要加什么标识吗 我是在dcloud的后端 做的调试

请问最后怎么解决的 我这个APP也是IOS能触发 安卓无法触发

我估计安卓性能太差,需要设置延时调用才行

这个问题是安卓APP在离线状态下点击推送消息时,推送事件监听器没有被触发的常见问题。以下是关键点分析:

  1. 对于安卓离线推送的处理,需要在应用启动时检查plus.runtime.arguments获取推送参数,而不是依赖plus.push事件监听。

  2. 修改方案:在应用启动生命周期中(如App.vue的onLaunch)添加以下代码:

onLaunch: function() {
    // 处理离线推送
    if(plus.os.name === 'Android') {
        let args = plus.runtime.arguments;
        if(args) {
            try {
                let data = JSON.parse(args);
                let payload = JSON.parse(data.payload);
                this.handlePushPayload(payload);
            } catch(e) {
                console.error('解析推送参数失败', e);
            }
        }
    }
},
methods: {
    handlePushPayload(payload) {
        // 处理跳转逻辑
        if(payload.type === "tab") {
            uni.switchTab({url: payload.path});
        } else if(payload.type === "nav") {
            uni.navigateTo({url: payload.path});
        }
    }
}
回到顶部