教你快速高效接入SDK——U8Server的初步分析

在U8SDK整套框架总体架构那篇文章,我们就给出了服务器端的解决方案,为此,我们加入了一个U8Server,来作为U8SDK整套框架的服务器端的统一用户认证中心和支付中心。那么,为了方便,我们这里再来引用一下登陆认证的流程图:

回顾下我们之前的分析,U8Server作为统一的登陆认证中心,针对的是多款游戏,那么每款游戏在接入SDK之前,就需要向U8Server申请一个AppID以及AppKey。这样,申请的过程,也就是在U8 Server中加入一条该游戏的数据记录。接下来,游戏需要配置每一个第三方渠道SDK的时候,他就需要向U8Server申请一个对应该渠道的渠道号。比如,现在我要配置UC渠道了,那么U8Server会给你分配一个UC渠道对应的渠道号,如果我要配置当乐渠道,那么U8Server会给你分配一个当乐渠道的渠道号。这个渠道号对每个游戏来说都是唯一的。

有童鞋可能要问了,这个渠道号是干什么用的。仔细看上面的流程图,当UC渠道的客户端和当乐渠道的客户端都来访问U8Server进行登录验证,而U8Server只是一个中转,他还是要到每个第三方SDK服务器进行登录认证。那U8Server怎么知道当前的认证请求是去当乐SDK服务器认证,还是去UC的SDK服务器认证呢?答案就是,U8Server需要当前的客户端是属于哪个渠道的,所以,我们就有了渠道号这个东西。没什么深奥的,就是一个不重复的数字标识而已。

通过之前我们对统一登陆认证和支付中心的理解,我们再来更深入地分析一下,在U8Server里,我们需要实现的功能。我先从数据入口。通过对U8Server的分析和抽象,我们得出下面一个简单的类图,这里列出了U8Server中,我们需要的几个关键数据类:

1、游戏类(UGame):显而易见,U8Server针对多款游戏,所以,对游戏的管理是少不了的。每当有游戏需要接入SDK时,U8Server就需要为他生成一个UGame对象,同时,生成一个唯一的AppId和AppKey。同时,该对象中,也定义了游戏名称等基本属性。注意,这里有一个payCallbackUrl,这个地址是游戏服务器接受U8Server支付回调通知的地址。在游戏申请接入时,需要告知U8Server.

2、渠道商类(UChannelMaster):渠道商,就是代表UC,当乐,91等这样的渠道的。那为什么叫渠道商,不叫渠道呢,因为我们这里的渠道,仅仅是指每个游戏对应的渠道。比如A和B两个都有UC渠道,UC渠道在这里就是渠道商,而A和B分别有一个对应的UC渠道(UChannel对象)。该对象中,除了基本属性名称外,nameSuffix是该渠道的后缀,比如我们接下来的用户对象,每个渠道的用户都在UUser数据中,我们可以通过每个渠道的后缀来标识该用户是属于这个渠道。authUrl和payCallbackUrl则是该渠道对应的登陆认证地址,和支付回调地址。最后一个属性,verifyClassName,这个属性在后面的代码中,你可以看到,在登陆认证的时候,当第三方SDK返回验证结果时,我们需要对该结果进行二次认证。这里,因为我们所有的渠道认证都是走的同一个接口,所以,我们需要根据当前的渠道,去实例化对应该渠道的二次验证实现类。

3、渠道类(UChannel):渠道,如上面所说,是某个游戏的某个渠道。比如A游戏的UC渠道,A游戏的当乐渠道,B游戏的UC渠道......都是一个个单独的UChannel对象。在UChannel中,我们看到除了基本的渠道ID和所属游戏和渠道商ID外,还有三个对象。cpID,cpAppID,cpAppKey,这是因为每个游戏在接入每一个第三方渠道时,第三方渠道就会给你分配一个新的appID,appKey等信息。所以,这里这三个对象就是各个第三方SDK分配给游戏的渠道配置信息。

4、玩家类(UUser):玩家类也是用户类,当用户登录认证成功以后,U8Server会生成一条UUser,在该对象中,存储了所属的渠道信息,以及渠道那边的用户信息(channelUserID,channelUserName,..).这里,我们注意下最后一个属性token.这个就是之前所说的,是U8Server为每个用户生成的登录认证token,客户端将该token传给游戏登录服务器,游戏登录服务器再来U8Server进行认证。这个时候,U8Server需要将游戏登录服务器传来的token和这里记录的token进行比较,并验证token的合法性。

