要作這個好友排行榜.必然要有好友的戰績比分,而後再作排序,最後將數據呈如今UI上 , 能夠分爲下面幾個步驟:bash
保存每一個用戶的分數,須要調用微信的雲存儲API,將用戶的分數持久化的存起來 .服務器
// 保存用戶數據,注意限制單條數據容量不得超過1024字節,
// 單個用戶數據總條數不得超過128條
wx.setUserCloudStorage(Object)複製代碼
//存儲最高分
var score = 100;
var kvScore = {"key":"score","value":score};
wx.setUserCloudStroage({"KVDataList":[kvScore]},"success":function(){
//
});複製代碼
遊戲中將玩家的分數保存起來之後,須要調用微信的雲存儲API wx.getFirendCloudStorage
, 獲取玩家的微信好友數據,這樣就拿到了每一個好友的最高分.微信
值得一提的是,微信的這個接口在內部隱蔽的使用其微信的社交關係鏈 .ui
返回列表中的包含的 調用過wx.setUserCloudStroage
這個接口的用戶.spa
對分數進行排序 , 獲得一個排行榜code
let sharedCanvas = wx.getSharedCanvas()
function drawRankList (data) {
data.forEach((item, index) => {
// ...
})
}
wx.getFriendCloudStorage({
success: res => {
let data = res.data
drawRankList(data)
}
})複製代碼
注意這個 sharedCanvas
, 這是獨有的畫布 ,與小遊戲中的畫布不是同一個東東.
cdn
使用sharedCanvas來自定義顯示玩家的用戶排行榜blog
上述所涉及的微信接口 , 都只能在微信小遊戲的 子域
使用 , 微信官網也稱之爲開放數據域
, 其實應該稱之爲 封閉數據域
.
爲何這麼說呢?
由於子域的js代碼執行環境和小遊戲自己的代碼執行環境是隔離的. 二者之間不能相通 , 子域只能接收外部的消息(如遊戲的最高分),不能往外發消息(不能把用戶的好友關係鏈數據發給開發者服務器) , 內存不共享,也就意味着,開發者拿不到微信的社交關係鏈數據 . 在這樣的封閉條件下,開發者能作的只能是在子域的畫布上將排行榜數據以個性化的UI元素展現出來 .排序