題記:不少作遊戲開發的人,估計都或多或少地接過渠道SDK,什麼UC,當樂,91,小米,360......據統計國內市場當前不下於100家渠道,還包括一些沒有SDK的小渠道。每一個渠道SDK接入的方法呢,可能是大同小異。可是,正是這些小異,又讓SDK的接入,產生了無窮無盡的變數。因此,接入SDK以前,若是你沒有經驗,或者沒有被SDK坑過,那麼當你看到這系列文章的時候,你很幸運,你能夠避免這一切了。若是你以前被坑過,並且還在繼續被坑着,那麼如今,就是你解脫的時刻。html
上一篇文章咱們說了整個U8 SDK抽象成的設計,那這篇文章,咱們就來驗證一下,他是否如咱們期待的那樣,簡單靈活。java
正如以前所說,對於每一個遊戲,只須要接入抽象層,而每一個渠道SDK的接入,就是該抽象層的一個實現而已。最後經過一鍵打包工具來完成最後的產出。那麼,咱們先來看看,遊戲怎麼來調用這個抽象層。android
咱們假設咱們已經開發了一款遊戲,面臨上線,須要接入SDK,須要接入UC,當樂,91,360,小米等渠道。由於採用U8 SDK統一接入框架的思想,遊戲工程自己不耦合具體的每一個渠道SDK,而只是調用U8 SDK抽象層。那麼,根據上一篇文章談到的抽象層,咱們就來看看如何調用。app
首先,咱們用eclipse新建一個Android工程,做爲咱們這個模擬的遊戲工程。這裏須要說一下,若是你不是直接使用Android開發的遊戲,而是採用像Unity3D,Cocos2D等遊戲引擎,其接入也是同樣的。只是多了一層JNI調用。咱們新建一個主運行的Activity:框架
- package com.u8.sdk.demo;
-
- import com.u8.sdk.IU8SDKListener;
- import com.u8.sdk.LoginResult;
- import com.u8.sdk.PayParams;
- import com.u8.sdk.U8SDK;
- import com.u8.sdk.components.U8Pay;
- import com.u8.sdk.components.U8User;
-
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.Intent;
-
- public class MainActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
-
- @SuppressLint("ShowToast")
- @Override
- public void onResult(int arg0, String msg) {
- Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
- }
-
- @SuppressLint("ShowToast")
- @Override
- public void onLoginResult(LoginResult loginResult) {
- Toast.makeText(MainActivity.this, "登陸成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);
- }
- });
-
- Button btn = (Button)findViewById(R.id.button1);
- btn.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- pay();
- }
- });
-
- Button btnLogin = (Button)findViewById(R.id.button2);
- btnLogin.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- login();
-
- }
- });
-
- U8SDK.getInstance().init(MainActivity.this);
-
- }
-
- private void login(){
-
- U8SDK.getInstance().runOnMainThread(new Runnable() {
-
- @Override
- public void run() {
- U8User.getInstance().login();
- }
- });
- }
-
- private void pay(){
- U8SDK.getInstance().runOnMainThread(new Runnable() {
-
- @Override
- public void run() {
- PayParams params = new PayParams();
- params.setPrice(100);
- params.setServerId("1");
- params.setRoleId("1");
- U8Pay.getInstance().pay(params);
- }
- });
- }
-
- public void onActivityResult(int requestCode, int resultCode, Intent data){
- U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
- super.onActivityResult(requestCode, resultCode, data);
- }
- public void onPause(){
- U8SDK.getInstance().onPause();
- super.onPause();
- }
- public void onResume(){
- U8SDK.getInstance().onResume();
- super.onResume();
- }
- public void onNewIntent(Intent newIntent){
- U8SDK.getInstance().onNewIntent(newIntent);
- super.onNewIntent(newIntent);
- }
- public void onStop(){
- U8SDK.getInstance().onStop();
- super.onStop();
- }
- public void onDestroy(){
- U8SDK.getInstance().onDestroy();
- super.onDestroy();
- }
- public void onRestart(){
- U8SDK.getInstance().onRestart();
- super.onRestart();
- }
-
- public void onBackPressed(){
- U8SDK.getInstance().onBackPressed();
- super.onBackPressed();
- }
- }
你們能夠看到,在咱們這個模擬的遊戲中,接入SDK抽象層是一件多麼Easy的事情,就是在onCreate裏面進行初始化操做:
- U8SDK.getInstance().init(MainActivity.this);
同時,如咱們以前所說,咱們是基於監聽器模式的設計,咱們須要設置一個監聽,當具體SDK有狀態變動,成功或者失敗時,咱們能夠獲得具體的信息:
- U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
-
- @SuppressLint("ShowToast")
- @Override
- public void onResult(int arg0, String msg) {
- Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
- }
-
- @SuppressLint("ShowToast")
- @Override
- public void onLoginResult(LoginResult loginResult) {
- Toast.makeText(MainActivity.this, "登陸成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);
- }
- );
其中,onResult在調試的時候,能夠作一個Toast輸出。onLoginResult則是渠道SDK登錄成功時的回調。在這裏就是須要去作咱們以前整個登錄流程裏的第四步(u8appid,sid)訪問U8 Server獲取一個接下來登錄認證使用的一個token。
這樣,初始化就完畢了。而後,就是在須要調用登錄界面的地方,調用:eclipse
- U8User.getInstance().login();
在須要調用支付界面的地方調用:
- U8Pay.getInstance().pay(params);
須要注意的是,這些接口須要在UI 線程中調用,因此,咱們須要使用U8SDK.getInstance().runOnMainThread():
- U8SDK.getInstance().runOnMainThread(new Runnable() {
-
- @Override
- public void run() {
- U8User.getInstance().login();
- }
- );
最後,咱們須要重寫Activity相關的系統事件方法,在對應的方法裏面,加上U8 SDK對應方法的調用。好比:
- public void onPause(){
- U8SDK.getInstance().onPause();
- super.onPause();
- }
這樣,對於咱們這個「遊戲」來講,就算完成了SDK的接入了。你們能夠看到,對於遊戲來講,接入是一件很簡便的事。它不用考慮後面怎麼打包,怎麼生成渠道包,怎麼管理配置,怎麼升級,。。。對於TA,到這裏就結束了。接下來,咱們就要看看,對於一個渠道來講,好比UC,咱們怎麼來接入到這套框架中來呢?