Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307892
  • 博文数量: 65
  • 博客积分: 2570
  • 博客等级: 少校
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 14:04
个人简介

苦逼房奴一枚

文章分类

全部博文(65)

文章存档

2017年(19)

2016年(5)

2013年(6)

2012年(1)

2011年(3)

2009年(5)

2008年(26)

我的朋友

分类: Android平台

2017-02-17 16:54:39

引言:本文旨在提供读者制作一个自己的聚合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地址

 

 

点击(此处)折叠或打开

  1. @interface TypeSDKPlug : NSObject<UIApplicationDelegate>
  2.     {
  3.       NSMutableArray* m_pPlugArr;
  4.         NSMutableArray* m_pPlugSetArr;
  5.     }
  6.     
  7.     +(TypeSDKPlug*)GetIns;

  8.     -(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 每一个额外模块对象,首先根据配置表查看该模块的是否禁用该接口,然后检查该接口在该对象中是否存在,当存在时,单独的执行该额外模块对象的接口。

             

 

       相关配置文件举例

     

点击(此处)折叠或打开

  1. "PlugList": [
  2. {
  3. "plug_id": "1",
  4. "plug_name": "chartboost",
  5. "plug_class_name": "Plug_chartboost",
  6. "plug_class_data": "null",
  7. "plug_app_key": "123",
  8. "plug_app_key_extra": "",
  9. "plug_app_id": "456",
  10. "plug_app_id_extra": "",
  11. "plug_local_data": "null",
  12. "plug_local_data_extra": "null",
  13. "plug_show_regular": "null",
  14. "plug_supports": "null",
  15. "plug_requires": "null",
  16. "plug_function_list": [
  17. {
  18. "plug_function_name": "func1",
  19. "plug_function_right": "0",
  20. "plug_function_arg_value": "",
  21. "plug_function_arg_type": ""
  22. }

       额外模块的管理者,配置文件,和单个的额外模块实现类,组成了我们sdk的额外模块拓展和支持的主要架构。

       相关代码大家可以到typesdk的官网上找到下载地址。

    这个项目已开源,大家有兴趣可以自己研究或者参照项目编写自己的聚合SDK
    项目地址:
    项目地址:


       

阅读(972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~