# 视频号直播

# 游戏内发起一键直播

基础库v2.19.0 开始支持该接口

1. wx.startGameLive

开发者可在游戏内设置一键开播入口,用户从游戏内发起一键开播到视频号

参数 类型 说明
query string 自定义query

错误码:

errCode 说明
-1 未知错误
0 允许开播
1 无权限,具体原因请看备注
2 正在直播,不允许开播
3 视频通话冲突,不允许开播
4 相机冲突,不允许开播

备注:无权限的可能错误情况 1、小游戏无权限:需在mp系统中申请权限。 2、设备版本过低: 2.1 微信版本号过低,安卓不得低于8.0.7,iOS不得低于8.0.6.6 2.2 手机系统过低,安卓设备版本号不得低于6,iOS不得低于“iphone8.3”

// wx.startGameLive 接口需要用户产生点击行为后才能调用
wx.onTouchEnd((result) => {
  console.log('onTouchEnd')
  wx.startGameLive({
    success(res) {
      console.log('startGameLive success', res)
    },
    fail(res) {
      console.error('startGameLive fail', res)
    }
  })
})

// 支持传入 query
wx.startGameLive({
    query: 'a=1&b=2'
})

2. wx.checkGameLiveEnabled

检查用户是否有直播权限以及用户设备是否支持直播

参数 类型 说明
isEnabled boolean 用户是否有直播权限
wx.checkGameLiveEnabled({
   success(res) {
        console.log(res.isEnabled) // 当前用户是否有直播权限(true/false)
   }
})

3. wx.onGameLiveStateChange

监听小游戏直播状态变化事件

参数 类型 说明
state string 当前直播状态
feedId string 当前直播id,只在 state 是 start 时会返回 (基础库v2.19.2开始支持)

state 合法值:

state 说明
menuClick 用户点击右上角直播按钮
start 开始直播
end 直播结束

另外,开发者可通过 wx.onGameLiveStateChange 设置观众从直播间打开小游戏的 query

wx.onGameLiveStateChange((res) => {
    if (res.state === 'menuClick') {
       return {
           query: 'a=1&b=2'
       }
    }
})

从基础库 v2.19.2 开始,开发者可以从开播回调中直接获取到本次直播id,示例代码:

wx.onGameLiveStateChange((res) => {
    if (res.state === 'start') {
        console.log(res.feedId)
    }
})

4. wx.offGameLiveStateChange

取消监听直播状态变化事件,示例代码:

// 监听直播状态变化事件
wx.onGameLiveStateChange((res) => {
   console.log(res.state)
})

// 取消监听
wx.offGameLiveStateChange()

5. wx.getGameLiveState

查询当前直播状态

入参:无

参数 类型 说明
isLive boolean 是否正在直播

示例代码:

const state = wx.getGameLiveState()

console.log(state.isLive)

6. wx.getUserCurrentGameliveInfo

获取小游戏用户当前正在直播的信息(可查询当前直播的 feedId)

回调参数:

参数 类型 说明
feedId string 当前直播的id

示例代码:

wx.getUserCurrentGameliveInfo({
  success(res) {
    console.log(res.feedId)
  }
})

7. wx.getUserRecentGameLiveInfo 获取小游戏用户最近已结束的直播的信息(可查询最近已结束的直播的 feedId)

回调参数:

参数 类型 说明
feedIdList Array.string 最近几场直播的 feedId 列表

示例代码:

wx.getUserRecentGameLiveInfo({
  success(res) {
    // res.feedIdList === ['id1', 'id2', 'id3']
    console.log(res.feedIdList)
  }
})

8. wx.getUserGameLiveDetails

获取小游戏用户的已结束的直播数据

参数 类型 说明
feedIdList Array.string 要查询的直播的id

回调参数:

参数 类型 说明
encryptedData string 包括敏感数据在内的完整转发信息的加密数据,详细见加密数据解密算法
iv string 加密算法的初始向量,详细见加密数据解密算法
cloudID string 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据

错误:

错误码 说明
-10000400 参数无效
-10115001 存在未结束的直播

encryptedData 解密后得到的数据结构:

