Unity接入UC sdk
在本文中,我们将重点探讨Unity接入UC SDK的详细内容。如前文所述,对于每款游戏,仅需接入抽象层,而每个渠道SDK的接入,实际上就是该抽象层的一个具体实现,最终可通过一键打包工具完成产出。接下来,我们先了解游戏如何调用这个抽象层。
假设我们已经开发了一款即将上线的游戏,需要接入UC、当乐、91、360、小米等渠道的SDK。由于采用了U8 SDK统一接入框架的理念,游戏工程本身不会与具体的每个渠道SDK耦合,而是仅调用U8 SDK抽象层。下面,我们依据上一篇文章中提到的抽象层,来详细看看如何进行调用。
1. 创建模拟游戏工程
首先,我们使用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);
// 设置SDK监听器
U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
@SuppressLint("ShowToast")
@Override
public void onResult(int arg0, String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
@SuppressLint("ShowToast")
@Override
public void onLoginResult(LoginResult loginResult) {
Toast.makeText(MainActivity.this, "登录成功,sid:" + loginResult.getSid(), Toast.LENGTH_SHORT).show();
}
});
// 绑定支付按钮点击事件
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();
}
});
// 初始化U8 SDK
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);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPause() {
U8SDK.getInstance().onPause();
super.onPause();
}
@Override
public void onResume() {
U8SDK.getInstance().onResume();
super.onResume();
}
@Override
public void onNewIntent(Intent newIntent) {
U8SDK.getInstance().onNewIntent(newIntent);
super.onNewIntent(newIntent);
}
@Override
public void onStop() {
U8SDK.getInstance().onStop();
super.onStop();
}
@Override
public void onDestroy() {
U8SDK.getInstance().onDestroy();
super.onDestroy();
}
@Override
public void onRestart() {
U8SDK.getInstance().onRestart();
super.onRestart();
}
@Override
public void onBackPressed() {
U8SDK.getInstance().onBackPressed();
super.onBackPressed();
}
}
2. 接入SDK抽象层的要点
从上述模拟游戏的代码中可以看出,接入SDK抽象层其实非常简单。主要步骤如下:
2.1 初始化操作
在onCreate
方法中进行初始化操作:
U8SDK.getInstance().init(MainActivity.this);
2.2 设置监听器
由于采用了监听器模式设计,我们需要设置一个监听器,以便在具体SDK状态发生变更(成功或失败)时获取详细信息:
U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
@SuppressLint("ShowToast")
@Override
public void onResult(int arg0, String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
@SuppressLint("ShowToast")
@Override
public void onLoginResult(LoginResult loginResult) {
Toast.makeText(MainActivity.this, "登录成功,sid:" + loginResult.getSid(), Toast.LENGTH_SHORT).show();
}
});
其中,onResult
方法在调试时可通过Toast输出信息,而onLoginResult
方法则是渠道SDK登录成功时的回调函数。在此处,需要执行整个登录流程中的第四步,即使用(u8appid, sid)访问U8 Server以获取后续登录认证所需的token。
2.3 调用登录界面
初始化完成后,在需要调用登录界面的地方,调用如下代码:
U8User.getInstance().login();
通过以上步骤,我们就完成了Unity接入UC SDK的基本流程,实现了游戏与UC SDK的集成。