手機sdk 開發

題記:不少作遊戲開發的人,估計都或多或少地接過渠道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:框架

 

[java]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. package com.u8.sdk.demo;  
  2.   
  3. import com.u8.sdk.IU8SDKListener;  
  4. import com.u8.sdk.LoginResult;  
  5. import com.u8.sdk.PayParams;  
  6. import com.u8.sdk.U8SDK;  
  7. import com.u8.sdk.components.U8Pay;  
  8. import com.u8.sdk.components.U8User;  
  9.   
  10. import android.os.Bundle;  
  11. import android.view.View;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14. import android.annotation.SuppressLint;  
  15. import android.app.Activity;  
  16. import android.content.Intent;  
  17.   
  18. public class MainActivity extends Activity {  
  19.   
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.activity_main);  
  24.           
  25.         U8SDK.getInstance().setSDKListener(new IU8SDKListener() {  
  26.               
  27.             @SuppressLint("ShowToast")  
  28.             @Override  
  29.             public void onResult(int arg0, String msg) {  
  30.                 Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);  
  31.             }  
  32.               
  33.             @SuppressLint("ShowToast")  
  34.             @Override  
  35.             public void onLoginResult(LoginResult loginResult) {  
  36.                 Toast.makeText(MainActivity.this, "登陸成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);  
  37.             }  
  38.         });  
  39.           
  40.         Button btn = (Button)findViewById(R.id.button1);  
  41.         btn.setOnClickListener(new View.OnClickListener() {  
  42.               
  43.             @Override  
  44.             public void onClick(View v) {  
  45.                 pay();  
  46.             }  
  47.         });  
  48.           
  49.         Button btnLogin = (Button)findViewById(R.id.button2);  
  50.         btnLogin.setOnClickListener(new View.OnClickListener() {  
  51.               
  52.             @Override  
  53.             public void onClick(View v) {  
  54.                    login();  
  55.                   
  56.             }  
  57.         });  
  58.           
  59.         U8SDK.getInstance().init(MainActivity.this);  
  60.        
  61.     }  
  62.   
  63.     private void login(){  
  64.   
  65.         U8SDK.getInstance().runOnMainThread(new Runnable() {  
  66.               
  67.             @Override  
  68.             public void run() {  
  69.                 U8User.getInstance().login();  
  70.             }  
  71.         });  
  72.     }  
  73.       
  74.     private void pay(){  
  75.         U8SDK.getInstance().runOnMainThread(new Runnable() {  
  76.               
  77.             @Override  
  78.             public void run() {  
  79.                 PayParams params = new PayParams();  
  80.                 params.setPrice(100);  
  81.                 params.setServerId("1");  
  82.                 params.setRoleId("1");  
  83.                 U8Pay.getInstance().pay(params);  
  84.             }  
  85.         });  
  86.     }  
  87.       
  88.     public void onActivityResult(int requestCode, int resultCode, Intent data){  
  89.         U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);  
  90.         super.onActivityResult(requestCode, resultCode, data);  
  91.     }  
  92.     public void onPause(){  
  93.         U8SDK.getInstance().onPause();  
  94.         super.onPause();  
  95.     }  
  96.     public void onResume(){  
  97.         U8SDK.getInstance().onResume();  
  98.         super.onResume();  
  99.     }  
  100.     public void onNewIntent(Intent newIntent){  
  101.         U8SDK.getInstance().onNewIntent(newIntent);  
  102.         super.onNewIntent(newIntent);  
  103.     }  
  104.     public void onStop(){  
  105.         U8SDK.getInstance().onStop();  
  106.         super.onStop();  
  107.     }  
  108.     public void onDestroy(){  
  109.         U8SDK.getInstance().onDestroy();  
  110.         super.onDestroy();  
  111.     }  
  112.     public void onRestart(){  
  113.         U8SDK.getInstance().onRestart();  
  114.         super.onRestart();  
  115.     }  
  116.       
  117.     public void onBackPressed(){  
  118.         U8SDK.getInstance().onBackPressed();  
  119.         super.onBackPressed();  
  120.     }  
  121. }  

 

 

你們能夠看到,在咱們這個模擬的遊戲中,接入SDK抽象層是一件多麼Easy的事情,就是在onCreate裏面進行初始化操做:

 

[java]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. U8SDK.getInstance().init(MainActivity.this);  

 

 

同時,如咱們以前所說,咱們是基於監聽器模式的設計,咱們須要設置一個監聽,當具體SDK有狀態變動,成功或者失敗時,咱們能夠獲得具體的信息:

 

[java]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1.      U8SDK.getInstance().setSDKListener(new IU8SDKListener() {  
  2.   
  3. @SuppressLint("ShowToast")  
  4. @Override  
  5. public void onResult(int arg0, String msg) {  
  6.     Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);  
  7. }  
  8.   
  9. @SuppressLint("ShowToast")  
  10. @Override  
  11. public void onLoginResult(LoginResult loginResult) {  
  12.     Toast.makeText(MainActivity.this, "登陸成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);  
  13. }  
  14. );  

 

 

其中,onResult在調試的時候,能夠作一個Toast輸出。onLoginResult則是渠道SDK登錄成功時的回調。在這裏就是須要去作咱們以前整個登錄流程裏的第四步(u8appid,sid)訪問U8 Server獲取一個接下來登錄認證使用的一個token。

這樣,初始化就完畢了。而後,就是在須要調用登錄界面的地方,調用:eclipse

 

[html]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. U8User.getInstance().login();  

在須要調用支付界面的地方調用:

 

 

[html]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. U8Pay.getInstance().pay(params);  

須要注意的是,這些接口須要在UI 線程中調用,因此,咱們須要使用U8SDK.getInstance().runOnMainThread():

 

 

[java]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1.     U8SDK.getInstance().runOnMainThread(new Runnable() {  
  2.   
  3. @Override  
  4. public void run() {  
  5.     U8User.getInstance().login();  
  6. }  
  7. );  

 

 

最後,咱們須要重寫Activity相關的系統事件方法,在對應的方法裏面,加上U8 SDK對應方法的調用。好比:

 

[java]  view plain  copy
 在CODE上查看代碼片派生到個人代碼片
  1. public void onPause(){  
  2.     U8SDK.getInstance().onPause();  
  3.     super.onPause();  
  4. }  
這樣,對於咱們這個「遊戲」來講,就算完成了SDK的接入了。你們能夠看到,對於遊戲來講,接入是一件很簡便的事。它不用考慮後面怎麼打包,怎麼生成渠道包,怎麼管理配置,怎麼升級,。。。對於TA,到這裏就結束了。接下來,咱們就要看看,對於一個渠道來講,好比UC,咱們怎麼來接入到這套框架中來呢?
相關文章
相關標籤/搜索