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

登錄與鑑權

玩一玩平臺登錄是依賴於QQ服務號,類似微信公衆號的授權登錄,只是玩一玩平臺在後臺自動獲取用戶對應的openId

下面是詳細的流程

遊戲加載流程

遊戲加載主要分爲兩個階段,準備階段 是由手Q進行,開發者無需理會,執行階段開發者可控制的階段。

引擎啓動後,會從手Q和後臺中獲取當前遊戲ID(gameId),用戶ID(openId)等信息,並將這些參數寫入到JS引擎的全局變量GameStatusInfo中(後面會詳細介紹),並執行遊戲對應的main.js文件。開發可從該參數中獲取相關的遊戲變量。

遊戲加載流程圖

H5開發者概念轉換

  • 對於H5遊戲開發者而言,不像傳統h5平臺,客戶端層不會爲每個遊戲分配openkeyappid用於啓動時的校驗。客戶端腳本運行時可以完全信任此時環境爲手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遊戲分享消息 根據拓展數據做相應處理

如有疑問歡迎留言討論

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章