题记:不少作游戏开发的人,估计都或多或少地接过渠道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,咱们怎么来接入到这套框架中来呢?