锁屏通知能否显示取决于系统权限而非uni-app代码;android需手动开启锁屏显示、后台无限制等权限;ios仅瞬时横幅且需开启锁定屏幕开关;uos需白名单启用;uni-app仅能确保通知字段完整与触发逻辑正确。

锁屏状态下能否显示通知,不取决于 uni-app 代码写得对不对,而取决于操作系统是否允许你的 App 在锁屏时展示通知——这由用户手动开启的系统权限决定,uni-app 本身没有 API 能绕过这个限制。
Android 锁屏通知必须手动开启「锁屏显示」开关
很多开发者以为开了“允许通知”就自动锁屏可见,其实不是。小米、华为、OPPO 等厂商默认关闭该功能,且藏得深:
- 进入「设置 → 应用管理 → 你的 App → 通知管理」,确认「允许通知」已打开
- 向下滚动找到「在锁屏上显示」或「锁屏通知」开关(名称因机型而异),手动打开
- 返回上一级,进「电池优化」或「省电策略」,将你的 App 设为「无限制」或「允许后台活动」
- 部分机型(如小米 HyperOS)还需开启「后台弹出桌面」权限,否则锁屏时横幅根本不出
iOS 锁屏通知只在触发时短暂出现
iOS 不支持“常驻锁屏通知栏”,它只在收到通知的瞬间,在锁屏顶部显示横幅,图标来自 Info.plist 中的 CFBundleIcons 配置。关键点:
- 必须在「设置 → 通知 → 你的 App」中开启「锁定屏幕」开关
- 通知内容需包含
title和body,否则系统可能降级为仅显示角标 -
sound: 'default'必须显式传入,且 Xcode 的Background Modes要勾选Remote notifications - 本地通知(
uni.showLocalNotification)在锁屏时能显示,但不会播放声音,除非配置了 sound 且用户未静音
UOS 锁屏通知需逐个应用启用
UOS 的锁屏通知是“白名单制”,全局开关开了也不代表每个 App 都能显示:
- 先点击任务栏右下角【控制中心】→【通知】→ 确保顶部「启用通知中心」为蓝色(灰色即未启用)
- 在【应用程序通知】里找到你的 App,单独打开「在锁屏上显示」
- 封面图路径必须是
static/icons/app-icon-128.png这类静态资源,且 PNG 不能带透明通道,否则某些版本渲染失败 - 系统更新类通知默认抢占锁屏区域,建议关闭「系统更新提醒 → 显示在锁屏上」避免干扰
uni-app 侧唯一可控的是通知触发逻辑和字段完整性
你没法让通知“强行”出现在锁屏,但可以确保它被系统接纳并展示:
- 发送本地通知时,
uni.showLocalNotification的channelId必须与manifest.json中声明的一致(Android 8.0+ 强制要求) - 使用
plus.notification.create时,icon字段要填static/下相对路径,如"static/icons/notify-icon.png" - 云打包后务必验证:真机锁屏后发一条测试通知,观察是否出现横幅;没出现就立刻回查系统设置,而不是改代码
- 避免在
onHide里调用uni.removeNotification清空所有通知——锁屏后历史记录为空,用户无法点击查看
最容易被忽略的其实是“用户没开那个开关”,而不是代码漏了某个字段。真机测试前,先手动把系统里那几个隐藏很深的权限开关全打开,再验证逻辑。











