1. 程式人生 > >某單位人事資訊查詢APP自動升級解決方案

某單位人事資訊查詢APP自動升級解決方案

1      需求和目標

1.1  使用者需求

APP在登入時,自動檢測新版本,如果有新版本則提示升級。如果不升級則退出應用。

1.2  設計目標

通用的自動升級解決方案,可以推廣到其他專案中。

2      升級現狀

應用升級時,需要把打包好的APK拷貝到目標終端,然後安裝升級。由此帶來兩點問題,一是新版本升級對使用者體驗不好;二是增加了實施工作。

3      需求分析

從使用者的角度出發,分析功能需求,強制升級法,自動升級包括以下步驟:

    1.  使用者開啟應用,進入登入頁面;

    2.  登入頁面載入完成後,檢測當前版本是否為最新版本;

        a)  如果是最新版本,結束(升級流程);

        b)  如果不是最新版本,提示使用者升級;

                 i.   如果使用者選擇升級,則開始下載應用,下載完成後安裝升級包,完成升級流程;

            ii. 如果使用者選擇不升級,則退出應用。

4      方案設計

從系統角度出發,結合使用者需求,設計系統應具備的功能。

4.1  應用端

應用端功能設計,主要功能有:

    1.  檢測新版本;

    2.   獲取當前版本;

    3.   獲取新版本下載地址;

    4.   新版本下載;

    5.   更新邏輯控制;

    6.   記錄使用者更新歷史

4.2  服務端

服務端功能設計,因為是使用WebService提供服務,所以介面至少應涵蓋應用端的呼叫需求,主要介面應包括的功能有:

    1.   檢測新版本;

    2.   獲取新版本下載地址;

    3.   應用更新記錄(記錄誰在什麼時間獲取了哪個版本);

    4.   版本下載次數計算

4.3  資料庫

資料庫設計,只設計表結構,不涉及具體的資料庫軟體,便於擴充到其他資料庫,當前為SQL Server

APP表:管理多個APP的基本資訊

欄位

說明

備註

ID

自動編號

 

Name

應用名稱

 

Mark

應用標識

 

Logo

圖示

 

Introduce

介紹

 

 APP_Version表:管理每個APP的版本

欄位

說明

備註

ID

自動編號

 

Mark

應用標識

 

Version

版本號

 

ServerPath

下載路徑

 

IsLastest

最新版本標識

 

ReleaseTime

釋出時間

 

CRT

下載次數(點選率)

在APP點選日誌表上增加觸發器,自動計算CRT,或者用程式實現

 APP_ChangeLog表:記錄使用者更新的歷史資訊

欄位

說明

備註

ID

自動編號

 

UID

使用者標識

 

Mark

應用標識

記錄使用者獲取的應用

Version

版本

記錄使用者獲取的應用版本

FetchTime

獲取時間

記錄使用者獲取應用的時間

 5      實現

5.1  應用端

關鍵程式碼:

獲取當前應用版本號

appcan.widgetOne.getCurrentWidgetInfo(function(err, data,dataType, opId) {

   if (err) {

       //獲取當前版本號失敗

       //appcan.window.alert("獲取當前版本號失敗");

   } else {

       //成功後,用當前版本號處理一些事情

       var currentVersion = JSON.parse(data);

       var currentVersionNo = currentVersion.version;

       //appcan.window.alert("當前版本號:" + currentVersionNo);

}

下載遠端檔案

uexWindow.open('dd', '0', serverUrl, 0, 1,1, 0, 500);

5.2  服務端

IIS配置

在IIS的MIME型別中,配置增加.apk副檔名,以便支援.apk格式檔案的下載

副檔名

MIME型別

.apk

application/vnd.android.package-archive

主要方法

///<summary>

///根據應用標識獲取最新版本資訊

///</summary>

publicvoid GetLastestVersion(string Mark);

///<summary>

///記錄使用者更新歷史

///</summary>

publicvoid RecordUpdateHistory(string UID, string Mark, string Version);