5、订单类(UOrder):用户在支付时,首先请求U8Server请求一个订单号。这个时候,U8Server就会生成一条UOrder.并将state设置为正在支付状态。然后将orderID返回给客户端。客户端拿着该orderID进行第三方SDK登录,同时将该订单号作为自定义参数传到第三方SDK服务器。当充值完成,第三方SDK服务器通知U8Server时,U8Server解析出该订单号,根据该订单号从数据库找到该UOrder对象,如果验证通过,那么UOrder的state就会被设置为支付成功,同时,U8Server会通知该游戏的游戏服务器充值回调地址,如果收到游戏服务器充值完成的回复,那么我们就将state设置为完成状态。该对象里,money的单位是分,有点渠道以分为单位,有的以元为单位。这里在处理的时候,需要注意需要将不是以分为单位的金额转换为分为单位。currency是币种,默认是RMB,考虑后面可能接入国外渠道,这里暂时加入币种。

最后一个需要注意的参数是extension.因为我们知道,游戏在充值的时候,可能会希望携带部分自定义参数,这些自定义参数在充值完成的时候,充值服务器会原封不动地返回给游戏服务器。所以,这里我们定义一个extension,当客户端在获取订单号的时候,可以一并传递需要的自定义参数过来。

接下来的文章中,我们就将要具体实现U8Server。看看统一登陆认证的实现和支付中心的实现。

本文作者:小黑

欢迎访问小黑自己的博客:http://www.uustory.com

时间: 2025-01-06 20:20:37

教你快速高效接入SDK——U8Server的初步分析的相关文章

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

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

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

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

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

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

教你快速高效接入SDK——总体思路和架构

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

教你快速高效接入SDK——服务器端支付回调的处理方式

今天着重把之前渠道服务器端SDK的时候,遇到的一个蛋疼的问题给解决了. 按照之前我们搭建U8Server的思路,U8Server是可以完美支持多款游戏的.包括登录认证和支付回调.登录认证,没啥好说的.统一的接口即可,和客户端的协议对应上.支付回调呢?各个渠道的支付回调逻辑,对于每款游戏来说都是一样的,然后每个游戏填写的登录回调地址,也都一样. U8Server采用J2EE成熟框架实现,各个游戏的各个渠道的参数,是配置在数据库中,通过后台管理工具来完成添加,修改,删掉等操作. 之前我们的流程,相信

教你快速高效接入SDK——统一sdk服务器的实现

U8Server是采用J2EE框架SSH2实现的.当然你也可以采用任何其他你熟悉的语言实现.上一篇文章中,我们从类的抽象中,大致梳理了一下U8Server所要完成的工作.大的方向上,U8Server需要实现统一的用户登录认证,和支付中心两大功能.更深入的细节,U8Server需要完成以下功能: 游戏管理:查询游戏,创建游戏(同时生成游戏的唯一appID,appKey等),编辑游戏,删除游戏等功能. 渠道商管理:查询渠道商,创建渠道商(设置该渠道商对应的登陆认证地址,支付回调地址等操作.),编辑渠

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

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

教你快速高效接入SDK——Unity统一接入渠道SDK(Unity篇)

上一篇,我们着重讲解了用Unity开发的手游,在接入U8SDK时,Android中的部分.接下来,这一篇,我们就来看看,在Unity工程中,我们需要怎么调用上一篇中我们提供的各种接口,以及怎么接收Android中的消息通知,比如登录成功,切换帐号成功等. 在写代码之前,我们先要做一个简单的配置,在Project面板中,按照Unity官方的要求,新建一个Plugins文件夹,在Plugins文件夹下,再建立一个Android文件夹.这里,将会放置所有Android工程相关的文件. 1.将上一篇中,

教你快速高效接入SDK——关于Application的适配和代理

我们知道,每个android应用程序中都有一个唯一的上下文Application对象,这个Application一般我们不需要去关心他,应用启动时,系统会自动创建一个默认的Application实例.但是,因为Application在整个应用中是唯一的,也就是说,他是一个单例.所以,有的应用就可能希望利用Application来完成一些工作. 好在,在android中,实现一个自定义的Application是很简单的.直接自定义一个类继承Application,然后在AndroidManifes