廣告業(yè)務(wù)
個人感受
必不可少。當一個公司產(chǎn)品發(fā)展成熟之后或者用戶量達到一定級別,比如百萬級以上,就開始考慮商業(yè)化或者叫流量變現(xiàn),隨之廣告業(yè)務(wù)就要開展了,據(jù)統(tǒng)計互聯(lián)網(wǎng)行業(yè)中一半以上的收入來自于廣告,想想也確實如此,像BAT都有自己的廣告平臺,百度鳳巢、騰訊廣點通等等,其中百度廣告業(yè)務(wù)占總收入的90%以上(2015年),可見一斑。
價值巨大。最開始是誤打誤撞進入廣告行業(yè),第一家公司主要是學習技術(shù)、積累經(jīng)驗,后來看到廣告對于公司的巨大價值,才想繼續(xù)在這個業(yè)務(wù)深耕,希望在這個方向有深遠的發(fā)展,同時路也能越走越寬。
大平臺更掙錢,小公司基本就是在夾縫中生存,但如果傍上大公司的大腿,也可以活得很滋潤,目前服務(wù)過三家公司,都有移動廣告平臺業(yè)務(wù),各自的側(cè)重點不同
SDK工程師應該是技術(shù)和售后的混合體,既能寫得好代碼,又能跟開發(fā)者、運營妹子、市場大哥等第三方群體良好的溝通,有時候這比寫好代碼更重要
需要有快速學習的能力,能夠?qū)Ξa(chǎn)品的需求快速驗證,這點兒也很有必要
廣告類型
目前大致做過十來種廣告形式,可分為數(shù)據(jù)類和UI展示類
廣告SDK業(yè)務(wù)
對于移動端或者整個大前端來說,廣告業(yè)務(wù)主要展現(xiàn)形式就是SDK。
SDK主要是做數(shù)據(jù)處理,包括但不限于數(shù)據(jù)請求、數(shù)據(jù)處理(格式化檢驗、異常處理)、數(shù)據(jù)上報等
具體廣告形式邏輯介紹:
廣告SDK設(shè)計
廣告SDK設(shè)計原則
廣告SDK涉及技術(shù)并不復雜,從之前的經(jīng)驗來看,更應該關(guān)注設(shè)計,應該說設(shè)計是第一位的。
大的原則
穩(wěn)定性第一
不能崩潰。由于SDK需要寄生在宿主App中才能運行,SDK若崩潰,會導致App不能運行,所以最重要的一點是不能崩潰,應該采取各種辦法防止崩潰;經(jīng)歷過線上大面積崩潰的血的教訓,這一點兒印象深刻。
應對各種奇葩調(diào)用。由于開發(fā)者無暇看文檔,并且認為SDK是完美無暇的,所以可能會出現(xiàn)各種奇葩的調(diào)用,比如參數(shù)類型錯誤,在新開的子線程調(diào)用等問題,若考慮不周,遇到問題會很棘手
應對各種系統(tǒng)、各種手機。手機種類越來越多,iOS系統(tǒng)版本越來越新,特別是做UI渲染時要考慮好版本、機型適配
接口穩(wěn)定。穩(wěn)定回調(diào)、數(shù)據(jù)格式不發(fā)生變化等
內(nèi)部應對服務(wù)器端各種變化。由于要從服務(wù)器端獲取數(shù)據(jù)以及上報等,比如會出現(xiàn)服務(wù)器端數(shù)據(jù)類型變化,為null等情況,SDK要能穩(wěn)定應對
可擴展性
考慮變化。由于SDK更新迭代較慢,所以穩(wěn)定版本要能良好運行,充分考慮到接口可能發(fā)生的變化,內(nèi)部功能的變化等,做到改動小、效果好;比如原生廣告配置參數(shù)可能會增加、素材數(shù)據(jù)也可能會增加等問題
無侵入
不能影響宿主App功能。SDK對于宿主App的依賴應該足夠小,如不能跟宿主App起相同的類名、使用相同的擴展、依賴相同的第三方庫等
不會導致宿主App卡頓。內(nèi)部所有操作應該盡可能放在自定義子線程中
不能使用第三方庫。盡可能情況下一個第三方庫也不能使用,若使用(如Webp.framework、微信分享)由開發(fā)者添加
核心問題
如何防崩潰?
嚴格做好傳遞參數(shù)校驗,若校驗失敗,則直接回調(diào)error;包括請求參數(shù)、服務(wù)端響應參數(shù)等
內(nèi)部用好try{}catch{}
注冊unCaughtExceptionHandler(),發(fā)現(xiàn)崩潰及時上報
及時上報異常、error等信息,盡早發(fā)現(xiàn)問題
不使用高版本API
避免在子線程處理UI
版本適配?
重點關(guān)注iOS8之后每個版本新框架以及API更新,就可以較好避免此問題
(此處以后單開一篇文章總結(jié))
各版本新功能
設(shè)備標識符變化:iOS 6之前使用UDID->iOS6時IDFA發(fā)布,依然可以使用UDID->后來在iOS 7發(fā)布之前禁止UDID,可以使用和Mac->iOS 7禁止OpenUDID和Mac,只能使用IDFA->iOS 10+IDFA可以手動禁止獲取(此時一般返回默認0000,也可以使用IDFA模擬值)
iOS 7+使用NSUrlSession網(wǎng)絡(luò)庫,及后臺下載功能
iOS 8+使用WKWebView
IOS 9+HTTP處理,支持BitCode
iOS 10 openUrl方法
穩(wěn)定回調(diào)?
所有的回調(diào)都在主線程
設(shè)置好超時周期,在請求超時或者API指定的時間內(nèi)超時,都及時回調(diào)
廣告SDK代碼設(shè)計
目標是接口規(guī)范、注釋清楚、使用簡單無異議。大致可分為接口設(shè)計和架構(gòu)設(shè)計兩塊兒:
接口主要包含API及注釋、文檔、demo
架構(gòu)包含設(shè)備信息、網(wǎng)絡(luò)、緩存、線程通信等核心模塊。