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
U8SDK——游戏接入SDK(只接入抽象框架)的更多相关文章
- 手机游戏渠道SDK接入工具项目分享(一)缘起
#剧情章节 # 上周刚结束一个外包的项目,开发手机游戏渠道SDK聚合接入工具的,现在有空回顾整理一下这个项目开发过程,因涉嫌商业秘密不会提供项目代码,只谈下开发思路和掉过的坑. 本人多年从事手机互联网 ...
- 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑
一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...
- 手机游戏渠道SDK接入工具项目分享(二)万事开头难
一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...
- 教你快速高效接入SDK——总体思路和架构
题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢, ...
- 教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)
U8SDK的设计之初,就是为了可以支持各种游戏引擎开发的游戏,而不不过Android的原生平台.眼下一大半的手游,都是採用Unity3D和Cocos2dx开发,那么这里,我们就先来一步步给大家演示,用 ...
- Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)
1.账号准备工作 首先要有一个讯飞的账号啦,为后面申请APPID.APPKey等东西做准备.顺带一提:讯飞对不同认证类型用户开 放的SDK的使用次数是有不同的,详情如下图. 账号申请完成后,需要去你自 ...
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程 ...
- 开发腾讯移动游戏平台SDK Android版Ane扩展 总结
本文记录了在开发 腾讯移动游戏平台SDK(MSDK) Android版Ane扩展 过程中所遇到的问题和相关解决方式 问题一:编译报错:Unable to resolve target 'android ...
- Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)
Nokia的开源Qt开发工具正式发布了4.5版.如前所述,Qt 4.5最大的变动是换用LGPL许可证,目前采用的三个许可证分别为LGPL/GPL和商业许可证. 新版 ...
随机推荐
- jquery from提交和post提交
//from 提交 function login(){ $('#login_form').form('submit',{ url: '../../../bagechux ...
- MVC将服务器端的物理路径转换为服务器路径
以图片为例 后台Controller.cs public FileResult ImageUrl(string file) { return File("物理路径"+file, & ...
- POJ3020 匹配
题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...
- jQuery Mobile 导航栏
jQuery Mobile 导航栏 导航栏由一组水平排列的链接构成,通常位于页眉或页脚内部. 默认地,导航栏中的链接会自动转换为按钮(无需 data-role="button"). ...
- PHP操作Mongodb之高级查询篇
本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...
- csrf跨站请求伪造
如何杜绝跨站请求伪造? 1.要让服务器知道本次请求是不是冒用了用户的身份→ 2.服务器发给用户一个凭证,用户请求时需携带此凭证→ 3.此凭证只能用户看到而且冒用者看不到→ 4.这就用到了浏览器的安全机 ...
- JAVA网络编程
网络技术基础 OSI模型 应用层-表示层-会话层-传输层-网络层-数据链路层-物理层 TCP/IP分层模型 应用层-传输层-网络互联层-网络接口层Socket(套接字) TCP套接字编程 Serv ...
- 在 Linux 下将 PNG 和 JPG 批量互转的四种方法
计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务[1]的方法.这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .J ...
- HotApp
1.注册接口地址:https://wxapi.hotapp.cn/api/searchkey 2.编缉小程序,获取App Key 3.下载SDK 4.下载的hotapp.js按在utils目录下,在a ...
- jQuery的ajax问题
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...