登錄與鑑權
玩一玩平臺登錄是依賴於QQ服務號
,類似微信公衆號的授權登錄,只是玩一玩平臺在後臺自動獲取用戶對應的openId
。
下面是詳細的流程
遊戲加載流程
遊戲加載主要分爲兩個階段,準備階段 是由手Q進行,開發者無需理會,執行階段爲開發者可控制
的階段。
引擎啓動後,會從手Q和後臺中獲取當前遊戲ID(gameId),用戶ID(openId)等信息,並將這些參數寫入到JS引擎的全局變量GameStatusInfo
中(後面會詳細介紹),並執行遊戲對應的main.js
文件。開發可從該參數中獲取相關的遊戲變量。
H5開發者概念轉換
- 對於H5遊戲開發者而言,不像傳統h5平臺,客戶端層不會爲每個遊戲分配
openkey
與appid
用於啓動時的校驗。客戶端腳本運行時可以完全信任此時環境爲手Q - 對於自建後臺的玩一玩開發者而言,也有一個
openkey
的概念,此openkey
是每個用戶不同的,並非每個遊戲都是唯一的。通過傳遞此參數,客戶端和服務器端都可以向玩一玩後臺對該用戶的身份進行校驗,確認其爲合法的手Q用戶。
重要變量說明
GameStatusInfo
有關遊戲的全局變量,類似於H5中windows對象。
openId
用戶的唯一標識
gameId
遊戲的唯一標識
openKey
用戶自建服務器鑑權密鑰。傳輸數據時帶給後臺,通過校驗openKey,確保接口調用方確定爲手Q用戶。
全局變量GameStatusInfo
遊戲啓動後,引擎會爲開發者寫入名爲GameStatusInfo的有關遊戲的全局參數,從中可獲取有關用戶標識符、機型、等參數
變量 | 類型 | 名稱 | 備註 |
---|---|---|---|
gameId | number | 遊戲id | 遊戲的唯一標識 |
isMaster | number | 是否是房主 | 1爲房主,0爲參加者 |
roomId | number | 房間號 | 房主時爲0,參加者時爲具體房間號 |
gameVersion | string | 遊戲版本號 | 與遊戲包強綁定的版本號,手Q測依賴此進行版本更新 |
platform | string | 平臺類型 | 取值爲 “ios”或”android” |
openId | string | 當前用戶的標識 | 用戶的唯一標識 |
QQVer | string | 手機qq版本 | 形如”7.1.0.0” |
isFirstInstall | number | 是否首次安裝 | 1爲首次安裝,0非首次安裝 |
isFirstPlay | number | 是否第一次打開 | 1爲第一次玩遊戲 0非第一次。使用BK.Room的成員函數startGame後,置爲0 |
networkType | number | 網絡類型 | 遊戲啓動時的網絡類型。 1 電信 ,2 聯通 ,3 移動 0: wifi或未知 |
src | number | 遊戲啓動入口 | 100:實時PK,200:聊天窗遊戲消息 |
spriteDesignHeight | number | 釐米秀小人spine動畫的設計高度 | 具體查看釐米秀骨骼動畫章節 |
skltPath | Object | 釐米秀小人spine骨骼 | 具體查看釐米秀骨骼動畫章節 |
dressPath | Array | 釐米秀衣服路徑 | 具體查看釐米秀骨骼動畫章節 |
sex | number | 性別 | 1 男 2 女 |
osVersion | string | 操作系統版本 | 例如”11.3” 表示iOS 11.3 |
gameParam | string | 擴展參數 | 當使用其他玩家使用BK.QQ.shareToArk分享至手Q,並且填充擴展字段時,當前玩家就能從此處獲取該數據。 詳情 |
獲取openId的示例代碼如下:
var openId = GameStatusInfo.openId; //獲取當前用戶的唯一標識
獲取openKey
GameStatusInfo中無openKey參數,使用如下例子可獲取。
BK.Script.loadlib("GameRes://qqPlayCore.js") //預加載bricks js層接口
BK.QQ.fetchOpenKey(function (errCode, cmd, data) {
if (errCode == 0) {
var openKey = data.openKey;
}
});
框架與生命週期
bricks引擎代碼包含原生以及JS層部分,舊版本開發者引用protocol.js來進行引擎JS層接口的引用。新的開發者推薦使用qqPlayCore.js文件進行引用。單獨引用protocol.js的方法也可以正常使用。
protocol.js爲qqPlayCore.js的子集,除此外qqPlayCore.js還包含webscoket.js、Game.js等文件。
推薦使用 BK.Script.loadlib('GameRes://qqPlayCore.js');
遊戲配置
遊戲包中使用gameConfig.json進行遊戲整體配置
參數 | 說明 | 備註 |
---|---|---|
enterUrl | H5遊戲鏈接地址 | H5遊戲必填。非H5遊戲不填 |
viewMode | 控制橫豎屏狀態 | 1.豎屏 2.左橫屏(home鍵在左邊)3.右橫屏(home鍵在右邊) |
簡單示例
{
"enterUrl":"", //H5遊戲鏈接地址,H5遊戲必填。非H5遊戲不填
"viewMode":1 //控制橫豎屏狀態:1.豎屏 2.左橫屏(home鍵在左邊)3.右橫屏(home鍵在右邊)
}
UI處理與生命週期
7.5.8及以上版本,去掉遊戲自己的關閉&縮小按鈕,並根據統一的關閉縮小按鈕的位置對遊戲UI做相應處理
點擊右上方分享後再調用分享接口不生效,就是沒有實現生命週期方法導致的
開發者使用BK.Game類可以後可以監聽整體遊戲生命流程。
- 程序啓動,觸發onLoad函數
- 點擊”收起遊戲”,觸發onMinmize函數
- 點擊”關閉”圖標,觸發onClose函數,開發者需處理銷燬動作:上報用戶成績 如果不上報成績面板消息狀態將不會改變
- 用戶按home鍵將手Q退至後臺,觸發onEnterbackground函數
- 手Q進程從後臺回到前臺,觸發onEnterforeground函數
遊戲入口場景值
在手Q中,遊戲可能會在不同的入口中被呼起,開發者通過GameStatusInfo.src 參數處理用戶打開遊戲時體驗。
大多數情況情況直接打開遊戲大廳即可,在少數情況需特殊處理(聊天界面消息)
實例代碼如下
var SRC_AIO_BUBBLE_NORMAL = 200, //聊天窗遊戲消息
var SRC_AIO_BUBBLE_SHARE = 201, //分享消息
var src = GameStatusInfo.src;
//聊天窗遊戲消息
if (src == 200 /* SRC_AIO_BUBBLE_NORMAL */) {
//
var room = new BK.Room();
var roomId = GameStatusInfo.roomId;
var gameId = GameStatusInfo.gameId;
var openId = GameStatusInfo.openId;
//從聊天入口進入遊戲,優先加入房間,如加入房間失敗,則跳轉至遊戲大廳
room.queryAndJoinRoom(gameId, roomId, openId, function (statusCode, room) {
if (statusCode == 0) {
//正常加入房間
}
else {
//跳轉至遊戲大廳
}
};
}
//聊天面板中的大廳與 動態-玩一玩入口的 可以統一進入遊戲主頁
else {
//加載遊戲主頁
}
不同的場景值列表如下GameStatusInfo.src
場景值 | 場景描述 | 期望體驗 |
---|---|---|
100 | AIO面板點擊開始遊戲 | 進入遊戲大廳 |
108 | AIO面板點擊大面板小房子按鈕 | 進入遊戲大廳 |
110 | AIO消息流文字識別 | 進入遊戲大廳 |
202 | 熱聊folder中點擊進入遊戲按鈕 | 進入遊戲大廳 |
207 | 舊版玩一玩WEB頁面啓動遊戲 | 進入遊戲大廳 |
208 | 新版玩一玩WEB頁面啓動遊戲 | 進入遊戲大廳 |
209 | 釐米城WEB頁面啓動遊戲 | 進入遊戲大廳 |
220 | 掃描二維碼打開遊戲 | 進入遊戲大廳 |
200 | 點擊AIO遊戲邀請消息 | 判斷roomid若可加入則直接加入遊戲不可加入相應提示後打開大廳” |
204 | 在微信點擊遊戲邀請後打開手Q後啓動遊戲 | 同200 |
203 | 同200 | 將在手Q7.6.0後廢棄 |
201 | 點擊AIO遊戲分享消息 | 根據拓展數據做相應處理 |
如有疑問歡迎留言討論