LT SDK聚合抽象层框架设计
渠道sdk一般都有初始化,登录,登出,退出,支付,上传角色等接口。除了渠道SDK外,还需要把广告SDK,分享SDK,统计SDK,消息推送SDK等都放到了这套统一SDK接入框架中来了。那么,作为我们这套抽象框架,我们也需要考虑以后可能会加入这些其他非渠道的SDK。所以,我们总体的设计思想是:
1、游戏各个渠道有一个主渠道SDK,比如UC,当乐,91等SDK。这个各个渠道只能同时有一个。不可能同时为UC也是91SDK
2、非渠道的功能性SDK,包括广告,分享,统计,推送等。这些东西,我们作为插件集成到这套抽象框架来。
3、所有SDK的实现可以很方便,而且结构比较统一
4、所有的渠道SDK也好,还是功能性SDK也好,SDK抽象层都抽象出对应的接口。方便游戏层的调用,也方便具体插件的实现。
有了前面的总体思路,那么我们来看看具体抽象层实现。首先我们定义一个渠道规范接口:
public interface ILTSdk {
void login(Activity activity, ILTLoginListenerlistener);//登录接口
void pay(Activity activity, PayParamsdata, ILTPayListener listener);//支付接口接口
void logout(Activity activity, ILTLoginListenerlistener);//登出接口
void exit(Activity activity, ILTExitListenerlistener);//退出接口
void setExtData(Activity activity,Stringdata);//上传角色接口
}
这里说明一下,初始化接口这里不对外提供,将在抽象层内部实现,不提供初始化的结果。登录,支付,退出接口都是有结果回调的,后面将会通过监听形式返回。关于支付需要传递的参数,可以参考易接,anysdk,棱镜等专做渠道聚合的公司。
接口已经定义好了,紧接着,上层游戏需要登录和支付的地方,怎么调用呢?对于游戏来说,这个接口需要new一个哪个实现?是UC还是当乐还是91呢?
所以我们就需要定义一个抽象层管理类,来管理游戏上层和这些渠道SDK和功能性SDK交互。因为渠道有且仅有一个,所以我们可以把渠道类名做成一致,方便我们使用反射创建对象,这个管理类里面就需要实现这些需求。
1. 判断是否存在第三方渠道,如果存在则创建渠道对象,渠道包;如果不存在则创建抽象层渠道基类对象,母包做测试用;
2. 通过反射去调用渠道SDK接口方法和生命周期方法,这样就可以实现游戏上层接入渠道SDK登录,支付等接口;
3. 通过配置文件去读取需要的第三方功能性SDK(插件)的全类名,循环取出所有的插件类名并创建对象,并且实现生命周期方法的调用。
(抽象层结构图)
因为有的SDK,需要在Activity的系统事件中做一些处理操作,而Activity是在游戏接入我们这个抽象层时,传递进来的,所以,我们在抽象层定义了一个Activity事件监听器,渠道基类和插件基类都继承这个类即可:
public interface IActivityListener { void onCreate(Object[] param); void onPause(); void onResume(); void onStart(); void onBackPressed(); void onNewIntent(Intent newIntent); void onStop(); void onDestroy(); void onActivityResult(Object[] param); }
这样,整个SDK接入的抽象层就差不多了。还有一些细节,我们可以后面边开发,边迭代,边完善。后面我们将用实例来看看,游戏层怎么调用这个抽象层SDK,以及具体的SDK接入怎么来实现这个抽象层。