# 状态管理与好友邀请
# 功能介绍
用户 A 在游戏内,可向其好友 B 发送邀请消息,B 收到好友消息并接受之后,就可以加入 A 与其一起游戏。
# 登录游戏服务
要使用在线邀请功能,需要先使用接口 GameServerManager.login 登录游戏服务。
const gameServerManager = wx.getGameServerManager()
gameServerManager.login().then(() => {
console.warn('游戏服务登录成功')
}).catch(err => {
console.warn('游戏服务登录失败', err)
})
# 开启状态管理服务
在成功登录游戏服务之后,需要开启状态管理服务 GameServerManager.startStateService。只有开启状态管理,才能够获取在线好友列表,邀请好友以及接收好友邀请。该函数支持传入一个参数 userState
代表当前用户的自定义状态,⻓度至多为 256 字节。
gameServerManager.startStateService({
userState: 'start',
success: () => {
console.log('开启状态管理服务成功')
// 往开放数据域发送通知,此通知字符串为自定义字符串,接收对应处理即可
wx.postMessage('renderFriend')
},
fail: res => {
console.error('开启状态管理服务失败', res)
}
})
# 拉取在线好友列表
在开放数据域,接收到游戏域发送来的消息之后,就可以通过 GameServerManager.getFriendsStateData 获取好友列表了,该列表包括好友的自定义状态(userState),系统状态(sysState)以及好友的头像昵称等个人信息。
let list
const gameServerManager = wx.getGameServerManager()
wx.onMessage(type => {
// 此处的type与上文对应
if (type === 'renderFriend') {
gameServerManager.getFriendsStateData({
success: res => {
list = res.list
console.log('获取好友列表', list)
// 渲染好友列表
// ...
},
fail: res => {
console.error('获取好友列表失败')
}
})
}
})
提示 当有好友状态更新(不管是自定义状态还是系统状态)时,可以通过 GameServerManager.onStateUpdate 事件监听到。
# 发起邀请
玩家 A 在游戏内触发一些操作(比如点击 邀请
按钮)之后,在开放数据域可以通过 GameServerManager.inviteFriend 发出邀请,该接口只接受一个参数 openId
代表被邀请方的 openId。
gameServerManager.inviteFriend({ openId })
提示 如果需要在邀请时附带额外的邀请信息,请通过游戏域接口 GameServerManager.setInviteData 实现。
# 接受邀请
好友 B 需要在游戏域监听事件 GameServerManager.onInvite 来获取邀请信息。需要注意的是,邀请信息到达 B 之后,玩家 B 会首先收到一个弹窗确认是否接受邀请,只有当邀请被接受之后,开发者才能收到这个事件的回调,如果拒绝,则不会触发回调。
gameServerManager.onInvite(res => {
console.log('该玩家接受了来自用户', res.openId, '的邀请')
console.log('本次邀请的附加信息', res.data)
})
注意 请保证小游戏生命周期内至多监听一个 onInvite 事件。
# 代码片段
我们提供了完整可运行的代码片段,可以预览代码片段并在真机进行好友邀请体验