{
  watermark: {
    timestamp,
    appid
  },
  liveInfoList: [{
    feedId,                    // 直播id 
    description,               // 直播主题
    startTime,                 // 开播时间戳
    endTime,                   // 关播时间戳
    totalCheerCount,           // 主播收到的喝彩总数
    totalAudienceCount,        // 直播间总观众人数
    liveDurationInSeconds      // 直播总时长
  }]
}

示例代码

wx.getUserGameLiveDetails({
  feedIdList: ['id1', 'id2'],
  success(res) {
    console.log(res.encryptedData)
  }
})

# 小程序跳转视频号直播间

从基础库 2.15.0 开始支持

  1. 开发者首先通过wx.getChannelsLiveInfo传入视频号id用于获取视频号直播信息,包括直播id(feedId与nonceId两个参数)与直播状态。其中直播状态含义如下:
  • status=2:直播中,此时返回的feedId与nonceId为当前直播id
  • status=3:直播已结束,此时返回的feedId与nonceId为最近一次直播id
  1. 获取直播信息后,开发者可以通过wx.openChannelsLive打开视频号直播。若当前未在直播,则会跳转到最近一场直播的结束页。该接口使用限制如下:
  • 需要用户触发跳转,若用户未点击小程序页面任意位置,则开发者将无法调用此接口。
  • 需要用户确认跳转,在跳转至视频号直播前,将统一增加弹窗,询问是否跳转,用户确认后才可以跳转视频号直播。

# 小程序内发起预约视频号直播

若小程序与视频号的主体相同或为关联主体,可以跳转到视频号直播间或在小程序内发起视频号直播预约。

从基础库 2.19.0 开始支持

  1. 开发者首先通过wx.getChannelsLiveNoticeInfo传入视频号id用于获取视频号直播预告id(noticeId),若当前没有可预约的直播预告,将返回失败。

  2. 获取直播预告信息后,开发者可以通过wx.reserveChannelsLive唤起预约弹窗,用户可以进行预约操作。成功唤起弹窗即为接口调用成功,通过state可以获取用户具体操作行为:

  • state = 1,正在直播中,用户点击“取消”拒绝前往直播
  • state = 2,正在直播中,用户点击“允许”前往直播
  • state = 3,预告已取消
  • state = 4,直播已结束
  • state = 5,用户此前未预约,在弹窗中未预约直播直接收起弹窗
  • state = 6,用户此前未预约,在弹窗中预约了直播
  • state = 7,用户此前已预约,在弹窗中取消了预约
  • state = 8,用户此前已预约,直接收起弹窗
  • state = 9,弹窗唤起前用户直接取消
  • state = 10,直播预约已过期

# 主体信息查询

小程序主体信息可通过小程序资料页-开发团队进行查询,视频号主体信息可通过视频号首页-认证进行查询。

视频号id需通过视频号助手获取。

# 主体判断逻辑

若小程序与视频号的主体相同,则可以调用相关接口。 若小程序与视频号的主体不同,需同时满足以下3个条件则可以调用相关接口:

  1. 小程序绑定了微信开放平台账号
  2. 小程序与微信开放平台账号的关系为同主体或关联主体
  3. 微信开放平台账号的主体与关联主体列表中包含视频号的主体

# 使用规范

  1. wx.getChannelsLiveInfo与wx.getChannelsLiveNoticeInfo会调用到微信后台系统资源,为了保护系统,开发者请遵守《接口调用频率规范》对接口做适度的频率限制,不能无节制地调用。
  2. 平台将坚决打击诱导跳转视频号直播、诱导预约视频号直播等行为,使用此功能时请严格遵守《微信小程序平台运营规范》

# 注意事项

  1. 该接口在开发版与体验版中均可调用。开发者在调试过程中,可以在视频号选择可见范围进行开播,方便测试。
  2. 若小程序与视频号主体信息不一致,会返回100008错误码。
  3. wx.getChannelsLiveInfo与wx.getChannelsLiveNoticeInfo回调函数不继承用户点击事件,无法在wx.getChannelsLiveInfo的success回调中再调用wx.openChannelsLive。
  4. 开发者工具暂未支持此能力,请先使用真机调试。
点击咨询小助手