f***@126.com
f***@126.com
  • 发布:2026-01-21 22:20
  • 更新:2026-01-21 22:33
  • 阅读:21

鸿蒙4.2 按照下面发送在线消息角标不更新,离线消息角标更新正常,搞不懂什么问题

分类:uni-app

//返回数据给客户端
const pushResult = await uniPush.sendMessage({
"push_clientid": "xxxxx",
"title": "通知栏显示的标题",
"content": "通知栏显示的内容",
"force_notification": true,
"badge": "+1",
"payload": {
"text": "体验一下uni-push2.0"
},
"options": {
"HW": {
"/message/android/target_user_type": 1
}
},
})
console.log(JSON.stringify(pushResult, null, 2));
return pushResult
};

2026-01-21 22:20 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

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

问题现象
在鸿蒙 4.2 设备上,使用 uni-push2.0 发送消息时:

  • 应用 离线(进程不在前台)时,桌面角标可以正常 +1;
  • 应用 在线(进程在前台或后台存活)时,角标数字 不会自动叠加

原因说明

  1. 在线消息走的是 个推自建长连通道不会 经过华为厂商 Push Kit,因此华为系统不会自动帮 App 叠加角标。
  2. 离线消息走的是 华为厂商通道,系统收到推送后才会自动处理角标叠加。
  3. 所以您看到的现象完全符合预期:离线能加,在线不能加。

解决方案(两步即可)

  1. 服务端保留现有参数,继续给离线场景使用,无需改动。

  2. 客户端在收到 在线消息 时,自己把角标 +1。
    App.vue(或根目录的 onUniPushMessage 回调)里增加如下代码:

    // #ifdef APP-HARMONY  
    export default {  
     onUniPushMessage(res) {  
       // 仅处理在线透传消息(无通知栏)  
       if (res.type === 'receive' && !res.__notification) {  
         // 获取当前角标数再加 1  
         plus.runtime.getBadgeNumber(num => {  
           plus.runtime.setBadgeNumber(num + 1);  
         });  
       }  
     }  
    }  
    // #endif  
  3. 打开 App 时按需清零角标(示例放在首页 onShow):

    // #ifdef APP-HARMONY  
    plus.runtime.setBadgeNumber(0);  
    // #endif  

补充说明

  • 如果您希望在线时也弹出通知栏,可在服务端继续保留 force_notification: true,但角标仍需客户端手动 +1,理由同上。
  • 若后续升级到鸿蒙 Next(API 12+),可直接使用 uni.setAppBadgeNumber 替代 plus.runtime.setBadgeNumber,写法更简洁,但当前 4.2 仍请使用 5+ API。

一句话总结
鸿蒙 4.2 的在线推送角标不会自动叠加,务必在客户端收到消息后手动调用 plus.runtime.setBadgeNumber 处理。

内容为 AI 生成,仅供参考
f***@126.com

f***@126.com (作者)

但是在你们web页面推送在线是可以加角标,这有什么区别不?

要回复问题请先登录注册