uni-app需自行集成作业通知功能,核心是消息来源、推送通道和客户端响应;需配置Push模块、厂商SDK、通知权限及透传数据处理。

uni-app 本身不自动接收“老师发布的作业通知”——它不是个教育平台客户端,没有内置对接教务系统的能力。你得自己把「作业通知」这个业务逻辑接进来,核心是:消息从哪来、怎么推到手机、App 怎么响应。
uni.getPushClientId 调用失败,收不到推送 ID
这是绝大多数人卡住的第一步。没拿到 cid,服务端根本不知道往哪发。
- 确保
manifest.json中「App 模块配置」已勾选「Push(消息推送)」,否则 API 直接不可用 - 真机运行(模拟器不支持),且手机系统未全局禁用该 App 的通知权限(尤其华为/小米自带的“省电策略”会杀掉后台)
- 首次调用前必须先检查权限:
uni.getSetting看notification是否为true;不是就主动调用uni.openSetting引导用户开启 - 报错
getPushClientId:fail register fail: {"errorCode":1,"errorMsg":""},90% 是 uni-push2.0 未在 DCloud 开发者中心开通或云服务空间未绑定成功
Android 收不到通知,但 iOS 可以
这不是代码问题,是厂商通道没配全。华为、小米、OPPO、vivo 各自有一套推送后台,缺一不可。
- 检查
manifest.json的「SDK 配置」里是否填了对应厂商的app_key、app_secret等字段(例如huawei_push_app_id) - 华为必须把
agconnect-services.json放进项目根目录;OPPO 要求在nativePlugins下单独配置插件 - targetSdkVersion ≥ 26(Android 8.0)后,
uni.showLocalNotification必须传channelId,且该 channel 必须在原生层提前声明(uni-app 默认不声明,需手动改AndroidManifest.xml或用自定义基座) - 别信“打包后测试”,要用正式签名证书打包 + 华为/小米应用商店上架审核通过后的包,才走真实厂商通道
通知来了,但没声音、不震动、点击无反应
音效和跳转行为不是前端 JS 控制的,而是由推送 payload 和客户端本地处理共同决定。
- iOS 要响铃,服务端推送时必须带
{"sound":"default"};只传title和content是静默的 - Android 厂商通道对
sound支持不一致,更稳妥的是服务端发透传消息(type=3),App 收到后调用uni.showLocalNotification并显式传{ sound: true, click: '/pages/homework/detail' } -
uni.onPushMessage只在 App 在前台或后台存活时触发;杀进程后收到的通知,点击启动时需在onLaunch或onShow的options里解析query参数获取原始消息 - 别依赖
uni.showModal或弹窗组件做提醒——它们只在前台生效,关屏/锁屏就失效
最常被忽略的一点:作业通知往往要带上下文(比如课程 ID、截止时间、附件链接),这些不能塞在推送 title 里糊弄。服务端必须把结构化数据放透传字段,客户端收到后存进本地数据库,再渲染成列表页。否则用户点开通知,看到的是一张白纸。











