# 無(wú)懈可擊Android內(nèi)部升級(jí)

由于本人文筆不好,本篇文章只記錄公司項(xiàng)目?jī)?nèi)部升級(jí)的一些關(guān)鍵節(jié)點(diǎn)以及遇到的一些問(wèn)題,有些人認(rèn)為app更新有什么難的,請(qǐng)看完本篇文章大家是否遇到了這些問(wèn)題。

一、普通升級(jí)

普通升級(jí)大家很好理解,就是正常的對(duì)話框提示是否需要更新,有一些更新文案,兩個(gè)按鈕,“是”轉(zhuǎn)到后臺(tái)下載,“取消”取消本次下載。

跳過(guò)此版本

如果勾選當(dāng)前版本不會(huì)在提示升級(jí)

對(duì)話框顯示的規(guī)則

每次進(jìn)入app都顯示升級(jí)對(duì)話框?qū)τ脩粲锌赡苁遣挥押玫?,我們可以配置時(shí)間多久顯示一次

二、強(qiáng)制升級(jí)

首先強(qiáng)制升級(jí)當(dāng)然是對(duì)用戶非常不友好,能少用盡量少用,能不用盡量不用,最好這個(gè)功能一次也別用。但是這個(gè)功能是必不可少的,大家考慮如下幾個(gè)問(wèn)題:

1.app更換接口

app更換接口大家都覺(jué)得不可能,但是現(xiàn)實(shí)當(dāng)中確實(shí)存在,假如我們金融行業(yè),一個(gè)重要的接口報(bào)出安全風(fēng)險(xiǎn),或者這個(gè)接口被盜刷用戶信息,這是致命的。由于我們的url在app內(nèi)部都是寫(xiě)死的,想要修改只能通過(guò)強(qiáng)制更新,廢棄老接口,使用新接口,這樣才能保證所有用戶的信息安全。

2.app更換內(nèi)置證書(shū)

在金融行業(yè)很多app或者關(guān)鍵路徑的網(wǎng)絡(luò)傳輸都是https雙向加密的,也就是app本地也會(huì)寫(xiě)死ca證書(shū)來(lái)進(jìn)行校驗(yàn),但是服務(wù)器證書(shū),域名證書(shū)都是有實(shí)用年限的。
假如ca證書(shū)有效期是2年,我們會(huì)在1.5年的時(shí)候在app中增加下一個(gè)證書(shū)例如app版本是v2.0.0,經(jīng)過(guò)幾個(gè)版本的迭代,在后臺(tái)觀察90%以上的活躍用戶都升級(jí)到v2.0.0以上的時(shí)候,我們會(huì)將所有低于v2.0.0的客戶端強(qiáng)制升級(jí)到v2.0.0版本來(lái)保證客戶端可用。

強(qiáng)制更新不是只能強(qiáng)制更新到最高版本,而是根據(jù)后臺(tái)配置的versioncode來(lái)更新到指定的版本。
例如:當(dāng)前最新版本是v3.0.0,90%的用戶已經(jīng)是v2.0.0,我們可以在后臺(tái)配置所有低于v2.0.0的用戶全部都強(qiáng)制升級(jí)到v2.0.0否則不可用。

三、App升級(jí)接口

app升級(jí)一般有兩個(gè)接口:

1.appupload

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

2.appdownload

用于下載app的apk

由于android p 以上的接口訪問(wèn)必須都是https形式的,我建議這兩個(gè)接口不使用雙向加密,以及信任所有ca證書(shū),保證這兩個(gè)接口不受任何影響只要有網(wǎng)絡(luò)就可以返回信息進(jìn)行版本更新。
大家考慮如下場(chǎng)景:
用戶app升級(jí)到v1.9.0之后就在也沒(méi)打開(kāi)過(guò)app,我們?cè)趘2.0.0 app增加了下一個(gè)證書(shū),app v3.0.0的時(shí)候?qū)⑺械陀趘2.0.0用戶強(qiáng)制更新到v2.0.0且服務(wù)端替換了最新的證書(shū)(由于服務(wù)器只能替換證書(shū)而不是像客戶端可以新增證書(shū)來(lái)做兼容),那么如果更新接口也是雙向加密的當(dāng)用戶打開(kāi)v1.9.0他將無(wú)法更新而且app也無(wú)法使用,只能刪除重新下載,當(dāng)用戶刪除我們的app的時(shí)候我們將90%以上失去這個(gè)用戶。

四、備選升級(jí)方案

為什么要有備選升級(jí)方案,假設(shè)線上app更新模塊掛了,會(huì)出現(xiàn)什么情況,將是災(zāi)難性的所有用戶都無(wú)法在app內(nèi)部更新,android用戶使用內(nèi)部更新的比例相當(dāng)大這是不可接受的。
有人會(huì)說(shuō)這個(gè)幾率非常小,在我看來(lái)非常小依然是有幾率,如果這個(gè)小概率時(shí)間出現(xiàn)了將是最為嚴(yán)重的線上事故,比出現(xiàn)任何一個(gè)崩潰bug都要嚴(yán)重。所以我們要有萬(wàn)無(wú)一失的更新機(jī)制。
備選升級(jí)方案目前來(lái)說(shuō)是在appupload接口中下發(fā)標(biāo)識(shí)跳轉(zhuǎn)到android內(nèi)部下載機(jī)制如下代碼

 Uri uri = Uri.parse(target.getUrl());
 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
 mContext.startActivity(intent);

總結(jié)

app內(nèi)部更新如果出現(xiàn)問(wèn)題屬于單點(diǎn)故障。高可用性或者高可靠度的系統(tǒng)不會(huì)希望有單點(diǎn)故障造成整體故障的情形。一般可以透過(guò)冗余的方式增加多個(gè)相同機(jī)能的部件,只要這些部件沒(méi)有同時(shí)失效,系統(tǒng)(或至少部分系統(tǒng))仍可運(yùn)作,這會(huì)讓可靠度提高。以上就是無(wú)懈可擊Android內(nèi)部升級(jí)模塊的設(shè)計(jì)思路,代碼有空在擼,這里只寫(xiě)原理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容