第三方SDK 動態(tài)配置解決方案

一、說明

從2019年3月份接手游戲SDK任務以來乡翅,我們完善了 登錄模塊、支付模塊罪郊、事件 統(tǒng)計模塊蠕蚜、分享模塊 等功能 ,隨著游戲發(fā)布的區(qū)域變化悔橄,游戲方也提出了很多個性 化的需求靶累,比如就拿登錄來說,美國地區(qū)的用戶常用的第三方登錄方式是: facebook癣疟、Twitter 挣柬,而日本地區(qū)的用戶常用的第三方登錄方式是:Twitter 、Line 睛挚。剛開始為了快速滿足游戲的需求邪蛔,我們把 所有的登錄方式都集成了一遍,但 是對于有些游戲是不需要那么多登錄方式的扎狱,為了優(yōu)化 SDK 和減少包體積店溢,我們做 了一個動態(tài)的配置,舉例子:如果不需要 line 登錄委乌,游戲方就不需要添加LineSDK 床牧。問題來了:我們給游戲的包中是集成 LineSDK 相關代碼的,如果游戲方 不添加 LineSDK 遭贸,代碼就會報錯戈咳。以下我們會給出幾種解決方案。

二壕吹、預編譯方案

這是我們剛開始給出的第一種方案著蛙,就是在原來的 SDK 進行低成本的改造,首先 通過預編譯的方式 根據 第三方SDK的頭文件是否存在來判斷是否需要執(zhí)行相關代 碼耳贬,代碼如下:

#define lineSDKModule __has_include(<LineSDK/LineSDKLogin.h>) 
#if lineSDKModule @import LineSDK; 
#endif 

這種方式的改造踏堡,在 SDK 運行階段,確實也按照我們期望的方式運行了咒劲,不添加 lineSDK 也不會報錯顷蟆,但是當我們把 SDK 編譯成 SDK.framework 包給到另一個工程 使用的時候就出現(xiàn)問題了。假如我們在導出SDK.framework 的時候項目中有 lineSDK 包腐魂,而另一個添加 SDK 的工程中帐偎,沒有添加 lineSDK,就會報錯蛔屹,提示找不 到 LineSDK削樊。相信看到這里大部分人都知道問題的所在了, __has_include()是一 個宏定義,在編譯階段都已經確定了是否存在值漫贞。也就是在我們導出 SDK.framework 的時候甸箱,就確定了 lineSDKModule 的值,所以迅脐,它不是在另個工 程中動態(tài)的判斷是否存在 lineSDK 芍殖。所以,這種方案并不能達到我們做動態(tài)配置的 需求仪际。

三围小、通過 runtime 方式

這種方式相信大家都會想到,通過蘋果的運行時來判斷類是否存在树碱,進而調用類
內部的方法肯适,從而達到我們的目的。部分代碼如下:

1. 獲取類
Class lineSDkLogin = NSClassFromString(@"LineSDKLogin"); 
2.通過 performSelector 執(zhí)行第三方 SDK 的方法
if ([self.lineLogin respondsToSelector:@selector(startLoginWithPermissions:)]){ 
[self.lineLogin performSelector:@selector(startLoginWithPermissions:) withObject:@[@"profile", @"friends", @"groups"]]; 
} 

通過這種方式確實達到了我們期望的需求成榜,但是有一個問題就是如果第三方 SDK 方 法進行升級的時候框舔,維護就會比較困難,而且代碼會比較臃腫赎婚,我們在看看還有沒 有其他的解決方案刘绣。

四、runtime 方式 + 每個第三方 SDKAdapter

這種方式就是我們?yōu)槊總€第三方需要動態(tài)配置的SDK創(chuàng)建一個Adapter.SDK ,
在 Adapter.SDK 內部實現(xiàn) 第三方的 SDK 功能 挣输,比如 Facebook SDK 纬凤,我們可以創(chuàng) 建一個 FBAdapter.SDK ,在這個SDK內部實現(xiàn)我們所需要的Facebook相關的功 能撩嚼,在我們的 SDK.framework 內部 通過 runtime 的方式 判斷工程中是否引用了 FBAdapter.SDK 停士,從而達到 對 Facebook 相關功能模塊的操縱。
優(yōu)點:我們只需要通過 runtime的 方式判斷 第三方Adapter.SDK 是否存在完丽,而 在 Adapter.SDK 內部不需要 runtime 處理第三方 SDK 功能調用恋技,便于后期的 SDK 升級和維護。
缺點:隨著我們要動態(tài)配置的 第三方SDK的數量的增加逻族,我們創(chuàng)建多個 Adapter.SDK 蜻底,會導致要維護的 Adapter.SDK 比較多 。

五聘鳞、Adapter 文件 + 預編譯方案

我們在討論預編譯方案的時候知道薄辅,這種方案是行不通的,這次我們做下變通搁痛, 我們添加一個 橋接的中間層(我們通過這個中間層調用第三方SDK的相關功能) 长搀, 而這個中間層我們 不打成 framework 包給到游戲方,而是以 .h .m的方式給到游戲 方鸡典。而在中間層的內部我們通過 預編譯的方案處理項目工程中是否添加了 第三方 SDK ,因為我們的中間層沒有編譯成 framework 枪芒,所以判斷項目工程中是否存在第 三方 SDK 是在游戲方 在打 IPA 包的時候進行判斷的彻况。
這樣就解決了 我們只是使用 預編譯方案的不足谁尸。
優(yōu)點:便于后期第三方SDK的升級維護
缺點:我們的一部分實現(xiàn)文件會暴露出來

六、總結

在接手 SDK 后纽甘,遇到了很多問題良蛮,也解決了很多問題,以上是我們解決動態(tài)配
置第三方 SDK 時候悍赢,提出的幾個方案决瞳,同時,也歡迎大家討論更多其他解決方案

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末左权,一起剝皮案震驚了整個濱河市皮胡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赏迟,老刑警劉巖屡贺,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锌杀,居然都是意外死亡甩栈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門糕再,熙熙樓的掌柜王于貴愁眉苦臉地迎上來量没,“玉大人,你說我怎么就攤上這事突想∨固悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵蒿柳,是天一觀的道長饶套。 經常有香客問我,道長垒探,這世上最難降的妖魔是什么妓蛮? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮圾叼,結果婚禮上蛤克,老公的妹妹穿的比我還像新娘。我一直安慰自己夷蚊,他們只是感情好构挤,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惕鼓,像睡著了一般筋现。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天矾飞,我揣著相機與錄音一膨,去河邊找鬼。 笑死洒沦,一個胖子當著我的面吹牛豹绪,可吹牛的內容都是我干的。 我是一名探鬼主播申眼,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼瞒津,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了括尸?” 一聲冷哼從身側響起巷蚪,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姻氨,沒想到半個月后钓辆,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡肴焊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年前联,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娶眷。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡似嗤,死狀恐怖,靈堂內的尸體忽然破棺而出届宠,到底是詐尸還是另有隱情烁落,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布豌注,位于F島的核電站伤塌,受9級特大地震影響,放射性物質發(fā)生泄漏轧铁。R本人自食惡果不足惜每聪,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齿风。 院中可真熱鬧诉探,春花似錦竹宋、人聲如沸仍源。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脸候。三九已至穷娱,卻和暖如春绑蔫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鄙煤。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工晾匠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茶袒,地道東北人梯刚。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像薪寓,于是被迫代替她去往敵國和親亡资。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容