在线好友邀请

功能介绍

用户 A 在游戏内,可向其好友 B 发送邀请消息,B 收到好友消息并接受之后,就可以加入 A 与其一起游戏。

登录游戏服务

要使用在线邀请功能,需要先使用接口 GameServerManager.login 登录游戏服务。

const m = wx.getGameServerManager()
m.login().then(() => {
  console.warn('游戏服务登录成功')
}).catch(err => {
  console.warn('游戏服务登录失败', err)
})

开启状态管理服务

在成功登录游戏服务之后,需要开启状态管理服务 GameServerManager.startStateService。只有开启状态管理,才能够获取在线好友列表,邀请好友以及接收好友邀请。该函数支持传入一个参数 userState 代表当前用户的自定义状态,⻓度至多为 256 字节。

m.startStateService({
  userState: 'start',
  success: () => {
    console.log('开启状态管理服务成功')
    wx.postMessage('start')
  },
  fail: res => {
    console.error('开启状态管理服务失败', res)
  }
})

拉取在线好友列表

在开放数据域,接收到游戏域发送来的 start 消息之后,就可以通过 GameServerManager.getFriendsStateData 获取好友列表了,该列表包括好友的自定义状态(userState),系统状态(sysState)以及好友的头像昵称等个人信息。

let list
const m = wx.getGameServerManager()
wx.onMessage(type => {
  if (type === 'start') {
    m.getFriendsStateData({
      success: res => {
        list = res.list
        console.log('获取好友列表', list)
      },
      fail: res => {
        console.error('获取好友列表失败')
      }
    })
  }
})

提示 当有好友状态更新(不管是自定义状态还是系统状态)时,可以通过 GameServerManager.onStateUpdate 事件监听到。

发起邀请

玩家 A 在游戏内触发一些操作(比如点击 邀请 按钮)之后,在开放数据域可以通过 GameServerManager.inviteFriend 发出邀请,该接口只接受一个参数 openId 代表被邀请方的 openId。

function invite(openId) {
  m.inviteFriend({ openId })
}

提示 如果需要在邀请时附带额外的邀请信息,请通过游戏域接口 GameServerManager.setInviteData 实现。

接受邀请

好友 B 需要在游戏域监听事件 GameServerManager.onInvite 来获取邀请信息。需要注意的是,邀请信息到达 B 之后,玩家 B 会首先收到一个弹窗确认是否接受邀请,只有当邀请被接受之后,开发者才能收到这个事件的回调。

m.onInvite(res => {
  console.log('该玩家接受了来自用户', res.openId, '的邀请')
  console.log('本次邀请的附加信息', res.data)
})

注意 请保证小游戏生命周期内至多监听一个 onInvite 事件。