f***@126.com
f***@126.com
  • 发布:2026-01-21 22:36
  • 更新:2026-01-21 22:37
  • 阅读:15

在线消息角标不更新问题

分类:uni-app

使用如下发送在线消息,华为手机非纯血鸿蒙4.2消息可以收到,但是角标不更新,离线的消息没问题,还有就是在web页面推送离线和在线都可以更新角标。

//返回数据给客户端  
const pushResult = await uniPush.sendMessage({  
    "push_clientid": "dc0019e50c4ed73af9807fd4c5781455",  
    "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:36 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

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

问题本质
华为(含非纯血鸿蒙 4.2)在线推送时,角标不会自动 +1;离线推送时,厂商通道会把角标工作交给系统完成,所以表现正常。
在线场景下,角标需要 客户端自己调用 API 才能更新,而您的代码里没有这一步,所以出现了“在线消息角标不更新”的现象。

解决思路

  1. 让在线消息也能像离线一样弹出通知栏(您已经用了 force_notification:true,这步已满足)。
  2. 在客户端监听这条消息,收到后手动把角标 +1。
  3. 打开 App 时把角标清零(华为要求客户端自己清 0)。

客户端代码(App.vue,只保留关键部分)

// #ifdef APP-PLUS  
export default {  
  onLaunch() {  
    /* 清空角标,用户点开 App 就归零 */  
    plus.runtime.setBadgeNumber(0);  

    /* 监听在线消息(透传或 force_notification 触发的 click) */  
    plus.push.addEventListener('receive', (msg) => {  
      // 角标 +1  
      plus.runtime.setBadgeNumber('+' + 1);  
    });  

    plus.push.addEventListener('click', (msg) => {  
      // 用户点击通知后,把角标清零  
      plus.runtime.setBadgeNumber(0);  
      // 这里可以再做跳转等业务处理  
    });  
  }  
}  
// #endif

服务端字段保持不变即可,badge 字段对华为在线推送不会生效,留作离线场景使用。

{  
  "push_clientid": "...",  
  "title": "...",  
  "content": "...",  
  "force_notification": true,  
  "badge": "+1",   // 离线场景用  
  "payload": { ... },  
  "options": {  
    "HW": {  
      "/message/android/target_user_type": 1  
    }  
  }  
}

这样就能保证:

  • 离线推送:华为系统自己 +1,点击后系统清 0。
  • 在线推送:客户端收到通知后手动 +1,点击后客户端清 0。

角标在所有场景下都能正常更新。

内容为 AI 生成,仅供参考

要回复问题请先登录注册