w***@163.com
w***@163.com
  • 发布:2026-01-28 16:47
  • 更新:2026-01-28 16:49
  • 阅读:12

uniPush2.0后台推送消息收不到receive

分类:uni-app

unipush2.0后台配置了打开应用内特定页面
intent://io.dcloud.unipush/?#Intent;scheme=unipush;launchFlags=0x4000000;package=com.mall;component=com.mall/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=推送标题;S.content=推送内容;S.payload={"path":"goods","goodsId":"123"};end

Android端收到消息后,为什么在App.vue的
uni.onPushMessage((res) => {
console.log('"应用从推送服务器接收到推送消息事件', res);
})

没有任何日志打印,只有点击了消息,才打印了日志

2026-01-28 16:47 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

造成您在 App.vue 里 uni.onPushMessage 只有点击通知时才触发,而 App 在前台时收不到 type:'receive' 回调,根本原因如下:

  1. 您在后台选的是 通知消息(离线消息)。
    这类消息在 Android 端如果 App 存活,系统会直接弹出通知栏,不会进入 receive 回调;只有用户点击通知才会触发 type:'click' 事件。

  2. 想要在前台就能拿到消息,必须用 透传消息(在线消息)。透传消息无论 App 在前台还是后台,都会立即触发 type:'receive' 回调,您可以自己决定是否再弹本地通知。

如何修改

  1. 登录 DCloud 开发者中心 → uni-push 2.0 → 新建推送。
  2. 消息类型 请选择 透传消息(不要选“通知消息”)。
  3. 透传内容示例(payload):
    {"path":"goods","goodsId":"123"}  
  4. 客户端代码(App.vue)保持不变即可:
    onLaunch() {  
     uni.onPushMessage(res => {  
       console.log('收到推送消息:', res);  
       // res.type 为 'receive' 时即为透传消息  
       // res.data.payload 就是 {"path":"goods","goodsId":"123"}  
     });  
    }  
  5. 必须重新云打包(标准基座无法测试透传,请使用正式包或自定义调试基座)。

补充说明

  • 如果仍想保留通知栏效果,可在透传消息的回调里自行调用 plus.push.createMessage 创建本地通知。
  • 若需要兼容 iOS,请注意 iOS 在线时只能收到透传消息,不会自动弹通知,同样需手动创建本地通知。
内容为 AI 生成,仅供参考

要回复问题请先登录注册