微信小程序游戏关系链数据API接口使用指南
微信小游戏是小程序的一个类目,微信用户完成微信小程序注册后,可选择“游戏”类目并开始开发及调试微信小游戏【珠海微信小程序建设电话】,为了丰富微信游戏的社交玩法,微信团队提供了获取关系链数据的API接口,可获取当前用户也玩该小游戏的好友的用户数据。
珠海微信小程序建设:微信小程序游戏关系链数据API接口使用指南
微信小游戏接入指南
注册小程序帐号:在微信公众平台官网首页(mp.weixin.qq.com)点击右上角的“立即注册”按钮。
选择注册的帐号类型:选择“小程序”,点击“查看类型区别”可查看不同类型帐号的区别和优势。
填写邮箱和密码:请填写未注册过公众平台、开放平台、企业号、未绑定个人号的邮箱。
激活邮箱:登录邮箱,查收激活邮件,点击激活链接。
填写主体信息:点击激活链接后,继续下一步的注册流程。请选择主体类型选择,完善主体信息和管理员信息。
填写主体信息并选择验证方式:企业类型帐号可选择两种主体验证方式。 方式一:需要用公司的对公账户向腾讯公司打款来验证主体身份。打款信息在提交主体信息后可以查看到。 方式二:通过微信认证验证主体身份,需支付300元认证费。认证通过前,小程序部分功能暂无法使用。
关系链数据使用指南
一个微信用户的关系链数据包括两部分:
该用户好友的用户数据
该用户所在的某个群的群成员的用户数据。
为了丰富游戏的社交玩法,我们提供了获取关系链数据的 API:
wx.getFriendCloudStorage() 获取当前用户也玩该小游戏的好友的用户数据
wx.getGroupCloudStorage() 获取当前用户在某个群中也玩该小游戏的成员的用户数据
这两个 API 的返回结果都是一个对象数组,数组的每一个元素都是一个表示用户数据的对象,其结构如下:
属性 | 类型 | 说明 |
---|---|---|
openId | string | 用户的 openId |
avatarUrl | string | 用户的微信头像 url |
nickName | string | 用户的微信昵称 |
data | Object | 用户的游戏数据 |
用户的 游戏数据 指的是用户的段位、战绩等游戏业务特有的数据,通过调用 wx.setUserCloudStorage() 可以将当前用户的游戏数据托管在微信后台。只有被托管过数据的用户,才会被视为 玩过 该小游戏的用户,才会出现在 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 返回的对象数组中。
除此之外,我们还提供了以下 API:
wx.removeUserCloudStorage() 删除用户托管数据中指定字段的数据
wx.getUserCloudStorage() 获取当前用户的托管数据
wx.getUserCloudStorage、wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 只能在 开放数据域 中调用。
wx.setUserCloudStorage() 和 wx.removeUserCloudStorage() 可以同时在 主域 和开放数据域中调用。
开放数据域
开放数据域 是一个封闭、独立的 JavaScript 作用域。要让代码运行在开放数据域,需要在 game.json 中添加配置项 openDataContext 指定开放数据域的代码目录。添加该配置项表示小游戏启用了开放数据域,这将会导致一些 限制。
{ "deviceOrientation": "portrait", "openDataContext": "src/myOpenDataContext" }
同时还需要在该目录下创建 index.js 作为开放数据域的入口文件,其代码运行在开放数据域。game.js 是整个游戏的入口文件,其代码运行在 主域。对应以上配置,应该有如下的目录结构:
├── src | └── myOpenDataContext | ├── index.js | └── ... ├── game.js ├── game.json └── ...
src/myOpenDataContext 是 开放数据域的代码目录,除 src/myOpenDataContext 以外是 主域的代码目录。
主域和开放数据域中的代码不能相互 require。以如下的目录结构为例:
├── src | └── myOpenDataContext | ├── index.js | ├── util.js | └── ... ├── lib | └── render.js └── game.js
在 game.js 中不能 require('src/myOpenDataContext/util')
在 src/myOpenDataContext/index.js 中不能 require('../../lib/render.js')
主域和开放数据域的通信
开放数据域不能向主域发送消息。
主域可以向开放数据域发送消息。调用 wx.getOpenDataContext() 方法可以获取开放数据域实例,调用实例上的 OpenDataContext.postMessage() 方法可以向开放数据域发送消息。
// game.js let openDataContext = wx.getOpenDataContext() openDataContext.postMessage({ text: 'hello', year: (new Date()).getFullYear() })
在开放数据域中通过 wx.onMessage() 方法可以监听从主域发来的消息。
// src/myOpenDataContext/index.js wx.onMessage(data => { console.log(data) /* { text: 'hello', year: 2018 } */ })
展示关系链数据
如果想要展示通过关系链 API 获取到的用户数据,如绘制排行榜等业务场景,需要将排行榜绘制到 sharedCanvas 上,再在主域将 sharedCanvas 渲染上屏。
// src/myOpenDataContext/index.js let sharedCanvas = wx.getSharedCanvas() function drawRankList (data) { data.forEach((item, index) => { // ... }) } wx.getFriendUserGameData({ success: res => { let data = res.data drawRankList(data) } })
sharedCanvas 是主域和开放数据域都可以访问的一个离屏画布。在开放数据域调用 wx.getSharedCanvas() 将返回 sharedCanvas。
// src/myOpenDataContext/index.js let sharedCanvas = wx.getSharedCanvas() let context = sharedCanvas.getContext('2d') context.fillStyle = 'red' context.fillRect(0, 0, 100, 100)
在主域中可以通过开放数据域实例访问 sharedCanvas,通过 drawImage() 方法可以将 sharedCanvas 绘制到上屏画布。
// game.js let openDataContext = wx.getOpenDataContext() let sharedCanvas = openDataContext.canvas let canvas = wx.createCanvas() let context = canvas.getContext('2d') context.drawImage(sharedCanvas, 0, 0)
限制
当小游戏启动开放数据域,即在 game.json 中添加 openDataContext 配置项时。小游戏环境会对主域和开放数据域应用一些限制。
主域
sharedCanvas 只能被绘制到上屏 canvas 上。
上屏 canvas 不能调用 toDataURL,其 context 不能调用 getImageData。
sharedCanvas 不能调用 toDataURL 和 getContext。
不能将上屏 canvas 和 sharedCanvas 以任意形式绘制到其他 canvas 上,包括 drawImage、createPattern、texImage2D、texSubImage2D。
开放数据域
开放数据域只能调用有限的 API,如下所示:
帧率
requestAnimationFrame()
cancelAnimationFrame()
Timer
setTimeout()
clearTimeout()
setInterval()
clearInterval()
触摸事件
wx.onTouchStart()
wx.onTouchMove()
wx.onTouchEnd()
wx.onTouchCancel()
wx.offTouchStart()
wx.offTouchMove()
wx.offTouchEnd()
wx.offTouchCancel()
画布
wx.createCanvas()
开放数据域的所有 canvas 只支持 2d 渲染模式
图片
wx.createImage()
开放数据域的 Image 只能使用本地或微信 CDN 的图片,不能使用开发者自己服务器上的图片。
开放数据
wx.getFriendCloudStorage()
wx.getGroupCloudStorage()
wx.getUserCloudStorage()
wx.setUserCloudStorage()
wx.removeUserCloudStorage()
监听主域消息
wx.onMessage()
扫二维码手机查看该文章