打造億級日活SDK的十大常見問題及解決方案 頂

  • 2020 年 3 月 30 日
  • 筆記

一個好的SDK應該具備易用性、穩定性、輕量、靈活的特點,而個推作為國內第三方推送市場的早期進入者,一直致力於為開發者提供高效穩定的推送SDK。

經過十年的深耕與創新,個推夯實了行業地位。截止2019年6月,個推SDK累計安裝量超440億,日活獨立設備數達4.3 億,並成功服務了人民日報、新華社、微博、馬蜂窩、酷我音樂等一系列明星APP。輝煌數據的背後是強大的技術支撐。

這期文章,我們特地採訪了個推Android 資深開發敬瑜,以個推推送SDK為例,來聊聊打造大型SDK的關鍵技術點。

作者 個推Android 資深開發 敬瑜

01 開發 SDK 和 開發APP 有什麼聯繫?

APP 和 SDK兩者關係密切,APP是SDK的主要載體, SDK 則是 APP開發所需的重要工具。從研發者的角度來看,SDK開發和 APP開發均屬於 Android 頂層應用開發,並無本質區別,兩者的目的均是要提供產品給客戶使用;但從商業角度來講,APP 是to C 的產品,用戶是廣大群眾;而 SDK 則是to B 的產品,用戶為廣大開發者,兩者在運營模式上有所不同。

02 SDK 開發最關鍵的點是什麼?

SDK沒有UI交互,用戶使用 APP 時並不會感知到SDK 的存在。但是作為APP的重要部分,SDK的性能直接影響着APP的性能,也間接影響着用戶在使用APP時的體驗和感受。總結個推推送SDK的開發經驗,我們認為SDK開發最需要注意的是其穩定性。

作為一款第三方 SDK,穩定性是第一要素,我們要保證推送SDK在不同環境下(APP、終端設備等)都能正常運行。要想保障穩定性,複雜環境的兼容是關鍵。減少使用非 SDK 接口也有助於提升穩定性。

除了穩定性外,以下幾個問題對於打造優質SDK也很重要。

03 SDK 版本適配以及廠商兼容情況如何?

個推 SDK 支持 Android 端和 iOS 端,以下文章均使用 Android 端來舉例。

截止目前,Android 系統從07年發佈第一版至今,經歷了多次迭代,Android Q為其最新版本。個推Android SDK 支持 Android 2.3及以上版本,幾乎可以在市面上現存的所有Android 版本上運行。

** 1)版本適配**

APP 主要在手機上運行,若想 APP 在 Pad、電視之類的智能設備上運行,則基本需要單獨適配,也就是說,APP 會根據其使用環境調試相應的版本。而 SDK 的運行環境相對複雜,我們根本不知道自己開發的 SDK 會在什麼樣的環境下運行,可能是手機、Pad、電視,也可能是車載設備,甚至是冰箱等智能家居設備。這類設備的 Android 系統版本從 2.3至10.0 不等。我們在開發SDK 的時候需要盡量地向下兼容。為此,個推推送 SDK 依舊保留着對 Android 2.3 系統的兼容。

** 2)廠商兼容**

一個成熟的 SDK 勢必要保證在不同的廠商設備上正常運行,尤其是當SDK 內部涉及到Android 四大組件時需要特別注意廠商的兼容性,注意其是否會限制固定 action 的廣播使用及限制固定類名 service 的啟動。而如果 SDK 開發涉及到 Android framewrok 的引用,某些功能可能會失效。比如AndFix 的底層實現依託於 Art/Dalvik 虛擬機的架構,但是大部分廠商會對虛擬機進行定製,修改底層 ArtMethod 結構,這時,AndFix將無法在修改過虛擬機的設備上生效。

所以在 SDK 開發過程中我們要盡量避免Android Framework 的引用。個推在使用Android 四大組件的時候,會要求開發者提供自定義 Service,其Service 只需要繼承個推默認的即可,這樣可以保證 SDK 在不同廠商上均能正常運行。

04 怎麼看待現在市面上的 SDK廣泛支持多混合開發這一現象?

