【需求解決系列之四】Android App在線自動更新Library(V2.0)

前言

其實每一個Android App都應該有一個App在線更新的功能,這樣才能及時的通知用戶去更新最新版本的App。這個功能其實提及來比較簡單,由於流程你們都懂!可是要真正的實現,仍是要考慮不少東西的!由於項目的須要,對以前已經開源的庫作了下升級重構,下面就這個作個簡單的介紹。git

正文

特色概述

  • 最大亮點,提供12種更新的樣式,總有一個是你喜歡的類型!
  • 支持三種設置更新信息的方式,您能夠直接傳model,傳json數據,或者直接配置請求連接,sdk會自主請求併發起app的更新,知足多方需求!
  • 文件下載支持斷點續傳,下載錯誤擁有重試機制;相同版本的apk只會下載一次,防止重複下載!
  • 使用接口方式獲取數據時支持設置請求頭,支持POST和GET請求方式,更靈活。
  • 調用者能夠自定義UI實現更新功能。
  • 已適配Android 6.0,Android 7.0,Android 8.0,Android 9.0。
  • 提供強制更新,不更新則沒法使用APP,同時能夠根據後臺返回受影響的版本號,可控制多個版本同時被強制更新。
  • 通知欄圖片自定義

Github地址:

使用方式和注意事項都在這裏,點讚我們就是好兄弟,github.com/MZCretin/Au…github

Demo體驗

Demo下載json

掃描二維碼下載Demo:api

效果預覽

沒有效果圖的demo是沒有靈魂的,沒圖你說個錘子哦!!!服務器

type01.png type02.png type02.png type02.png type02.png type02.png type02.png type02.png type02.png type02.png type02.png type02.png

過程分析與實現闡述

下面會對本次重構中的一些細節作些說明,可是不會說起到代碼,既然已經提供了demo,以爲好用的兄弟仍是去看demo吧!網絡

過程分析

整個更新的邏輯大體可分紅三步:併發

  • 獲取更新信息,校驗數據,肯定是否須要更新
  • 展現更新信息,處理更新邏輯
  • 下載Apk文件,安裝文件

用幾句話描述就是:獲取服務端最新的版本信息,最新Apk文件的下載路徑,最新Apk文件大小信息,是否須要強更以及須要強更的版本號;對比當前App的版本信息,肯定是否須要更新,肯定是否須要強制更新;選擇一個好看的樣式展現這些信息;當用戶點擊更新按鈕以後,檢查本地是否已經下載好Apk文件,若是已經有下載好的文件,檢查這個文件的大小和版本號是否與線上的apk的文件一致,不一致直接刪除從新發起下載;另外自己若是沒有下載完,會繼續斷點續傳下載;獲取到最終的安裝文件以後,誘導用戶去安裝Apk文件並作好各個Android版本的兼容問題從而實現整個App的更新操做。app

拆解分步闡述

  • 獲取更新信息,校驗數據,肯定是否須要更新優化

    這裏須要服務器端提供數據,咱們須要知道當前生產環境中最新的版本是多少,經過這個最新的版本號,跟當前app的版本作比較,若是當前的版本要低於線上環境,則須要提示更新。.net

    對於數據的獲取也是一個比較頭疼的問題,正常狀況下應該都是直接請求一個接口,獲取服務器端最新的版本信息,app解析對應的字段數據;可是有些時候獲取這些信息並非經過接口來實現的,也可能只是一個雲端txt文件,因此獲取數據的方式不能太單一。

    這裏提供了兩大類方式,一種是提供api接口地址,sdk自主請求加解析;另一種是直接提供解析好的數據給sdk,sdk直接處理更新邏輯,這種方式裏面有兩種小的方式,一種是提供數據源model,另一種是提供一個json字符串,交給sdk幫忙解析和處理。這樣就能夠知足大多數場景下的使用了。

  • 展現更新信息,處理更新邏輯

    當上一步肯定須要更新以後,纔會走到這一步。當肯定須要更新以後,爲了加強功能,咱們提供了強制更新的邏輯,這種場景其實很常見,好比新版新增了一個功能,老版本沒法作同步兼容處理,這個時候就須要老版本強制更新到最新的版本。

    對於強制更新,咱們還作了一個優化,能夠對指定的版本強更,好比當前最新版本號爲10,咱們但願老版本中版本號爲9的強制更新,其餘更老的版本普通更新,咱們就能夠指定須要強更新的版本號,實現指定版本強更。

    對於展現更新信息來講,可能最大的痛點在於交互和樣式,對於沒有UI的朋友來講,可能怎麼弄都以爲很差看,因此咱們這裏提供了12種UI樣式,總有一個是你喜歡的吧!若是這12種你仍是沒有喜歡的,咱們也提供了自定義UI的方式給你本身折騰。

  • 下載Apk文件,安裝文件

    這一步可能就是核心了,有一些注意點以及優化的思路。

    下載文件以前咱們須要檢查存儲權限,並作好Android6.0以上申請存儲權限的準備,

    下載Apk文件使用的是filedownloader,用這個的好處在於他自己支持下載失敗的重試機制,斷點續傳的機制,以及網絡切換自動重啓下載等優勢,對文件的下載比較友好。

    下載文件還須要注意另一點,咱們在肯定須要更新以後,在下載文件以前,咱們須要檢測下這個版本的app是否已經下載過了,若是下載過了就不要再重複下載了!對因而否下載好了有兩個判斷,一個對應這個版本的apk文件是否已經存在,第二個是這個apk文件的大小是不是正確的大小,由於有可能會出現文件下載異常的可能,這個時候須要刪除掉這個apk去從新下載。

    還有一點就是在下載文件以前咱們仍是須要友好的檢測下網絡環境,若是是數據流量,仍是須要提醒下用戶當前是非wifi環境,優化用戶體驗。

    另外咱們提供了通知欄進度的展現功能,默認是開啓的,若是你不須要,能夠在配置中關掉它。有這個通知欄的好處在於,當文件下載失敗並重試三次依然失敗以後,通知欄會顯示下載失敗,點擊通知欄能夠喚起從新下載的邏輯,僅此而已。

    當文件下載完成以後,咱們須要處理的是Apk的安裝問題,要注意Android不一樣系統版本以前的差別,並作好相關的兼容處理,咱們已經兼容到Android9.0了,具體兼容細節你們移步源代碼。

結語

簡書首頁,連接是 www.jianshu.com/u/123f97613…

掘金首頁,連接是 juejin.im/user/5838d5…

Github首頁,連接是 github.com/MZCretin

CSDN首頁,連接是 blog.csdn.net/u010998327

我是Cretin,一個可愛的小男孩。

相關文章
相關標籤/搜索