1. 程式人生 > >Unity3d ╋ QuickSDK接入教程總篇

Unity3d ╋ QuickSDK接入教程總篇

Unity3d ╋ QuickSDK接入教程總篇

隨著渠道資源越來越豐富,SDK的接入也變得也來越複雜,100個SDK接入能把程式設計師整瘋,因此很多聚合SDK應運而生,像稜鏡SDK,易接等等。今天主要介紹的是另外一款QuickSDK,功能與前面說的類似,因為專案用到,所以在這裡把接入經驗跟大家分享一下。

1.SDK接入流程(部分QuickSDK及遊戲客戶端程式碼)

SDK接入流程都是大同小異,主要包括登入和支付,以下是登入流程:

1.開啟SDK客戶端介面:程式碼呼叫SDK客戶端提供的登入方法。將玩家在SDK客戶端介面中輸入的玩家名稱與密碼傳遞給SDK暴露的方法。

    /// <summary>
    /// 登入賬號
    /// </summary>
    public void OnClickLoginAccount()
    {
        Debug.LogError("AndroidSDKManager2 : OnClickLoginAccount");
        QuickSDK.getInstance().login();
    }

2.SDK客戶端向SDK伺服器請求:SDK客戶端向SDK伺服器傳遞玩家輸入的使用者名稱,密碼等資訊。同時還需要傳遞APP資訊,比如APPID,APPKEY等驗證資訊。這些資訊能夠標識唯一的應用。

3.SDK伺服器會向SDK客戶端返回:token值儲存了玩家的驗證資訊。以上就是一個SDK伺服器返回的資訊。這個資訊包含了APPID(APP的唯一標識),data(根據使用者名稱,密碼等資訊進行的加密資料),time(請求時間)。

4. SDK客戶端將token值等資料傳遞給遊戲客戶端,遊戲客戶端再將資料傳遞給遊戲伺服器。遊戲伺服器拿到遊戲客戶端返回的資料之後,將資料傳遞給SDK伺服器進行驗證。

​
/// <summary>
/// 登入成功回撥
/// </summary>
/// <param name="userInfo"></param>
public override void onLoginSuccess(UserInfo userInfo)
{
        WindowManager.CloseWaittingWindow();
        AndroidSDKManager2.Instance.LoginState = SDK_LOGIN_STATES.SUCCESSFUL;
        JsonData jd = new JsonData();
        jd["sid"] = userInfo.token;
        jd["app_id"] = "";
        jd["channel"] = QuickSDK.getInstance().channelType().ToString();//渠道型別
        jd["sub_channel"] = QuickSDK.getInstance().channelType().ToString();
        jd["channel_name"] = QuickSDK.getInstance().channelName();//渠道名稱
        jd["device_id"] = GameMain.MacAddress;
        //jd["uid"] = userInfo.uid;//賬戶id
        jd["uid"] = QuickSDK.getInstance().userId();//渠道id
        Debug.LogError("渠道id:" + QuickSDK.getInstance().userId());
        AndroidSDKManager2.Instance.GetKeySuc = false;
        HttpLite.HttpRequest(REQUEST_URL_FOR_LAST_LOGIN_SETTING, GetUserLastLoginSetting, jd.ToJson());
        WindowManager.OpenWaitServerWindow();
}

5. SDK伺服器對遊戲伺服器傳遞過來的資料進行驗證後,將驗證結果返回給遊戲伺服器。文件:https://www.quicksdk.com/doc-15.html

http://checkuser.sdk.quicksdk.net/v2/[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]&uid=D2A864635A709FD302080B508FF98D49&product_code=64345624204336603757759703868145

6. 遊戲伺服器拿到SDK伺服器返回的登入驗證結果(如果成功,SDK伺服器則會返回類似channelId和userId的東西,以便對此使用者進行唯一標示)。對登入結果的資料進行自定義的拼接,已生成一個唯一ID,在此我們給這個唯一的ID起名叫login_key。然後把這個playerId在伺服器進行儲存,並將登入的結果和login_key返回給客戶端。至此,一個SDK的登入流程就已經完成了。

進入遊戲有兩種方式,都是利用伺服器發過來的login_key值:

  • 登入成功之後直接呼叫進入遊戲程式碼,進入遊戲
  • 登入成功之後介面上存在登入按鈕,點選進入遊戲

以下是支付流程:

簡單介紹支付流程中的9個步驟:

在支付模組中,我們並沒有像登入模組一樣把遊戲邏輯與整合SDK放在一起,而是把SDK與SDK伺服器放在了一起,因為我並不確定SDK與SDK伺服器之間的具體通訊步驟。

由於現在只接了Apple的支付,所以支付伺服器是Apple伺服器。

支付伺服器也可以是支付寶,銀聯等伺服器。

1. 當用戶在商城中點選支付按鈕時,遊戲客戶端向遊戲伺服器傳送訊息,告知伺服器購買的是什麼商品。

我們的方法時為買個付費點分配一個唯一ID,遊戲客戶端向伺服器傳送這個唯一ID,由伺服器向客戶端返回具體資訊。

2. 遊戲伺服器接收到客戶端傳送的唯一ID後,由遊戲伺服器向遊戲客戶端返回訂單相關的資訊(比如,訂單號、價格、商品、購買時間等資訊)。

3. 遊戲客戶端接收到遊戲伺服器返回的資訊後,通過呼叫SDK暴露的方法進行支付。

4. 支付伺服器對SDK傳送的訂單資訊進行處理。

此後還會回撥SDK的方法,彈出支付介面讓使用者支付,這個過程不是我們所關心的,所以不新增這個過程。

5. 支付伺服器對使用者輸入的賬號,密碼進行驗證,將登入結果返回給SDK。

6. SDK會將支付結果返回給遊戲客戶端和遊戲伺服器。

這個過程並不能保證先後順序

7. 遊戲伺服器接收到SDK返回的支付結果後,會在後臺將相關的道具加到這個使用者的資料庫中。

8. 遊戲客戶端此時雖然支付成功,但是沒有及時同步道具。

所以此時客戶端要每隔一段時間向伺服器進行請求(規定請求間隔與最大請求次數)。

直到遊戲伺服器將購買的道具同步到客戶端為止。