uni-app怎么实现App端的推送消息分类处理逻辑

轻晨同学_2760

轻晨同学_2760

2026-06-25

546人浏览

原创

必须在app.vue的onlaunch中用plus.push.addeventlistener分别监听receive、click、online事件:receive处理通知到达(含厂商通道内容),click处理用户点击跳转(需判冷/热启动),online捕获前台透传消息;不可依赖uni.onpushmessage,因其在厂商通道下不稳定。

uni-app怎么实现app端的推送消息分类处理逻辑

如何在 App.vue 中监听并区分 receive / click / online 事件

uni-app 的 plus.push.addEventListener 是分类处理推送消息的入口,但很多人只绑定了 receive,结果点击通知没反应、前台收不到透传、后台唤醒逻辑缺失。关键不是“有没有监听”,而是“监听什么、怎么分发”。

  • receive:设备收到通知(无论前台/后台),含离线厂商通道下发的内容;iOS APNs 消息会带 aps 字段,Android 厂商通道通常走 payload 或原始字段
  • click:用户点击通知栏条目触发,此时 App 可能被拉起或从后台切到前台,msg 内容与 receive 基本一致,但需额外判断启动场景
  • 不监听 online 类型(如个推透传)会导致前台消息静默丢失——它不会触发 receive,必须用 plus.push.addEventListener("online", ...) 单独捕获

示例片段(App.vue onLaunch 内):

plus.push.addEventListener("receive", (msg) => {
  if (msg.aps) {
    // iOS APNs 通知
    handleIOSNotify(msg);
  } else if (msg.payload && msg.payload.type === "order") {
    // 华为/小米等厂商通道携带的业务字段
    handleOrderNotify(msg.payload);
  }
});
plus.push.addEventListener("click", (msg) => {
  // 点击后跳转逻辑,注意区分是冷启动还是热启动
  const isColdStart = !plus.runtime.isApplicationRunning();
  navigateToOrderDetail(msg.payload?.orderId, isColdStart);
});
plus.push.addEventListener("online", (msg) => {
  // 仅前台生效的透传消息,比如实时聊天新消息
  handleOnlineMessage(msg);
});

为什么不能只靠 uni.onPushMessage 做分类

uni.onPushMessage 是 uni-app 封装层 API,但它在 Android 厂商通道下表现不稳定:华为、小米等离线推送到达时,该回调可能不触发;iOS 在冷启动后首次 onPushMessage 也可能拿不到完整 payload。这不是 bug,是底层 SDK 与 uni-app 生命周期桥接的固有限制。

uni-app
uni-app

uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。

下载
  • uni.onPushMessage 适合做简单通知展示,不适合承载业务路由或状态同步逻辑
  • 真机调试时,plus.push 系列 API 才是唯一可靠入口,尤其涉及 cid 获取、权限检查、多通道 fallback
  • 如果你发现某些机型收得到通知但进不了 uni.onPushMessage,基本可以确定是厂商通道未走 uniPush 网关,或 manifest.json 中 push 配置漏项

如何根据消息类型动态决定是否弹窗、跳转或静默处理

分类处理的核心不是“收到就干啥”,而是“收到后结合当前状态判断该干啥”。比如订单类消息需要强提醒+跳转,系统公告可静默存本地,而聊天消息在前台应走内嵌弹窗、后台才走通知栏。

  • 用 plus.runtime.isApplicationRunning() 判断 App 是否在前台,避免重复弹窗
  • 用 plus.push.getClientInfo() 获取当前生效的推送通道(channel: "huawei" 或 "xiaomi"),不同通道字段结构差异大,不能硬解 msg.content
  • 业务字段建议统一放在 payload 下,且服务端推送时必须带上 type 字段,前端 switch 分支才可控
  • Android 12+ 必须先请求 android.permission.POST_NOTIFICATIONS,否则 plus.push.createMessage 会静默失败,连日志都不报

cid 缓存失效导致分类逻辑错乱的典型表现

很多团队把 cid 存 localStorage 后就不管了,结果出现“同一台手机收不到推送”“点击通知跳转错误用户页面”等问题。根本原因是 cid 并非永久有效:厂商 SDK 可能因清理缓存、升级、重装 App 而重置,uniPush 后台也会定期轮换绑定关系。

  • cid 必须在每次 onLaunch 和 onShow 时调用 uni.getPushClientId() 主动刷新,而不是只取缓存值
  • 服务端绑定 cid 时,要同时记录时间戳和通道类型,超过 7 天未活跃的 cid 应标记为待验证
  • 前端收到消息后,若发现 cid 与本地缓存不一致,应立即上报新值并清空旧业务状态(比如未读数、临时 token)

最常被忽略的是:cid 变更后,旧消息仍会推送到老 cid,但新 cid 已无法关联历史用户数据——这会导致分类后的跳转目标完全错位。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2123

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4563

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5710

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5138

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

723

5

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

120

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

40

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

40

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

40

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习