大前端開發是必然的趨勢,現在新推出的產品會優先使用混合開發,保證一套代碼可以在多個終端上運行。因此,一個成熟的 SDK 有必要對不同的語言框架進行適配。目前,個推 SDK 不僅支持 Android、iOS系統,還支持混合開發,如unity3d cocos2dx react-native flutter cordova dcloud等。具體見個推實驗室

05 Android SDK 是否會使用開源項目?

不會使用。

有以下幾點考慮:

使用開源項目會增加包的體積;

不能保證開源項目支持複雜的終端環境;

-客戶的 APP可能已使用開源項目,將導致編譯失敗;

06 如何適配海外市場環境?

開拓Google Play 市場是各大互聯網公司的長遠規劃之一。個推Android SDK Google Play版本自發佈以來,積極適配複雜的海外環境,為海外App消息的穩定下發提供強大的支撐和保障。為了有更好的用戶體驗,個推推送 SDK 還在國外眾多地方布置了機房,以保證推送的到達率。另外,個推推送SDK還需要對 Google Play 制定的各種規則進行適配,以及還要考慮不同國家不同版本機型的適配問題。這要求我們在開發過程中盡量使用 Google 生產的手機進行調試與測試。

07 SDK 如何降低手機電量、流量的消耗?

為了給用戶更好的使用體驗,我們會儘可能地降低SDK對電量以及流量所造成的消耗。為此,我們不會使用藍牙這類電量消耗較高的工具。此外,我們還會採用多鏈路合併技術來節約流量。

為了準確地了解所耗電量、流量的降低情況,我們還會做一個全面的測試。每次發版之前,我們都會採用嚴格的測試標準,使用特定的 APP 進行電量壓測。為了儘可能地排除外來因素的干擾,保證測試的準確性,我們往往會使用集成了個推推送 SDK 的 APP來測量。常見測量 APP 的方式有Batterystats & bugreport和Battery Historian。具體細節可以自行查閱 PowerProfile.java 和 power_profile.xml 的使用與原理。

08 如何自主檢測 SDK 的異常?

經過近 10 年的優化與升級,個推推送 SDK 的異常情況已經控制在一個非常非常低的水平,但因為 Android 市場碎片化非常嚴重,SDK 在如此碎片化的環境下運行難免會出現各種意想不到的突發情況,為此我們專門開發了SDK運行自查系統,類似於精簡版的 bugly。該內部產品與 SDK 相輔相成,可以自主檢測 SDK 的異常情況,並在發現異常後主動上報。其次,在代碼層面,我們也做了一些防控,避免 SDK 因為異常而導致無法正常使用。另外,我們還成立了技術支持團隊,服務廣大的開發者,定期回訪客戶,幫助解決客戶遇到的問題。

09 開發SDK還有什麼是需要注意的么?

SDK開發過程中,我們還需要注意安全性。安全性不僅僅代表網絡數據交互的安全、本地數據存儲的安全,也涉及到 SDK 的加固、混淆、第三方安全軟件審核。舉例來說,個推 Android SDK 提供了四大組件的對接,SDK 內部會特別注意,避免這些組件被反序列化攻擊。為了讓開發者更加放心地使用我們的SDK,我們公司內部建立了嚴格的安全管理機制,來保障SDK的安全性。

10 對 SDK 開發者有何建議?

其實從 Android APP 誕生開始,SDK 的開發就從未中斷過。SDK 開發者與 APP 開發者的工作內容基本相同,但是開發 SDK 更注重對 Java 語言以及 Android 底層的理解。如果大家想從事Android SDK 開發,建議多研究 Java 的相關知識,深入理解 Android framework 層。

開發SDK並不難,難的是如何讓自己開發的 SDK 在複雜的環境下穩定運行。這需要我們對 SDK 的架構有一個比較清晰的認知,並對前文所提到的問題進行認真思考。

多年來,個推 SDK始終以服務開發者為己任,持續為用戶提供優質的體驗。為了進一步提升推送後台的保活能力,個推已發佈 2.13.3.0版本,並對 Android Q 進行了適配,請前往個推文檔中心下載http://docs.getui.com/download.html,即刻體驗。