微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲是小程序的一個類目,微信用戶完成微信小程序注冊后,可選擇“游戲”類目并開始開發(fā)及調(diào)試微信小游戲【珠海微信小程序建設(shè)電話】,為了豐富微信游戲的社交玩法,微信團(tuán)隊提供了獲取關(guān)系鏈數(shù)據(jù)的API接口,可獲取當(dāng)前用戶也玩該小游戲的好友的用戶數(shù)據(jù)。
珠海微信小程序建設(shè):微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲接入指南
注冊小程序帳號:在微信公眾平臺官網(wǎng)首頁(mp.weixin.qq.com)點擊右上角的“立即注冊”按鈕。
選擇注冊的帳號類型:選擇“小程序”,點擊“查看類型區(qū)別”可查看不同類型帳號的區(qū)別和優(yōu)勢。
填寫郵箱和密碼:請?zhí)顚懳醋赃^公眾平臺、開放平臺、企業(yè)號、未綁定個人號的郵箱。
激活郵箱:登錄郵箱,查收激活郵件,點擊激活鏈接。
填寫主體信息:點擊激活鏈接后,繼續(xù)下一步的注冊流程。請選擇主體類型選擇,完善主體信息和管理員信息。
填寫主體信息并選擇驗證方式:企業(yè)類型帳號可選擇兩種主體驗證方式。 方式一:需要用公司的對公賬戶向騰訊公司打款來驗證主體身份。打款信息在提交主體信息后可以查看到。 方式二:通過微信認(rèn)證驗證主體身份,需支付300元認(rèn)證費。認(rèn)證通過前,小程序部分功能暫無法使用。
關(guān)系鏈數(shù)據(jù)使用指南
一個微信用戶的關(guān)系鏈數(shù)據(jù)包括兩部分:
該用戶好友的用戶數(shù)據(jù)
該用戶所在的某個群的群成員的用戶數(shù)據(jù)。
為了豐富游戲的社交玩法,我們提供了獲取關(guān)系鏈數(shù)據(jù)的 API:
wx.getFriendCloudStorage() 獲取當(dāng)前用戶也玩該小游戲的好友的用戶數(shù)據(jù)
wx.getGroupCloudStorage() 獲取當(dāng)前用戶在某個群中也玩該小游戲的成員的用戶數(shù)據(jù)
這兩個 API 的返回結(jié)果都是一個對象數(shù)組,數(shù)組的每一個元素都是一個表示用戶數(shù)據(jù)的對象,其結(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ù)托管在微信后臺。只有被托管過數(shù)據(jù)的用戶,才會被視為 玩過 該小游戲的用戶,才會出現(xiàn)在 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 返回的對象數(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ù)據(jù)域中調(diào)用。
開放數(shù)據(jù)域
開放數(shù)據(jù)域 是一個封閉、獨立的 JavaScript 作用域。要讓代碼運行在開放數(shù)據(jù)域,需要在 game.json 中添加配置項 openDataContext 指定開放數(shù)據(jù)域的代碼目錄。添加該配置項表示小游戲啟用了開放數(shù)據(jù)域,這將會導(dǎo)致一些 限制。
{ "deviceOrientation": "portrait", "openDataContext": "src/myOpenDataContext" }
同時還需要在該目錄下創(chuàng)建 index.js 作為開放數(shù)據(jù)域的入口文件,其代碼運行在開放數(shù)據(jù)域。game.js 是整個游戲的入口文件,其代碼運行在 主域。對應(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)用實例上的 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ù)域都可以訪問的一個離屏畫布。在開放數(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)小游戲啟動開放數(shù)據(jù)域,即在 game.json 中添加 openDataContext 配置項時。小游戲環(huán)境會對主域和開放數(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ī)查看該文章