下面我们就来重点学习一下Unity接入UC sdk的内容,正如之前所说,对于每个游戏,只需要接入抽象层,而每个渠道SDK的接入,就是该抽象层的一个实现而已。最后通过一键打包工具来完成最后的产出。那么,我们先来看看,游戏怎么来调用这个抽象层。
我们假设我们已经开发了一款游戏,面临上线,需要接入SDK,需要接入UC,当乐,91,360,小米等渠道。因为采用U8 SDK统一接入框架的思想,游戏工程本身不耦合具体的每个渠道SDK,而只是调用U8 SDK抽象层。那么,根据上一篇文章谈到的抽象层,我们就来看看如何调用。

首先,我们用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。
这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:
U8User.getInstance().login();