2015年3月17日

U8SDK——游戏接入SDK(只接入抽象框架)

上一篇文章我们说了整个U8 SDK抽象成的设计,那这篇文章,我们就来验证一下,他是否如我们期待的那样,简单灵活。

正如之前所说,对于每个游戏,只需要接入抽象层,而每个渠道SDK的接入,就是该抽象层的一个实现而已。最后通过一键打包工具来完成最后的产出。那么,我们先来看看,游戏怎么来调用这个抽象层。

我们假设我们已经开发了一款游戏,面临上线,需要接入SDK,需要接入UC,当乐,91,360,小米等渠道。因为采用U8 SDK统一接入框架的思想,游戏工程本身不耦合具体的每个渠道SDK,而只是调用U8 SDK抽象层。那么,根据上一篇文章谈到的抽象层,我们就来看看如何调用。

首先,我们用eclipse新建一个android工程,作为我们这个模拟的游戏工程。这里需要说一下,如果你不是直接使用Android开发的游戏,而是采用像Unity3D,Cocos2D等游戏引擎,其接入也是一样的。只是多了一层JNI调用。我们新建一个主运行的Activity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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里面进行初始化操作:

1
U8SDK.getInstance().init(MainActivity.this);

同时,如我们之前所说,我们是基于监听器模式的设计,我们需要设置一个监听,当具体SDK有状态变更,成功或者失败时,我们可以得到具体的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。

这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:

1
U8User.getInstance().login();

在需要调用支付界面的地方调用:

1
U8Pay.getInstance().pay(params);

需要注意的是,这些接口需要在UI 线程中调用,所以,我们需要使用U8SDK.getInstance().runOnMainThread():

1
2
3
4
5
6
7
U8SDK.getInstance().runOnMainThread(new Runnable() {
 
 @Override
 public void run() {
 U8User.getInstance().login();
 }
 });

最后,我们需要重写Activity相关的系统事件方法,在对应的方法里面,加上U8 SDK对应方法的调用。比如:

1
2
3
4
public void onPause(){
 U8SDK.getInstance().onPause();
 super.onPause();
 }

这样,对于我们这个“游戏”来说,就算完成了SDK的接入了。大家可以看到,对于游戏来说,接入是一件很简便的事。它不用考虑后面怎么打包,怎么生成渠道包,怎么管理配置,怎么升级,。。。对于TA,到这里就结束了。接下来,我们就要看看,对于一个渠道来说,比如UC,我们怎么来接入到这套框架中来呢?

 

本文作者:小黑

原文地址:http://www.uustory.com/?p=1423

posted @ 2015-03-17 15:42 chenjie19891104 阅读(727) 评论(0) 推荐(0) 编辑
2015年3月10日

SDK接入(U8SDK)——SDK抽象层的设计

摘要: 上一篇文章,我们总体地分析并设计了一套高效的SDK接入方案,也罗列出这套方案,我们需要完成的工作。这里再罗列并回顾下:1、统一抽象的SDK接入框架2、各个SDK接入实现3、一键打包工具4、统一的登陆认证中心和支付中心5、对多个平台的支持,比如Unity3D,Cocos2D等那么接下来这篇文章,我们就... 阅读全文
posted @ 2015-03-10 22:57 chenjie19891104 阅读(1408) 评论(0) 推荐(0) 编辑

统一SDK接入(U8SDK)——总体思路和架构

摘要: U8SDK最新视频教程已经迁移至B站:https://space.bilibili.com/15265144 题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360……据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道。每个渠道SDK接入的方法呢 阅读全文
posted @ 2015-03-10 22:56 chenjie19891104 阅读(4897) 评论(0) 推荐(2) 编辑
2013年8月30日

"微空间"免费空间很棒哦,很适合中小网站站长

摘要: “微空间”(www.idcbt.com)是最长久的免费云主机现在在站长圈子里面非常火爆的“微空间”免费空间网(www.idcbt.com)犹如火山爆发一样,瞬间成为了广大站长津津乐道的免费主机空间。 这个“微空间”免费空间网和其他的IDC还真有些不一样。他们的速度和空间的质量到真的比收费的还要快,有些地区甚至FTP上传都有2000K这么变态的快。 据说这是微空间动用了一根真千兆的网络线路,仅仅这条线路的一年租金就需要好几十万,普通的商业IDC公司是无法承受的。估计微空间背后如果没有强大的风险投资在支持,是买不起这么粗的带宽的。 但是注册微空间的过程非常的规范,必须要到论坛激活,提供你的真实身份 阅读全文
posted @ 2013-08-30 08:54 chenjie19891104 阅读(554) 评论(1) 推荐(0) 编辑
2013年5月13日

热部署原理&热部署实例(Java版)

摘要: 热部署原理和热部署实现细节(Java版),并提供源码下载,原文地址:http://www.ijavaboy.com/hot-deploy.html 阅读全文
posted @ 2013-05-13 09:24 chenjie19891104 阅读(656) 评论(0) 推荐(0) 编辑
2013年5月9日

ClassLoader内存泄露

摘要: Java ClassLoader内存泄露,原文地址:http://www.ijavaboy.com/classloader-leak-2.html 阅读全文
posted @ 2013-05-09 10:22 chenjie19891104 阅读(345) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示