微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲是小程序的一個(gè)類目,微信用戶完成微信小程序注冊(cè)后,可選擇“游戲”類目并開始開發(fā)及調(diào)試微信小游戲【珠海微信小程序建設(shè)電話】,為了豐富微信游戲的社交玩法,微信團(tuán)隊(duì)提供了獲取關(guān)系鏈數(shù)據(jù)的API接口,可獲取當(dāng)前用戶也玩該小游戲的好友的用戶數(shù)據(jù)。
珠海微信小程序建設(shè):微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲接入指南
注冊(cè)小程序帳號(hào):在微信公眾平臺(tái)官網(wǎng)首頁(mp.weixin.qq.com)點(diǎn)擊右上角的“立即注冊(cè)”按鈕。
選擇注冊(cè)的帳號(hào)類型:選擇“小程序”,點(diǎn)擊“查看類型區(qū)別”可查看不同類型帳號(hào)的區(qū)別和優(yōu)勢(shì)。
填寫郵箱和密碼:請(qǐng)?zhí)顚懳醋?cè)過公眾平臺(tái)、開放平臺(tái)、企業(yè)號(hào)、未綁定個(gè)人號(hào)的郵箱。
激活郵箱:登錄郵箱,查收激活郵件,點(diǎn)擊激活鏈接。
填寫主體信息:點(diǎn)擊激活鏈接后,繼續(xù)下一步的注冊(cè)流程。請(qǐng)選擇主體類型選擇,完善主體信息和管理員信息。
填寫主體信息并選擇驗(yàn)證方式:企業(yè)類型帳號(hào)可選擇兩種主體驗(yàn)證方式。 方式一:需要用公司的對(duì)公賬戶向騰訊公司打款來驗(yàn)證主體身份。打款信息在提交主體信息后可以查看到。 方式二:通過微信認(rèn)證驗(yàn)證主體身份,需支付300元認(rèn)證費(fèi)。認(rèn)證通過前,小程序部分功能暫無法使用。
關(guān)系鏈數(shù)據(jù)使用指南
一個(gè)微信用戶的關(guān)系鏈數(shù)據(jù)包括兩部分:
該用戶好友的用戶數(shù)據(jù)
該用戶所在的某個(gè)群的群成員的用戶數(shù)據(jù)。
為了豐富游戲的社交玩法,我們提供了獲取關(guān)系鏈數(shù)據(jù)的 API:
wx.getFriendCloudStorage() 獲取當(dāng)前用戶也玩該小游戲的好友的用戶數(shù)據(jù)
wx.getGroupCloudStorage() 獲取當(dāng)前用戶在某個(gè)群中也玩該小游戲的成員的用戶數(shù)據(jù)
這兩個(gè) API 的返回結(jié)果都是一個(gè)對(duì)象數(shù)組,數(shù)組的每一個(gè)元素都是一個(gè)表示用戶數(shù)據(jù)的對(duì)象,其結(jié)構(gòu)如下:
屬性 | 類型 | 說明 |
---|---|---|
openId | string | 用戶的 openId |
avatarUrl | string | 用戶的微信頭像 url |
nickName | string | 用戶的微信昵稱 |
data | Object | 用戶的游戲數(shù)據(jù) |
用戶的 游戲數(shù)據(jù) 指的是用戶的段位、戰(zhàn)績等游戲業(yè)務(wù)特有的數(shù)據(jù),通過調(diào)用 wx.setUserCloudStorage() 可以將當(dāng)前用戶的游戲數(shù)據(jù)托管在微信后臺(tái)。只有被托管過數(shù)據(jù)的用戶,才會(huì)被視為 玩過 該小游戲的用戶,才會(huì)出現(xiàn)在 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 返回的對(duì)象數(shù)組中。
除此之外,我們還提供了以下 API:
wx.removeUserCloudStorage() 刪除用戶托管數(shù)據(jù)中指定字段的數(shù)據(jù)
wx.getUserCloudStorage() 獲取當(dāng)前用戶的托管數(shù)據(jù)
wx.getUserCloudStorage、wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 只能在 開放數(shù)據(jù)域 中調(diào)用。
wx.setUserCloudStorage() 和 wx.removeUserCloudStorage() 可以同時(shí)在 主域 和開放數(shù)據(jù)域中調(diào)用。
開放數(shù)據(jù)域
開放數(shù)據(jù)域 是一個(gè)封閉、獨(dú)立的 JavaScript 作用域。要讓代碼運(yùn)行在開放數(shù)據(jù)域,需要在 game.json 中添加配置項(xiàng) openDataContext 指定開放數(shù)據(jù)域的代碼目錄。添加該配置項(xiàng)表示小游戲啟用了開放數(shù)據(jù)域,這將會(huì)導(dǎo)致一些 限制。
{ "deviceOrientation": "portrait", "openDataContext": "src/myOpenDataContext" }
同時(shí)還需要在該目錄下創(chuàng)建 index.js 作為開放數(shù)據(jù)域的入口文件,其代碼運(yùn)行在開放數(shù)據(jù)域。game.js 是整個(gè)游戲的入口文件,其代碼運(yùn)行在 主域。對(duì)應(yīng)以上配置,應(yīng)該有如下的目錄結(jié)構(gòu):
├── src | └── myOpenDataContext | ├── index.js | └── ... ├── game.js ├── game.json └── ...
src/myOpenDataContext 是 開放數(shù)據(jù)域的代碼目錄,除 src/myOpenDataContext 以外是 主域的代碼目錄。
主域和開放數(shù)據(jù)域中的代碼不能相互 require。以如下的目錄結(jié)構(gòu)為例:
├── 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')
主域和開放數(shù)據(jù)域的通信
開放數(shù)據(jù)域不能向主域發(fā)送消息。
主域可以向開放數(shù)據(jù)域發(fā)送消息。調(diào)用 wx.getOpenDataContext() 方法可以獲取開放數(shù)據(jù)域?qū)嵗?,調(diào)用實(shí)例上的 OpenDataContext.postMessage() 方法可以向開放數(shù)據(jù)域發(fā)送消息。
// game.js let openDataContext = wx.getOpenDataContext() openDataContext.postMessage({ text: 'hello', year: (new Date()).getFullYear() })
在開放數(shù)據(jù)域中通過 wx.onMessage() 方法可以監(jiān)聽從主域發(fā)來的消息。
// src/myOpenDataContext/index.js wx.onMessage(data => { console.log(data) /* { text: 'hello', year: 2018 } */ })
展示關(guān)系鏈數(shù)據(jù)
如果想要展示通過關(guān)系鏈 API 獲取到的用戶數(shù)據(jù),如繪制排行榜等業(yè)務(wù)場景,需要將排行榜繪制到 sharedCanvas 上,再在主域?qū)?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 是主域和開放數(shù)據(jù)域都可以訪問的一個(gè)離屏畫布。在開放數(shù)據(jù)域調(diào)用 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)
在主域中可以通過開放數(shù)據(jù)域?qū)嵗L問 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)
限制
當(dāng)小游戲啟動(dòng)開放數(shù)據(jù)域,即在 game.json 中添加 openDataContext 配置項(xiàng)時(shí)。小游戲環(huán)境會(huì)對(duì)主域和開放數(shù)據(jù)域應(yīng)用一些限制。
主域
sharedCanvas 只能被繪制到上屏 canvas 上。
上屏 canvas 不能調(diào)用 toDataURL,其 context 不能調(diào)用 getImageData。
sharedCanvas 不能調(diào)用 toDataURL 和 getContext。
不能將上屏 canvas 和 sharedCanvas 以任意形式繪制到其他 canvas 上,包括 drawImage、createPattern、texImage2D、texSubImage2D。
開放數(shù)據(jù)域
開放數(shù)據(jù)域只能調(diào)用有限的 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()
開放數(shù)據(jù)域的所有 canvas 只支持 2d 渲染模式
圖片
wx.createImage()
開放數(shù)據(jù)域的 Image 只能使用本地或微信 CDN 的圖片,不能使用開發(fā)者自己服務(wù)器上的圖片。
開放數(shù)據(jù)
wx.getFriendCloudStorage()
wx.getGroupCloudStorage()
wx.getUserCloudStorage()
wx.setUserCloudStorage()
wx.removeUserCloudStorage()
監(jiān)聽主域消息
wx.onMessage()
掃二維碼手機(jī)查看該文章