普通升級你們很好理解,就是正常的對話框提示是否須要更新,有一些更新文案,兩個按鈕,「是」轉到後臺下載,「取消」取消本次下載。java
若是勾選當前版本不會在提示升級android
每次進入app都顯示升級對話框對用戶有多是不友好的,咱們能夠配置時間多久顯示一次。面試
首先強制升級固然是對用戶很是不友好,能少用盡可能少用,能不用盡可能不用,最好這個功能一次也別用。可是這個功能是必不可少的,你們考慮以下幾個問題:安全
app更換接口你們都以爲不可能,可是現實當中確實存在,假如咱們金融行業,一個重要的接口報出安全風險,或者這個接口被盜刷用戶信息,這是致命的。因爲咱們的url在app內部都是寫死的,想要修改只能經過強制更新,廢棄老接口,使用新接口,這樣才能保證全部用戶的信息安全。性能優化
在金融行業不少app或者關鍵路徑的網絡傳輸都是https雙向加密的,也就是app本地也會寫死ca證書來進行校驗,可是服務器證書,域名證書都是有實用年限的。
假如ca證書有效期是2年,咱們會在1.5年的時候在app中增長下一個證書例如app版本是v2.0.0,通過幾個版本的迭代,在後臺觀察90%以上的活躍用戶都升級到v2.0.0以上的時候,咱們會將全部低於v2.0.0的客戶端強制升級到v2.0.0版原本保證客戶端可用。服務器
強制更新不是隻能強制更新到最高版本,而是根據後臺配置的versioncode來更新到指定的版本。
例如:當前最新版本是v3.0.0,90%的用戶已是v2.0.0,咱們能夠在後臺配置全部低於v2.0.0的用戶所有都強制升級到v2.0.0不然不可用。
app升級通常有兩個接口:網絡
用於返回app更新信息以及更新版本架構
用於下載app的apkapp
因爲android p 以上的接口訪問必須都是https形式的,我建議這兩個接口不使用雙向加密,以及信任全部ca證書,保證這兩個接口不受任何影響只要有網絡就能夠返回信息進行版本更新。性能
你們考慮以下場景:
用戶app升級到v1.9.0以後就在也沒打開過app,咱們在v2.0.0 app增長了下一個證書,app v3.0.0的時候將全部低於v2.0.0用戶強制更新到v2.0.0且服務端替換了最新的證書(因爲服務器只能替換證書而不是像客戶端能夠新增證書來作兼容),那麼若是更新接口也是雙向加密的當用戶打開v1.9.0他將沒法更新並且app也沒法使用,只能刪除從新下載,當用戶刪除咱們的app的時候咱們將90%以上失去這個用戶。
爲何要有備選升級方案,假設線上app更新模塊掛了,會出現什麼狀況,將是災難性的全部用戶都沒法在app內部更新,android用戶使用內部更新的比例至關大這是不可接受的。
有人會說這個概率很是小,在我看來很是小依然是有概率,若是這個小几率時間出現了將是最爲嚴重的線上事故,比出現任何一個崩潰bug都要嚴重。因此咱們要有萬無一失的更新機制。
備選升級方案目前來講是在appupload接口中下發標識跳轉到android內部下載機制以下代碼
Uri uri = Uri.parse(target.getUrl()); Intent intent = new Intent(Intent.ACTION_VIEW, uri); mContext.startActivity(intent);
app 內部更新若是出現問題屬於單點故障。高可用性或者高可靠度的系統不會但願有單點故障形成總體故障的情形。通常能夠透過冗餘的方式增長多個相同機能的部件,只要這些部件沒有同時失效,系統(或至少部分系統)仍可運做,這會讓可靠度提升。以上就是無懈可擊 Android 內部升級模塊的設計思路,代碼有空在擼,這裏只寫原理。