微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲是小程序的一個類目,微信用戶完成微信小程序注冊后,可選擇“游戲”類目并開始開發(fā)及調(diào)試微信小游戲【珠海微信小程序建設(shè)電話】,為了豐富微信游戲的社交玩法,微信團隊提供了獲取關(guān)系鏈數(shù)據(jù)的API接口,可獲取當前用戶也玩該小游戲的好友的用戶數(shù)據(jù)。

珠海微信小程序建設(shè):微信小程序游戲關(guān)系鏈數(shù)據(jù)API接口使用指南
微信小游戲接入指南
注冊小程序帳號:在微信公眾平臺官網(wǎng)首頁(mp.weixin.qq.com)點擊右上角的“立即注冊”按鈕。
選擇注冊的帳號類型:選擇“小程序”,點擊“查看類型區(qū)別”可查看不同類型帳號的區(qū)別和優(yōu)勢。
填寫郵箱和密碼:請?zhí)顚懳醋赃^公眾平臺、開放平臺、企業(yè)號、未綁定個人號的郵箱。
激活郵箱:登錄郵箱,查收激活郵件,點擊激活鏈接。
填寫主體信息:點擊激活鏈接后,繼續(xù)下一步的注冊流程。請選擇主體類型選擇,完善主體信息和管理員信息。
填寫主體信息并選擇驗證方式:企業(yè)類型帳號可選擇兩種主體驗證方式。 方式一:需要用公司的對公賬戶向騰訊公司打款來驗證主體身份。打款信息在提交主體信息后可以查看到。 方式二:通過微信認證驗證主體身份,需支付300元認證費。認證通過前,小程序部分功能暫無法使用。
關(guān)系鏈數(shù)據(jù)使用指南
一個微信用戶的關(guān)系鏈數(shù)據(jù)包括兩部分:
- 該用戶好友的用戶數(shù)據(jù) 
- 該用戶所在的某個群的群成員的用戶數(shù)據(jù)。 
為了豐富游戲的社交玩法,我們提供了獲取關(guān)系鏈數(shù)據(jù)的 API:
- wx.getFriendCloudStorage() 獲取當前用戶也玩該小游戲的好友的用戶數(shù)據(jù) 
- wx.getGroupCloudStorage() 獲取當前用戶在某個群中也玩該小游戲的成員的用戶數(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() 可以將當前用戶的游戲數(shù)據(jù)托管在微信后臺。只有被托管過數(shù)據(jù)的用戶,才會被視為 玩過 該小游戲的用戶,才會出現(xiàn)在 wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 返回的對象數(shù)組中。
除此之外,我們還提供了以下 API:
- wx.removeUserCloudStorage() 刪除用戶托管數(shù)據(jù)中指定字段的數(shù)據(jù) 
- wx.getUserCloudStorage() 獲取當前用戶的托管數(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)限制
當小游戲啟動開放數(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() 
掃二維碼手機查看該文章

 


 
 在線咨詢
在線咨詢 電話咨詢
電話咨詢



