玩一玩登入鑑權與生命週期
登入與鑑權
玩一玩平臺登入是依賴於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遊戲分享訊息 | 根據拓展資料做相應處理 |
如有疑問歡迎留言討論