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