U8SDK——游戏接入SDK(只接入抽象框架)

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

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

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

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

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


1

2

3

4

5

6

7

U8SDK.getInstance().runOnMainThread(new Runnable() {

 @Override

 public void run() {

 U8User.getInstance().login();

 }

 });

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


1

2

3

4

public void onPause(){

 U8SDK.getInstance().onPause();

 super.onPause();

 }

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

本文作者:小黑

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

时间: 2024-10-09 15:19:39

U8SDK——游戏接入SDK(只接入抽象框架)的相关文章

教你快速高效接入SDK——游戏接入SDK(只接入抽象框架)

题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢,多是大同小异.但是,正是这些小异,又让SDK的接入,产生了无穷无尽的变数.所以,接入SDK之前,如果你没有经验,或者没有被SDK坑过,那么当你看到这系列文章的时候,你很幸运,你可以避免这一切了.如果你之前被坑过,而且还在继续被坑着,那么现在,就是你解脱的时刻. 上一篇文章我们说了整个U8 SDK抽象

教你快速高效接入SDK——渠道SDK的接入(就是实现抽象层的接口而已)

题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢,多是大同小异.但是,正是这些小异,又让SDK的接入,产生了无穷无尽的变数.所以,接入SDK之前,如果你没有经验,或者没有被SDK坑过,那么当你看到这系列文章的时候,你很幸运,你可以避免这一切了.如果你之前被坑过,而且还在继续被坑着,那么现在,就是你解脱的时刻. 先将之前的每一篇做个索引,方便亲们查阅

手机游戏渠道SDK接入工具项目分享(一)缘起

#剧情章节 # 上周刚结束一个外包的项目,开发手机游戏渠道SDK聚合接入工具的,现在有空回顾整理一下这个项目开发过程,因涉嫌商业秘密不会提供项目代码,只谈下开发思路和掉过的坑. 本人多年从事手机互联网行业,从当年的功能机一直搞到红的发紫的手机游戏,一年前离职开始自己的APP开发外包生意. 十几年间许多相熟的老同事不是当了高管就已有自己公司了,到处拜访找老同事拉业务居然还能蹭上饭,感叹作技术的都是好兄弟. 找到之前公司一位老领导刚接手一家手机游戏开发公司管理层,被拉住聊了一晚希望我加入,但因为自己

教你快速高效接入SDK——SDK接入抽象层的设计

题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢,多是大同小异.但是,正是这些小异,又让SDK的接入,产生了无穷无尽的变数.所以,接入SDK之前,如果你没有经验,或者没有被SDK坑过,那么当你看到这系列文章的时候,你很幸运,你可以避免这一切了.如果你之前被坑过,而且还在继续被坑着,那么现在,就是你解脱的时刻. 上一篇文章,我们总体地分析并设计了一套

高效率完成一次接入80个手游渠道SDK——游戏接入SDK服务端篇

1 概要    通常,游戏开发商并不会只在一个渠道上线他们的游戏,接入越多的渠道,代表着可能获取越多的用户,但同时也代表着越多的接入SDK工作量.工期和费用.一款游戏要有足够的用户,甚至需要接入30家以上的各种渠道,以保障自己的市场覆盖率. 单个SDK接入流程在一位有经验的全职客户端程序.一位全职服务端程序员.一位全职QA处理的情况下,需要3天时间才能完成.因此当一款产品面对30个甚至更多不同需求的渠道SDK时,人员成本和时间成本就会急剧增加.所以我们需要一个通用接口,来处理各种渠道的需求,这就

高效率完成一次接入80个手游渠道SDK——游戏接入SDK客户端篇

一.引言 通常,游戏开发商并不会只在一个渠道上线他们的游戏,接入越多的渠道,代表着可能获取越多的用户,但同时也代表着越多的接入SDK工作量.工期和费用.一款游戏要有足够的用户,甚至需要接入30家以上的各种渠道,以保障自己的市场覆盖率.单个SDK接入流程在一位有经验的全职客户端程序.一位全职服务端程序员.一位全职QA处理的情况下,需要3天时间才能完成.因此当一款产品面对30个甚至更多不同需求的渠道SDK时,人员成本和时间成本就会急剧增加. 所以我们需要一个通用接口,来处理各种渠道的需求,这就是统一

手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑

一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 1.  项目一开始几个人把现有3家主流的产品(1接,棱镜,AnySDK)研究了一遍.没想先在这里就进坑了.在研究了几天后发现这3家虽推出有一定时间,但都是以第三方服务角度设计和开发的产品,与需求不符. 2.  版本管理.和流程管理等内容因为运营人员更替一直在调整,直到我提出需要加价才做吧.需求上快把打包工具做成OA系统了,删除了于

手机游戏渠道SDK接入工具项目分享(二)万事开头难

一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所以不指望这批人了.因为是外包收钱按人头工时算,所以拉几个自己兄弟填坑. 初期人力配置 服务端x 1.Android x 1 二.开发需求 自己手机游戏CP作了3年,需求直接写完后让对方确认,一次通过. 1.      公司多款游戏都需要使用这套工具,需要作适配兼容,还好都是Unity3D项目.之后我

教你快速高效接入SDK——打包工具的实现(反编译资源动态整合打渠道包)

整套u8sdk的核心思想,就是让我们的SDK接入成本,能够控制在1,而不是N.啥意思呢?就是,我开发第一款游戏的时候,我接了这些SDK,当我开发第二款,第三款游戏的时候,这套SDK可以尽可能的复用,而不是每开发一款游戏,又从头去接各个渠道sdk.所有的游戏都能够使用同一套SDK接入框架,来快速完成SDK的接入工作.那么,在U8SDK里,我们怎么做到呢?请看我们总体的思路: 游戏A,游戏B,游戏C是三款不同的游戏,对于他们来说,他们只需要调用U8SDK抽象层提供的接口,就完成了所有SDK的接入工作