QQ玩一玩好友排行榜與世界排行榜
1、開發環境
CocosCreator V2.0.5
手Q版本 V7.9.0.3820(目前市場中最新版本)
qqPlayCore.js buildTime:'Fri Nov 09 2018 13:20:45 GMT+0800 (GMT+08:00)'上出現,此版本的qqPlayCore.js也是最新能正常使用的版本。
2、常見問題
- 如何實現好友排行榜
- 如何實現世界排行榜
- 如何上報玩家成績
- 如何獲取用戶圖像
- 在CocosCreator中如何加載用戶的圖像
3、實現好友排行榜
QQ輕遊戲平臺提供成績上報與排行榜接口,用於遊戲內成績的上報與排行。
開發者通過使用上報接口進行數據上報後,通過排行榜接口進行成績的拉取與展示。
3.1 錯誤碼列表
3.2 支持兩種特性
-
支持多榜單同時上報
scoreInfo
中score字段爲默認榜單,a1,a2,……,a16爲開發者可使用的 榜單key字段,不允許使用其他key目前最多支持16個榜單,
scoreInfo
中的key字段值類型必須是整型數 -
支持多榜單排序方式
對應
data.attr
中的字段1: 從大到小,即每次上報的分數都會與本週期的最高得分比較,如果大於最高得分則覆蓋,否則忽略
2: 從小到大,即每次上報的分數都會與本週期的最低得分比較,如果低於最低得分則覆蓋,否則忽略
比如酷跑類遊戲的耗時,時間越短越好
3: 累積,即每次上報的積分都會累積到本週期已上報過的積分上(本質上是從大到小的一種特例)
4: 直接覆蓋,每次上報的積分都會將本週期的得分覆蓋,不管大小
3.3 成績數據上報
/**
* 成績上報
* @param {*} level
* @param {*} callback
*/
function uploadScore(level, callback) {
if (cc.sys.platform != cc.sys.QQ_PLAY) {
if (callback) {
callback(-1, "此接口只支持QQ玩一玩平臺");
}
return;
}
var data = {
userData: [{
openId: GameStatusInfo.openId,
startMs: Global.startGameTime,
endMs: ((new Date()).getTime()).toString(),
scoreInfo: {
score: level,//分數,類型必須是整型數
// 多榜單附加屬性(選填),最多16個,且名稱必須爲a1 ~ a16,類型必須是整型數
//a1: 100,
//...
//a16: 100
},
}, ],
// type 描述附加屬性的用途
// order 排序的方式,
// 1: 從大到小,即每次上報的分數都會與本週期的最高得分比較,如果大於最高得分則覆蓋,否則忽略
// 2: 從小到大,即每次上報的分數都會與本週期的最低得分比較,如果低於最低得分則覆蓋,否則忽略
// 3: 累積,即每次上報的積分都會累積到本週期已上報過的積分上(本質上是從大到小的一種特例)
// 4: 直接覆蓋,每次上報的積分都會將本週期的得分覆蓋,不管大小
// 如score字段對應,上個屬性.
attr: {
score: {
type: 'rank',
order: 1,
}
//如果要支持多榜單在此添加 a1~a16
//a1: {
// type: 'rank',
// order: 2,
//}
},
};
// gameMode: 遊戲模式 1:普通,2:挑戰,如果沒有模式區分,直接填1
// 必須配置好週期規則後,才能使用數據上報和排行榜功能
BK.QQ.uploadScoreWithoutRoom(1, data, function (errCode, cmd, data) {
log("uploadScoreWithoutRoom callback cmd" + cmd + " errCode:" + errCode + " data:" + JSON.stringify(data));
if (callback) {
callback(errCode, data);
}
});
}
3.4 何時上報玩家成績
建議在以下兩個時間點上報玩家成績
- 當局遊戲結束時
- 退出遊戲時
當局遊戲結束時需要開發者主動調用上報操作,退出遊戲時上報需要監聽QQ玩一玩生命週期來實現,參考示例如下。
_gameCloseListener() {
//上報操作
let score = Utils.getRandomInt(0, 100);
BKTools.log('關閉遊戲:' + score);
BKTools.uploadScore(score, function (errorCode) {
if (errorCode == 0) {
BKTools.log("數據上報成功......");
} else {
BKTools.log("數據上報失敗......");
}
});
},
QQ玩一玩生命週期監聽具體實現邏輯參考之前寫的博客 QQ玩一玩廣告與音效使用總結
3.5 拉取排行榜數據
排行榜數據提供 暱稱、頭像url、積分 三種數據。此接口不提供openId與暱稱、頭像的對應關係
圖像URL參考:http://thirdqq.qlogo.cn/g?b=sdk&k=OiaMLzXmbEwq5trqsR6zd1A&s=100&t=1483310911
如果要獲取多榜單數據可以多次調用此接口,只是 attr、order
這兩個參數需要根據實際排行榜需求設置不同的值,rankType
目前爲固定值0(好友排行榜)
/**
* 拉取排行榜數據
* @param {*} callback
*/
function getRankList(callback,attr,order) {
if (cc.sys.platform != cc.sys.QQ_PLAY) {
if (callback) {
callback(-1, "此接口只支持QQ玩一玩平臺");
}
return;
}
if(!attr){
attr = "score";//使用哪一種上報數據做排行,可傳入score,a1,a2等
}
if(!order){
order = 1;//排序的方法:[ 1: 從大到小(單局),2: 從小到大(單局),3: 由大到小(累積)]
}
let rankType = 0;//要查詢的排行榜類型,0: 好友排行榜 目前是固定值
BK.QQ.getRankListWithoutRoom(attr, order, rankType, function (errCode, cmd, data) {
log("getRankListWithoutRoom callback cmd" + cmd + " errCode:" + errCode);
if (errCode != 0) {
callback(errCode);
return;
}
if (data) {
let rankList = data.data.ranking_list;
log("data not null " + rankList.length);
log(JSON.stringify(data));
// rankList.forEach(element => {
// log("....華麗的分割線....");
// log("score:" + element.score);
// log("nick:" + element.nick);
// log("....華麗的分割線....");
// });
if (callback) {
callback(errCode, rankList);
}
}
});
}
3.6 拉取排行榜使用示例
BKTools.getRankList(function (errorCode, rankList) {
if (errorCode == 0) {
if (rankList && rankList.length > 0) {
rankList.forEach(element => {
BKTools.log("item:" + JSON.stringify(element));
});
} else {
BKTools.log("....排行榜爲空....");
}
} else {
BKTools.log("....獲取排行榜失敗....");
}
}.bind(this));
3.7 好友排行榜圖像顯示
Utils.loadImgByUrl(this.image, "http://thirdqq.qlogo.cn/g?b=sdk&k=OiaMLzXmbEwq5trqsR6zd1A&s=100&t=1483310911");
具體實現可以參考之前寫的博客 QQ 玩一玩獲取用戶圖像暱稱以及CocosCreator動態加載網絡圖片
4、實現世界排行榜
實現世界排行榜就需要後臺的支持了,簡單的介紹一下實現邏輯
- 玩家打開遊戲時通過全局參數獲取到openId
- 通過openId獲取用戶的暱稱
- 將openId以及用戶信息關聯上報後臺
- 遊戲結束時調用後臺接口上報成績
- 獲取世界排行榜就可以通過後臺提供的接口來查詢到所有玩家的openId、暱稱等(全局參數能獲取到的數據都能作爲排行榜排序的依據)
- 獲取圖像可以使用 BK.MQQ.Account.getHeadEx(openID,callback) 此接口會獲取頭像並寫到本地目錄
全局參考獲取可以參考 QQ玩一玩廣告與音效使用總結
獲取用戶圖像並顯示可以參考 QQ 玩一玩獲取用戶圖像暱稱以及CocosCreator動態加載網絡圖片
5、相關參考資料
CocosCreator開發小遊戲示例:Brickengine_Guide
- QQPlay爲舊版本QQ玩一玩示例
- QQPlay_New爲新版本QQ玩一玩示例
官方文檔 關係鏈與用戶信息
官方文檔 成績上報與排行榜
官方文檔 排行榜/雲端存儲錯誤碼
完
到這裏就介紹完了,個人能力有限如有錯誤歡迎指正,如有遺漏歡迎補充。如有疑問歡迎留言一起交流討論。