题记:很多做游戏开发的人,估计都或多或少地接过渠道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:

  1. package com.u8.sdk.demo;
  2. import com.u8.sdk.IU8SDKListener;
  3. import com.u8.sdk.LoginResult;
  4. import com.u8.sdk.PayParams;
  5. import com.u8.sdk.U8SDK;
  6. import com.u8.sdk.components.U8Pay;
  7. import com.u8.sdk.components.U8User;
  8. import android.os.Bundle;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.Toast;
  12. import android.annotation.SuppressLint;
  13. import android.app.Activity;
  14. import android.content.Intent;
  15. public class MainActivity extends Activity {
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
  21. @SuppressLint("ShowToast")
  22. @Override
  23. public void onResult(int arg0, String msg) {
  24. Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
  25. }
  26. @SuppressLint("ShowToast")
  27. @Override
  28. public void onLoginResult(LoginResult loginResult) {
  29. Toast.makeText(MainActivity.this, "登录成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);
  30. }
  31. });
  32. Button btn = (Button)findViewById(R.id.button1);
  33. btn.setOnClickListener(new View.OnClickListener() {
  34. @Override
  35. public void onClick(View v) {
  36. pay();
  37. }
  38. });
  39. Button btnLogin = (Button)findViewById(R.id.button2);
  40. btnLogin.setOnClickListener(new View.OnClickListener() {
  41. @Override
  42. public void onClick(View v) {
  43. login();
  44. }
  45. });
  46. U8SDK.getInstance().init(MainActivity.this);
  47. }
  48. private void login(){
  49. U8SDK.getInstance().runOnMainThread(new Runnable() {
  50. @Override
  51. public void run() {
  52. U8User.getInstance().login();
  53. }
  54. });
  55. }
  56. private void pay(){
  57. U8SDK.getInstance().runOnMainThread(new Runnable() {
  58. @Override
  59. public void run() {
  60. PayParams params = new PayParams();
  61. params.setPrice(100);
  62. params.setServerId("1");
  63. params.setRoleId("1");
  64. U8Pay.getInstance().pay(params);
  65. }
  66. });
  67. }
  68. public void onActivityResult(int requestCode, int resultCode, Intent data){
  69. U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
  70. super.onActivityResult(requestCode, resultCode, data);
  71. }
  72. public void onPause(){
  73. U8SDK.getInstance().onPause();
  74. super.onPause();
  75. }
  76. public void onResume(){
  77. U8SDK.getInstance().onResume();
  78. super.onResume();
  79. }
  80. public void onNewIntent(Intent newIntent){
  81. U8SDK.getInstance().onNewIntent(newIntent);
  82. super.onNewIntent(newIntent);
  83. }
  84. public void onStop(){
  85. U8SDK.getInstance().onStop();
  86. super.onStop();
  87. }
  88. public void onDestroy(){
  89. U8SDK.getInstance().onDestroy();
  90. super.onDestroy();
  91. }
  92. public void onRestart(){
  93. U8SDK.getInstance().onRestart();
  94. super.onRestart();
  95. }
  96. public void onBackPressed(){
  97. U8SDK.getInstance().onBackPressed();
  98. super.onBackPressed();
  99. }
  100. }

大家可以看到,在我们这个模拟的游戏中,接入SDK抽象层是一件多么Easy的事情,就是在onCreate里面进行初始化操作:

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

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

  1. U8SDK.getInstance().setSDKListener(new IU8SDKListener() {
  2. @SuppressLint("ShowToast")
  3. @Override
  4. public void onResult(int arg0, String msg) {
  5. Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
  6. }
  7. @SuppressLint("ShowToast")
  8. @Override
  9. public void onLoginResult(LoginResult loginResult) {
  10. Toast.makeText(MainActivity.this, "登录成功,sid:"+loginResult.getSid(), Toast.LENGTH_SHORT);
  11. }
  12. );

其中,onResult在调试的时候,可以做一个Toast输出。onLoginResult则是渠道SDK登陆成功时的回调。在这里就是需要去做我们之前整个登陆流程里的第四步(u8appid,sid)访问U8 Server获取一个接下来登陆认证使用的一个token。

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

  1. U8User.getInstance().login();

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

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

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

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

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

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

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


 

手机sdk 开发的更多相关文章

  1. HTML5手机APP开发入门(1)

    HTML5手机APP开发入门(1) 开发框架 Ionicframework V2 + Angular 2 具体内容可以参考一下网站 http://ionicframework.net/ http:// ...

  2. opencv 手写选择题阅卷 (四)Android端 手机应用开发

    opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...

  3. [Windows Phone]解锁、注册Windows Phone实体手机为开发机(Windows 8)

    原文:[Windows Phone]解锁.注册Windows Phone实体手机为开发机(Windows 8) 前言 ? ? 最近要开发Windows Phone(以下简称WP)的手机游戏,由於使用模 ...

  4. 手机自动化测试:搭建appium手机自动化测试开发环境

    手机自动化测试:搭建appium手机自动化测试开发环境   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...

  5. Android基础新手教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP

    Android基础新手教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础新手教程 1.前言 这里我们有两条路能够选,直接使 ...

  6. ESP8266 SDK开发: 测试下诱人的程序

    前言 这一节测试一下诱人的程序 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, APP显示ESP8266采集的温湿度数据. 简而言 ...

  7. 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器

    https://www.cnblogs.com/yangfengwu/p/11324411.html 说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0 如果只是为了学习研究   选择3 ...

  8. 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)

    https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...

  9. Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序

    Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序 引子   上期给大家介绍了如何使用如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓 ...

随机推荐

  1. DoModal时带出次级窗口闪现

    最近在做MFC 界面开发. 在一个CDialog窗口DoModal模态显示时, 会将次级窗口带出闪现(比如将一个窗口active, 然后点击我现在程序需要弹框的按钮,弹出弹出正常,但原来active的 ...

  2. 1.Powershell认识

    Windows PowerShell 是一种命令行外壳程序和脚本环境,自Windows Server 2008开始就有内置于系统当中,有取代CMD之势.管理员使用Powershell完成一些日常重复的 ...

  3. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. JQ第三天//基本纯代码

    一.让图片飞 代码:<script type="text/javascript">        $(function () {            $(docume ...

  5. Java 获取汉字拼音的方法

    package lius.util;   import java.io.Serializable; import java.util.ArrayList;   public class JString ...

  6. 完全使用接口方式调用WCF 服务

    客户端调用WCF服务可以通过添加服务引用的方式添加,这种方式使用起来比较简单,适合小项目使用.服务端与服务端的耦合较深,而且添加服务引用的方式生成一大堆臃肿的文件.本例探讨一种使用接口的方式使用WCF ...

  7. Python实例学习-文件备份

    1. 介绍 通过实例学习Python的使用,该实例来自文献[1]中的第11章解决问题. 由于没有搞清楚Win7下如何通过命令行调用zip命令,所以采用7z[2],采用7-zip命令行版本[3],版本号 ...

  8. utils.js

    /** * //2.0检测方式(目测,测量,专用仪器测试等) function GetCheckType() { $.ajax({ url: '@Url.Action("GetCheckTy ...

  9. Python开发【前端】:DOM

    DOM(文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页 ...

  10. mark asp.net mvc

    http://weblogs.asp.net/scottgu/Tags/MVC http://weblogs.asp.net/scottgu/asp-net-mvc-framework-part-1 ...