1. 程式人生 > >玩一玩登入鑑權與生命週期

玩一玩登入鑑權與生命週期

登入與鑑權

玩一玩平臺登入是依賴於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遊戲分享訊息 根據拓展資料做相應處理

如有疑問歡迎留言討論