题记:很多做游戏开发的人,估计都或多或少地接过渠道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. PHP关于反斜杠处理函数addslashes()和stripslashes()的用法

    addslashes() 例子: <?php $str = "Who's John Adams?"; echo $str . " This is not safe ...

  2. Android课程---添加黑名单的练习(课堂讲解)

    DBHelper.java package com.hanqi.test3; import android.content.Context; import android.database.sqlit ...

  3. Canvas里绘制矩阵文字

    效果如下 实现方法: [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1 ...

  4. redis原子性读写操作之LUA脚本和watch机制

    最近在开发电商平台的子系统--储值卡系统,系统核心业务涉及到金额消费以及库存控制,因此为了解决建立在内存上高并发情况下的事务控制,使用了spring封装的RedisTemplate执行lua脚本进行原 ...

  5. 安装oracle 11g时出现启动服务出现错误,找不到OracleMTSRecoveryService

    运行注册表(cmd-输入regedit),到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到OracleMTSRecoveryServ ...

  6. [lua]安卓ndk如何编译lua库

    这里说的lua库是标准lua库,不包含tolua,不包含cocos2dx的各种lua扩展,是干净的lua. 参考: http://stackoverflow.com/questions/1229965 ...

  7. 函数式中的 currying

    currying 是函数式语言中经常遇到的一个概念,翻译成 柯里化,不是库里化. currying 指的是将接收多个参数的函数变换成接收一个单一参数,并且返回接收余下的参数而且返回结果的新函数的技术. ...

  8. JAVA中使用FTPClient上传下载

    Java中使用FTPClient上传下载 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在c ...

  9. 使用PowerShell解三道测试开发笔试题

    在网上看到了三道测试开发的笔试题,答案是用Python解的.这段时间正好在学PowerShell,练习一下:) 1. 验证邮箱格式 2. 获取URL的后缀名 3. 获取前一天时间或前一秒 我的解法是: ...

  10. iOS上线...踩坑

    总结一下上线过程中出现的问题: 1.AppStore不允许app中出现下载别的app的提示 (例如:三方登录的时候,检测到手机未安装QQ,微信,微博,提示你的设备未安装!❌❌❌ 正确的做法:未安装的, ...