TYPESDK手游聚合SDK客户端设计思路与架构之五:渠道sdk额外功能兼容性设计
引言:本文旨在提供读者制作一个自己的聚合sdk的思路,抛砖引玉,让更多的读者对聚合sdk有更好的理解。
手游渠道成百上千,相对的渠道sdk需求更是千七百怪。聚合sdk的基础框架包含了手游渠道通用的大部分功能接口。但是随着移动设备操作系统的更替,ios每年一个大版本,安卓每年若干个版本,越来越多的新系统功能加入到了手游sdk中。相对应的为了兼容现在以及将来的这些额外功能接口。我们需要设计一套针对渠道sdk额外功能兼容的模块出来。
额外功能兼容模块主要是用来解决通用的聚合sdk框架所不能满足的需求。
我们对兼容模块划分了相应的以下几个子模块
1.额外功能接口的管理框架
2.额外功能接口的统一继承基类
3.对额外功能的相关配置文件
针对额外功能接口的管理框架,我们需要去实现以下几个功能点
1.1对外提供一个统一的接口,可以根据函数名调用函数
1.2可以加在多个额外功能模块,并且这些功能模块允许存在相同函数名
1.3外部调用统一的接口,内部可以同时执行多个同函数名不同模块的接口
1.4 对应的有一套配置表的解析方法
针对统一的继承基类
我们主要声明一个通过函数名调用接口的函数就可以了
针对额外功能的配置文件
1.1需要知道,我们需要加在那些模块的泪飙
1.2 单个模块中,需要能填写类名,以及appid,appkey等参数
1.3 单个模块中,需要能支持额外的参数配置,比如url地址
@interface TypeSDKPlug : NSObject<UIApplicationDelegate> { NSMutableArray* m_pPlugArr; NSMutableArray* m_pPlugSetArr; } +(TypeSDKPlug*)GetIns; -(NSString*)DoAnyFunction:(NSString *)_funcName withArgs:(NSString *)_json_string;
我们来看下相关的代码设计(以ios部分实现为例)
管理框架.h文件中的声明
其中NSMutableArray* m_pPlugArr;是用来存储额外拓展功能模块对象的容器
NSMutableArray* m_pPlugSetArr; 是解析出来的配置文件
+(TypeSDKPlug*)GetIns;获取管理器的单例对象方法
-(NSString*)DoAnyFunction:(NSString *)_funcName withArgs:(NSString *)_json_string; 是根据函数名来执行额外功能模块的主要接口在安卓中,可以通过反射来实现这一功能,ios中苹果为我们提供了相关的动态创建对象函数(performSelector: withObject:)
我们来看下有关的主要实现逻辑
2.1读取本地的配置文件
2.2根据配置文件读取到的额外模块对象类名,创建额外模块对象,并且将这些模块对象存储起来
2.3将读取到的配置文件也存储起来
2.4 当调用统一的接口时,会遍历存储在m_pPlugArr 每一个额外模块对象,首先根据配置表查看该模块的是否禁用该接口,然后检查该接口在该对象中是否存在,当存在时,单独的执行该额外模块对象的接口。
相关配置文件举例
点击(此处)折叠或打开
"PlugList": [ { "plug_id": "1", "plug_name": "chartboost", "plug_class_name": "Plug_chartboost", "plug_class_data": "null", "plug_app_key": "123", "plug_app_key_extra": "", "plug_app_id": "456", "plug_app_id_extra": "", "plug_local_data": "null", "plug_local_data_extra": "null", "plug_show_regular": "null", "plug_supports": "null", "plug_requires": "null", "plug_function_list": [ { "plug_function_name": "func1", "plug_function_right": "0", "plug_function_arg_value": "", "plug_function_arg_type": "" }
额外模块的管理者,配置文件,和单个的额外模块实现类,组成了我们sdk的额外模块拓展和支持的主要架构。
相关代码大家可以到typesdk的官网上找到下载地址。
这个项目已开源,大家有兴趣可以自己研究或者参照项目编写自己的聚合SDK
项目地址:https://code.csdn.net/typesdk_code
项目地址:https://github.com/typesdk