教你快速高效接入SDK——游戏接入SDK(只接入抽象框架)
来源:互联网 发布:玲珑邪僧 知乎 编辑:程序博客网 时间:2024/05/20 16:01
小黑终于有了自己的家:http://www.uustory.com/,欢迎来坐坐。
题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道。每个渠道SDK接入的方法呢,多是大同小异。但是,正是这些小异,又让SDK的接入,产生了无穷无尽的变数。所以,接入SDK之前,如果你没有经验,或者没有被SDK坑过,那么当你看到这系列文章的时候,你很幸运,你可以避免这一切了。如果你之前被坑过,而且还在继续被坑着,那么现在,就是你解脱的时刻。
上一篇文章我们说了整个U8 SDK抽象成的设计,那这篇文章,我们就来验证一下,他是否如我们期待的那样,简单灵活。
正如之前所说,对于每个游戏,只需要接入抽象层,而每个渠道SDK的接入,就是该抽象层的一个实现而已。最后通过一键打包工具来完成最后的产出。那么,我们先来看看,游戏怎么来调用这个抽象层。
我们假设我们已经开发了一款游戏,面临上线,需要接入SDK,需要接入UC,当乐,91,360,小米等渠道。因为采用U8 SDK统一接入框架的思想,游戏工程本身不耦合具体的每个渠道SDK,而只是调用U8 SDK抽象层。那么,根据上一篇文章谈到的抽象层,我们就来看看如何调用。
首先,我们用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")@Overridepublic void onResult(int arg0, String msg) {Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);}@SuppressLint("ShowToast")@Overridepublic 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() {@Overridepublic void onClick(View v) {pay();}}); Button btnLogin = (Button)findViewById(R.id.button2); btnLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) { login();}}); U8SDK.getInstance().init(MainActivity.this); } private void login(){ U8SDK.getInstance().runOnMainThread(new Runnable() {@Overridepublic void run() {U8User.getInstance().login();}}); } private void pay(){ U8SDK.getInstance().runOnMainThread(new Runnable() {@Overridepublic 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();}}
U8SDK.getInstance().init(MainActivity.this);
U8SDK.getInstance().setSDKListener(new IU8SDKListener() {@SuppressLint("ShowToast")@Overridepublic void onResult(int arg0, String msg) {Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);}@SuppressLint("ShowToast")@Overridepublic void onLoginResult(LoginResult loginResult) {Toast.makeText(MainActivity.this, "登录成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);}});
这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:
U8User.getInstance().login();
在需要调用支付界面的地方调用:
U8Pay.getInstance().pay(params);
需要注意的是,这些接口需要在UI 线程中调用,所以,我们需要使用U8SDK.getInstance().runOnMainThread():
U8SDK.getInstance().runOnMainThread(new Runnable() {@Overridepublic void run() {U8User.getInstance().login();}});
public void onPause(){U8SDK.getInstance().onPause();super.onPause();}
本文作者:小黑
- 教你快速高效接入SDK——游戏接入SDK(只接入抽象框架)
- 教你快速高效接入SDK——SDK接入抽象层的设计
- 教你快速高效接入SDK——渠道SDK的接入(就是实现抽象层的接口而已)
- 教你快速高效接入SDK——Unity统一接入渠道SDK(Android篇)
- 教你快速高效接入SDK——Unity统一接入渠道SDK(Unity篇)
- 教你快速高效接入SDK——Unity统一接入渠道SDK(Android篇)
- 教你快速高效接入SDK——统一sdk服务器的实现
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——关于Application的适配和代理
- 教你快速高效接入SDK——U8Server的初步分析
- 教你快速高效接入SDK——U8Server的初步分析
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——服务器端支付回调的处理方式
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——iOS多渠道自动打包工具核心原理
- 快速高效接入SDK——总体思路和架构
- android游戏:快速高效接入SDK——总体思路和架构
- 【泛融顾问分享】互联网金融未来走向预测
- MySQL系列:innodb源码分析之重做日志结构
- 产品研发管理
- 一个合格的程序员应该读过哪些书
- 一个小坑,ccui.ScrollView和cc.ScrollView不是一回事,TMD
- 教你快速高效接入SDK——游戏接入SDK(只接入抽象框架)
- 目标检测中背景建模方法
- 一些理论应用到职场中,会给职场人士带来很深刻的启迪。据说这十大经典职场理论能让我们终身受用不尽。
- 一些蛋疼的JavaScript语法特性
- U盘安装CentOS时会出现unable to read package metadata.this may be due to a missing repodata directory”错误
- 深复制 Or 浅复制
- 一次简单的js正则表达式的性能测试
- 黑马程序员 —— 多 线 程
- 一步步爬取Coursera课程资源