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