接上篇,廣告SDK設(shè)計(jì)
SDK接口設(shè)計(jì)
一個好的SDK應(yīng)該至少包含三部分:
SDK庫
接入文檔
demo
SDK對接文件目錄
1.API及注釋
根據(jù)之前的經(jīng)驗(yàn),API接口其實(shí)越簡單越好,最好的樣子就是一個初始化接口、一個調(diào)用接口和一個關(guān)閉接口,完事;調(diào)用方不想多花一秒鐘看你的API。
簡單合理;
如果一個方法能實(shí)現(xiàn),就不采用兩個方法;
方法參數(shù)盡量做到最少,若方法參數(shù)超過3個,則封裝成參數(shù)模型;SDK內(nèi)部可以獲取的,在內(nèi)部獲取就好
非必須實(shí)現(xiàn)的protocol,用optional關(guān)鍵字清晰標(biāo)注
內(nèi)部變量不暴露到外邊,若需要暴露,則readonly屬性
若有相似廣告形式,如直播貼片和視頻貼片功能幾乎一樣,分成兩個類單獨(dú)開發(fā)
盡量使用同步接口,不使用異步接口
記得提供一個版本號接口
命名規(guī)范
類名統(tǒng)一加平臺的前綴,方便開發(fā)者區(qū)分,例如YXAdSDKXXX類
采用駝峰命名,類名、方法名、字段名能清晰表明其用途
多個數(shù)值采用枚舉值
注釋詳細(xì)
清晰表明當(dāng)前方法調(diào)用線程、參數(shù)范圍、參數(shù)類型、默認(rèn)值等信息
必要內(nèi)部邏輯,告知開發(fā)者,如開屏請求,內(nèi)部保證在2s內(nèi)回調(diào),開發(fā)者無需再添加倒計(jì)時定時器
新版本新增接口、屬性等,加入對應(yīng)的版本標(biāo)識
可擴(kuò)展
接口設(shè)計(jì)應(yīng)該能考慮未來可預(yù)見變化,這也是區(qū)分水平的點(diǎn);如原生廣告請求參數(shù),多設(shè)計(jì)一個ext參數(shù),未來若有需要可以直接在此傳遞
回調(diào)protocol盡可能詳盡,最好能將UI整個過程開放出來;比如視頻貼片回調(diào),加入開始、當(dāng)前播放時長等回調(diào),若開發(fā)者臨時需要,也不必再改SDK
隱私性
SDK要有自我保護(hù)意識,就是說開發(fā)者不能改外部的一些參數(shù)、值之類,影響到SDK內(nèi)部邏輯。比如說,原生廣告會回調(diào)素材模型給開發(fā)者,在模型中不要加入上報url等字段,SDK內(nèi)部保留即可。
暴露給開發(fā)者的每個字段都是不得不暴露才暴露的,開發(fā)時候要深思熟慮
2.文檔
良好的文檔,會讓開發(fā)者對接很舒服,后期的麻煩也會更少。
文檔應(yīng)該至少包含以下幾部分,各大主流SDK基本也是這么做的:
一圖剩千言:
廣告SDK接入文檔目錄
3.demo
demo的作用是,讓開發(fā)者了解調(diào)用過程,降低學(xué)習(xí)成本;換句話說就是,方便其抄代碼。
做到將所有暴露的類及方法展現(xiàn)給開發(fā)者,有時候要加一些特殊情況的實(shí)現(xiàn),給開發(fā)者提供一些便利。
SDK架構(gòu)設(shè)計(jì)
外部良好的接口+內(nèi)部優(yōu)良的設(shè)計(jì)就是一套好的SDK了
SDK的架構(gòu)跟App的架構(gòu)差不太多,其實(shí)都是MVC的變體,只不過SDK沒有C,所以要有個其他的容器處理UI與數(shù)據(jù)交互邏輯。
按層級分,可以由上到下分為:API層->service層->module層
API層,提供開發(fā)者調(diào)用接口,內(nèi)部調(diào)用service層,封裝部分邏輯、數(shù)據(jù)等
service層,業(yè)務(wù)層,調(diào)用module層功能塊,組合數(shù)據(jù),創(chuàng)建UI、處理業(yè)務(wù)邏輯等,是SDK核心層級
module層,底層功能塊,一般有
network(client)
cache(模型緩存、圖片視頻緩存、上報信息緩存等)
utils(提供)
dataCenter(提供全局配置信息、機(jī)型信息、沙盒目錄等等)
logger(提供日志、上報服務(wù))
library(reachiablity、encode/decode、一些擴(kuò)展)
關(guān)于架構(gòu)的個人感受
最開始的底層模塊要設(shè)計(jì)好,如果不好就重構(gòu)
特別是模塊與模塊之間的接口部分,多為上層考慮,這里是考驗(yàn)經(jīng)驗(yàn)水平的地,只懂理論不行