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
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. 遊戲客戶端此時雖然支付成功,但是沒有及時同步道具。
所以此時客戶端要每隔一段時間向伺服器進行請求(規定請求間隔與最大請求次數)。
直到遊戲伺服器將購買的道具同步到客戶端為止。