锁屏通知无法显示是系统级权限和厂商通道配置问题,需从推送通道配置(如华为agconnect-services.json、小米等厂商证书)、android 8.0+通知渠道(manifest.json中手动添加channel并指定id)、后台保活(关闭电池优化、鸿蒙自启动权限)三方面解决。

锁屏通知栏被其他应用覆盖,不是 uni-app 能直接控制的,而是系统级权限和厂商通道配置问题。 你改 CSS 或调 uni.showToast 没用,得从推送通道、权限申请、后台保活三块入手。
Android 厂商通道未配置或失效
华为、小米、OPPO 等手机默认屏蔽非自家通道的推送,即使你用了 uni-push,若没配对应厂商证书和配置文件,通知会降级为“仅在应用内显示”或直接丢弃——锁屏时自然看不到。
- 检查
nativeResources/android/assets/timpush-configs.json是否存在且内容完整(含各厂商 appid/appkey) - 华为需额外配置
agconnect-services.json放在nativeResources/android/根目录,不是assets下 - vivo/荣耀通道在 HBuilderX 4.64–4.65 版本有 bug,必须升到 4.66+ 或退回 4.63
- FCM 在国内不可用,若目标用户含海外设备,需单独打包并启用 FCM 通道
通知渠道未适配 Android 8.0+(Notification Channel)
Android 8.0 后强制要求为每类通知创建 NotificationChannel,uni-app 默认只建了一个通用 channel,但部分厂商(如小米、三星)会拦截无明确 channel 的锁屏通知。
- 在
manifest.json → App 模块配置 → Push(消息推送)中,手动添加多个 channel,例如:"channel": [{"id":"default","name":"默认通知","importance":"high"},{"id":"order","name":"订单通知","importance":"high"}] - 发送通知时,务必通过
uni.push.send的channelId参数指定 channel ID,不能留空 - 测试时用真机查看系统设置 → 应用通知管理 → 找到你的 App → 检查对应 channel 是否启用且“锁屏显示”开关打开
鸿蒙/安卓后台限制导致推送丢失
华为 EMUI、小米 MIUI、ColorOS 等系统会主动杀掉后台进程,uni-app 的 JS 引擎一旦被回收,推送服务就无法响应,锁屏通知自然不触发。
- 引导用户手动关闭电池优化:
plus.runtime.openURL("package:com.your.app.id")→ 进入应用信息页 → “电池” → 关闭“智能省电”或“允许后台活动” - 鸿蒙端必须开启“允许自启动”和“允许后台弹出界面”,否则锁屏通知不显示也不响铃
- 避免在
onLaunch里直接初始化推送,应等用户完成隐私协议同意后再调uni.push.init(),否则可能因启动过早被系统判定为异常行为而限频
最常被忽略的一点:锁屏通知是否响铃/震动,取决于系统级通知设置,而非代码。哪怕推送成功到达,若用户在系统设置里关掉了“声音”或“振动”,你也收不到任何反馈。上线前务必用不同品牌真机逐项验证 channel 设置 + 锁屏状态 + 系统通知开关。











