引言:本文旨在提供讀者製做一個本身的聚合sdk的思路,拋磚引玉,讓更多的讀者對聚合sdk有更好的理解。ios
手遊渠道成百上千,相對的渠道sdk需求更是千七百怪。聚合sdk的基礎框架包含了手遊渠道通用的大部分功能接口。可是隨着移動設備操做系統的更替,ios每一年一個大版本,安卓每一年若干個版本,愈來愈多的新系統功能加入到了手遊sdk中。相對應的爲了兼容如今以及未來的這些額外功能接口。咱們須要設計一套針對渠道sdk額外功能兼容的模塊出來。git
額外功能兼容模塊主要是用來解決通用的聚合sdk框架所不能知足的需求。github
咱們對兼容模塊劃分了相應的如下幾個子模塊json
1.額外功能接口的管理框架架構
2.額外功能接口的統一繼承基類app
3.對額外功能的相關配置文件框架
針對額外功能接口的管理框架,咱們須要去實現如下幾個功能點函數
1.1對外提供一個統一的接口,能夠根據函數名調用函數ui
1.2能夠加在多個額外功能模塊,而且這些功能模塊容許存在相同函數名url
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