杀掉应用后发送一条消息通知后fcm拉起进程在线后再发送通知uni-app uni.onPushMessage监听不到透传消息打开应用后又可以

杀掉应用后发送一条消息通知后fcm拉起进程在线后再发送通知uni-app uni.onPushMessage监听不到透传消息打开应用后又可以

开发环境 版本号 项目创建方式
Windows 10 专业版 4.36 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

手机系统:Android

手机系统版本号:Android 10

手机厂商:三星

手机机型:Galaxy Note9,型号:SM-N960U1

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

APP.vue中代码如下:

onLaunch: function() {  
    console.log('App Launch');  

    // #ifdef APP-PLUS  

    console.log('11111111111111');  
    // 获取当前应用的cid  
    plus.push.getClientInfoAsync((info) => {  
        console.log('------------getClientInfoAsync---------');  
        console.log(info);  
    });  

    // 获取客户端唯一的推送标识  
    getPushClientIdWithRetry();  

    // 设置接收透传消息的监听器  
    uni.onPushMessage(function(result) {  
        console.log('收到推送消息:', result);  

        const { type, data } = result;  
        const { payload } = data;  
        const { definedTitle: title, definedContent: content } = payload;  

        if (type === 'receive') {  
            // 应用从推送服务器接收到推送消息事件  
            uni.createPushMessage({  
                title,  
                content,  
                payload,  
                success(a, b, c) {  
                    console.log('createPushMessage success', a, b, c);  
                },  
                fail(a, b, c) {  
                    console.log('createPushMessage fail', a, b, c);  
                }  
            })  
        }  
    });  
    // #endif  

更多关于杀掉应用后发送一条消息通知后fcm拉起进程在线后再发送通知uni-app uni.onPushMessage监听不到透传消息打开应用后又可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

fcm拉起进程,但是js线程并没有启动,所以会缓存收到的消息,等到app打开的时候再释放消息,此时你可以获取到缓存的消息。

更多关于杀掉应用后发送一条消息通知后fcm拉起进程在线后再发送通知uni-app uni.onPushMessage监听不到透传消息打开应用后又可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html


fcm拉起进程,js线程并没有启动,此时怎么能继续监听到透传消息并创建本地通知?

回复 1***@qq.com: 如上所述,会缓存后续的透传消息,直到你的注册监听代码运行。

回复 DCloud_Android_THB: fcm拉起进程,设备在线时,不是应该uniapp底层拉起js线程启动吗?不然我怎么能保持uni.onPushMessage监听代码一直运行呢?js线程不启动的话,手机顶部就不能及时收到消息通知呀,得打开才能收到。

回复 1***@qq.com: 对 就是要打开app,此时onPushMessage里面处理。

回复 DCloud_Android_THB: 那这样的话,我不打开app的话,后面来的新消息通知就不能及时收到了,感觉这样不合理呢,应该fcm拉起进程,设备在线时,uniapp应该拉起app的js线程启动,这样通过监听onPushMessage来创建消息createPushMessage,才能及时收到新的消息通知。

回复 1***@qq.com: 我明白你的意思了,这个我们需要讨论一下,先讲下这个问题,fcm拉起进程,进程虽然启动了,但是js线程在后台是不运行的,导致新消息只在原生层…

回复 DCloud_Android_THB: 是的,这个问题对于杀掉应用后,需要及时收到重要消息的APP来说很重要。麻烦你们能尽快解决一下这个问题呢,顺便看下国内各厂商的消息推送是不是也存在这个类似问题。如果你们解决了,麻烦通知一下,非常感谢。

回复 1***@qq.com: 国内的不存在此问题

回复 DCloud_Android_THB: 你好,请问这个问题什么时候能解决,我这边海外项目着急要用,暂时有没有其他快捷的方式来解决?

针对您描述的FCM推送问题,以下是关键分析:

  1. 后台被杀时的消息处理机制:
  • Android系统在应用进程被杀后,FCM默认会通过系统通知栏展示消息
  • 此时应用未运行,uni.onPushMessage监听器无法触发
  1. 透传消息接收条件:
  • 应用必须在前台或后台运行(未被强制停止)
  • 系统会将透传消息直接传递给应用进程
  1. 问题原因:
  • 应用被杀后首次通知是由系统直接处理
  • 应用被FCM拉活后可能未及时重建消息监听通道
  • 安卓10+的省电策略可能限制后台服务
  1. 解决方案方向(需代码验证):
// 在App.vue中添加生命周期监听
onShow: function() {
    // 应用从后台唤醒时重新建立推送监听
    plus.push.addEventListener('receive', this.handlePushMessage)
},
methods: {
    handlePushMessage(msg) {
        console.log('收到推送消息:', msg)
        // 处理消息逻辑
    }
}
回到顶部