首页 技术 正文
技术 2022年11月9日
0 收藏 310 点赞 4,498 浏览 4426 个字

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

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

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

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 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有状态变更,成功或者失败时,我们可以得到具体的信息:

1234567891011121314 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():

1234567 U8SDK.getInstance().runOnMainThread(new Runnable() {  @Override public void run() { U8User.getInstance().login(); } });

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

1234 public void onPause(){ U8SDK.getInstance().onPause(); super.onPause(); }

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

本文作者:小黑

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918