最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
uni-app怎么获取微信小程序直播状态:uni-app直播间信息同步实战
时间:2026-07-23 10:42:59 编辑:袖梨 来源:一聚教程网
调用 live-player-plugin 的 getLiveStatus 有效需满足:插件已声明引入、仅限微信小程序、组件版本 ≥1.3.0;须用 requirePlugin 动态加载后调用,且在 onLoad 中配合平台判断执行,返回 Promise,状态码为数字(如101直播中),room_id 必须为数字类型,基础库需 ≥2.20.1。
直接调用 live-player-plugin 提供的 getLiveStatus 接口就能拿到直播状态,但必须满足三个前提:插件已正确声明并引入、运行环境是微信小程序、且组件版本 ≥ 1.3.0。其他平台(H5/APP)调用会静默失败或报 requirePlugin is not defined。
live-player-plugin 的 getLiveStatus 怎么调用才有效
这个函数不是全局可用的,得先用 requirePlugin 动态加载插件实例,再调用方法。不能写在 mounted 里就直接执行,因为插件加载是异步的,且仅在真机或微信开发者工具中生效。
- 必须在
onLoad或后续生命周期中调用,且加if (uni.getSystemInfoSync().platform === 'ios' || uni.getSystemInfoSync().platform === 'android')做平台判断(虽然微信环境固定是这两个,但 uni-app 编译时可能跑在非微信平台) -
getLiveStatus返回的是 Promise,但首次调用立刻返回结果,后续轮询需手动控制间隔(官方建议 ≥60s),别用setInterval频繁刷 - 返回的状态码是数字:
101(直播中)、102(未开始)、103(已结束)、104(禁播)、105(暂停中)、106(异常)、107(已过期),别当成字符串比对 - 示例代码片段:
onLoad() { if (uni.getSystemInfoSync().platform !== 'devtools') { const livePlayer = requirePlugin('live-player-plugin') livePlayer.getLiveStatus({ room_id: this.roomId }).then(res => { console.log('直播状态:', res.status) // 注意是 res.status,不是 res.data.status this.liveStatus = res.status }) }}
为什么 getLiveStatus 总是返回 102 或 undefined
常见原因不是接口写错了,而是环境或配置没对上。
-
room_id必须是数字类型,传字符串(比如后端返回的 `"123456"`)会导致静默失败,要用Number(roomId)强转 - 插件未在
manifest.json的mp-weixin下正确声明,或版本号填错(如填了"1.2.0"但实际最新是"1.4.0"),编译时不会报错,但运行时requirePlugin返回undefined - 页面没在微信小程序基础库 2.20.1+ 上运行(旧基础库不支持该接口),可在微信开发者工具「详情」→「项目设置」里确认基础库版本
- 直播间本身状态异常:比如已过期(
endTime已过)、被平台下架、或未通过审核,此时即使 room_id 正确,也会返回107或104
如何让直播间信息在页面间同步更新
uni-app 的页面跳转是独立实例,getLiveStatus 不会自动广播变化,得自己搭轻量同步机制。
- 不要依赖 vuex 或 globalData 存状态,它们无法触发跨页面响应式更新;改用
uni.$emit+uni.$on在关键节点广播状态变更 - 在直播间页(
pages/live/index.vue)里,每 60s 轮询一次,并在状态变化时uni.$emit('live-status-change', { roomId, status }) - 在首页、商品页等需要感知直播状态的地方,
uni.$on('live-status-change', ...)监听,配合onUnload里uni.$off避免内存泄漏 - 如果用户从分享卡片进直播间,
custom_params里带的参数(如pid)可用于关联商品,但注意长度上限 600 字符,超长会被截断,别塞大对象
最易忽略的一点:状态轮询不能只在直播间页做——用户可能从首页点击订阅组件进入,但首页本身没轮询逻辑,导致“已开播”却还显示“未开始”。得把轮询和广播逻辑抽成公共方法,在多个入口页主动调用。
相关文章
- 苹果折叠屏爆料汇总:售价超两万,比例阔折叠 07-30
- 纪念碑谷3 纪念碑谷3手游玩法详解与体验评测 07-30
- 晴空双子金卡阵容推荐 晴空双子高性价比氪金养成指南 07-30
- 大周列国志全新派系系统 07-30
- 兔小萌世界甜系小房间搭建指南 兔小萌世界高颜值甜系房间布置全流程详解 07-30
- 大周列国志全新剧本包西汉剧本包 07-30