手机sdk 开发
题记:很多做游戏开发的人,估计都或多或少地接过渠道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")
- @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里面进行初始化操作:
- U8SDK.getInstance().init(MainActivity.this);
同时,如我们之前所说,我们是基于监听器模式的设计,我们需要设置一个监听,当具体SDK有状态变更,成功或者失败时,我们可以得到具体的信息:
- 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。
这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:
- U8User.getInstance().login();
在需要调用支付界面的地方调用:
- U8Pay.getInstance().pay(params);
需要注意的是,这些接口需要在UI 线程中调用,所以,我们需要使用U8SDK.getInstance().runOnMainThread():
- U8SDK.getInstance().runOnMainThread(new Runnable() {
- @Override
- public void run() {
- U8User.getInstance().login();
- }
- );
最后,我们需要重写Activity相关的系统事件方法,在对应的方法里面,加上U8 SDK对应方法的调用。比如:
- public void onPause(){
- U8SDK.getInstance().onPause();
- super.onPause();
- }
这样,对于我们这个“游戏”来说,就算完成了SDK的接入了。大家可以看到,对于游戏来说,接入是一件很简便的事。它不用考虑后面怎么打包,怎么生成渠道包,怎么管理配置,怎么升级,。。。对于TA,到这里就结束了。接下来,我们就要看看,对于一个渠道来说,比如UC,我们怎么来接入到这套框架中来呢?
手机sdk 开发的更多相关文章
- HTML5手机APP开发入门(1)
HTML5手机APP开发入门(1) 开发框架 Ionicframework V2 + Angular 2 具体内容可以参考一下网站 http://ionicframework.net/ http:// ...
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...
- [Windows Phone]解锁、注册Windows Phone实体手机为开发机(Windows 8)
原文:[Windows Phone]解锁.注册Windows Phone实体手机为开发机(Windows 8) 前言 ? ? 最近要开发Windows Phone(以下简称WP)的手机游戏,由於使用模 ...
- 手机自动化测试:搭建appium手机自动化测试开发环境
手机自动化测试:搭建appium手机自动化测试开发环境 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...
- Android基础新手教程——1.2.1 使用Eclipse + ADT + SDK开发Android APP
Android基础新手教程--1.2.1 使用Eclipse + ADT + SDK开发Android APP 标签(空格分隔): Android基础新手教程 1.前言 这里我们有两条路能够选,直接使 ...
- ESP8266 SDK开发: 测试下诱人的程序
前言 这一节测试一下诱人的程序 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, APP显示ESP8266采集的温湿度数据. 简而言 ...
- 25-ESP8266 SDK开发基础入门篇--控制WIFI连接路由器
https://www.cnblogs.com/yangfengwu/p/11324411.html 说个事情,现在SDK的版本已经出到3.0了,但是我还是使用2.0 如果只是为了学习研究 选择3 ...
- 16-ESP8266 SDK开发基础入门篇--TCP 服务器 非RTOS运行版,串口透传(串口回调函数处理版)
https://www.cnblogs.com/yangfengwu/p/11105466.html 其实官方给的RTOS的版本就是在原先非RTOS版本上增加的 https://www.cnblogs ...
- Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序
Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序 引子 上期给大家介绍了如何使用如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓 ...
随机推荐
- 人工神经网络NN
[面向代码]学习 Deep Learning系列 http://blog.csdn.net/coolluyu/article/details/20214617 正则化的最小二乘法 深入浅出LSTM神经 ...
- php多图上传问题笔记
图片上传好用插件有,比如 uploadify ueditor html5的各种ajax上传插件,大部分都是异步,返回只是true之类,有些时候需要上传图片需要一起上传,其实可以通过操作流程来避免这个 ...
- UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合
前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发. UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fr ...
- 总结-computer
常见问题 1.任务栏位置:%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar 2.锁定到任务栏的图标不见了: ...
- 自定义组件-IPEdit
输入IP用的.....支持windows风格显示 unit HSIPEdit; // ********************************************************* ...
- 《Linux内核分析》期末总结
Linux内核设计期中总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 前八周博客汇总及总结 Linux内核设计第一周——从汇编语言出发理解计算机工作原理 我们学习了汇编语言的基础知识,这一 ...
- 什么是ValueStack
转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...
- Python开发程序:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- ORA-03113: end-of-file on communication channel
导致的原因,可能是异常断电导致文件状态不一致. SQL> startupORACLE instance started. Total System Global Area 1653518336 ...
- 寿司点餐系统Sprint1总结
为期十天的一个冲刺,说长不长,说短不短.从一开始的接收课程任务到第一次聚集讨论. 确定方案.实行方案,再到最后的决定结束第一个冲刺,都是大家一起讨论着加小小的默契一步步 向前.没有完美,但是总体完成的 ...