# 無懈可擊Android內部升級

由於本人文筆不好,本篇文章只記錄公司項目內部升級的一些關鍵節點以及遇到的一些問題,有些人認爲app更新有什麼難的,請看完本篇文章大家是否遇到了這些問題。

一、普通升級

普通升級大家很好理解,就是正常的對話框提示是否需要更新,有一些更新文案,兩個按鈕,“是”轉到後臺下載,“取消”取消本次下載。

跳過此版本

如果勾選當前版本不會在提示升級

對話框顯示的規則

每次進入app都顯示升級對話框對用戶有可能是不友好的,我們可以配置時間多久顯示一次

二、強制升級

首先強制升級當然是對用戶非常不友好,能少用盡量少用,能不用盡量不用,最好這個功能一次也別用。但是這個功能是必不可少的,大家考慮如下幾個問題:

1.app更換接口

app更換接口大家都覺得不可能,但是現實當中確實存在,假如我們金融行業,一個重要的接口報出安全風險,或者這個接口被盜刷用戶信息,這是致命的。由於我們的url在app內部都是寫死的,想要修改只能通過強制更新,廢棄老接口,使用新接口,這樣才能保證所有用戶的信息安全。

2.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升級一般有兩個接口:

1.appupload

用於返回app更新信息以及更新版本

2.appdownload

用於下載app的apk

由於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內部升級模塊的設計思路,代碼有空在擼,這裏只寫原理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章