微信小程序锁屏控制栏不显示的根本原因是元数据缺失或格式错误,必须同时满足三项硬性条件:manager.title与singer/epname至少填两项、coverimgurl为https且≥300×300、src赋值后显式调用play();暂停时调用pause()会触发ios平台销毁控件,应保持playing状态或更新元数据强制刷新。

锁屏控制栏消失,根本原因是元数据没填全或格式不合法,iOS 微信会直接拒绝注册媒体会话,连锁屏界面都不渲染。
微信小程序锁屏控制栏不显示的硬性条件
不是“设置了 title 就行”,而是必须同时满足三项才可能触发锁屏控件:
-
manager.title、manager.singer、manager.epname至少填两个(只填title不够) -
manager.coverImgUrl必须是 HTTPS 地址,且尺寸 ≥ 300×300;本地路径如/static/cover.jpg在 iOS 上会被忽略 -
manager.src赋值后,必须显式调用manager.play();光设src不play,系统不认为音频已启动
暂停后控制栏消失的常见误操作
很多人在 onHide 或用户点击暂停时调用 manager.pause(),以为只是暂停——但 iOS 微信会把“暂停态”视为会话结束,主动销毁锁屏控件。这不是 bug,是平台策略。
- 不要在切后台时主动
pause():保持playing状态即可,系统会在锁屏后继续播放,控件自然保留 - 暂停操作应仅由用户显式点击触发,且暂停后要立刻更新
manager.title或manager.epname(哪怕只改个空格),强制刷新媒体会话 - 避免在
onUnload中调用manager.stop()或manager.destroy(),这会彻底清除会话,再进页面也恢复不了控件
Android 微信通知栏缩略图模糊或不显示
不是封面图质量问题,而是 Android 对缩略图有严格缓存和尺寸校验逻辑:
- 确保
coverImgUrl返回 HTTP Header 中含Content-Type: image/jpeg或image/png,否则微信拒用 - 不要用 CDN 动态参数(如
?v=123)生成封面 URL,部分机型会因缓存键变化导致反复加载失败 - 首次播放前,先用
uni.downloadFile()把封面图预下载到本地临时路径,再赋给manager.coverImgUrl,绕过网络不稳定导致的加载中断
最易被忽略的一点:iOS 锁屏控件只在「原生渲染模式」下生效,如果你项目启用了 vue3 + Composition API + 自定义组件库,且未关闭 mp-weixin 的 optimization 编译选项,某些元数据绑定会被静态优化掉——必须在 onLoad 中手动赋值,不能靠响应式变量自动同步。











