應用升級介紹

来源:http://www.cnblogs.com/andbut/archive/2016/04/21/5415435.html
-Advertisement-
Play Games

Do平臺的應用升級包含二種升級方式,一種是最常用的安裝包的升級,另外一種是應用內升級。很顯然第二種升級方式更靈活。 應用安裝包升級 原生應用通常的升級方式就是這種,比如android的安裝包是apk文件,ios的安裝包是ipa文件。如果要升級,只能重新下載一個新的apk/ipa文件,然後安裝覆蓋舊的 ...


Do平臺的應用升級包含二種升級方式,一種是最常用的安裝包的升級,另外一種是應用內升級。很顯然第二種升級方式更靈活。

應用安裝包升級

原生應用通常的升級方式就是這種,比如android的安裝包是apk文件,ios的安裝包是ipa文件。如果要升級,只能重新下載一個新的apk/ipa文件,然後安裝覆蓋舊的版本,基本流程如下:

  1. 調用do_Global.getVersion()方法檢查當前應用的版本號
  2. 通過do_Http發送GET/POST請求升級服務端,請求當前應用的最新的版本號,這個服務端是開發者自己搭建,和Do平臺無關。
  3. 比較這二個版本號,如果不一樣,則調用do_External.openURL()方法使用操作系統帶的瀏覽器打開下載應用的網頁。在網頁上下載安裝新的應用覆蓋舊的應用。

這裡要註意的是:

  1. 如果要生成一個特定版本號的App,需要在應用配置-平臺配置-版本的地方設置一下版本號,然後再打一個發佈版本。

  2. 還有就是如果在新版本的應用里更新了一個組件的版本,或者增加了某個組件,應用安裝包升級是必須的過程,這相當於功能的更新。不能使用應用內升級。

  3. iOS的app如果想發佈到組件商店上,是不允許使用程式檢測版本號來升級,只能用iOS自帶的操作系統的升級管理。否則不能上Appstore。但是如果是用企業證書,不受這個限制。
    升級的過程比較簡單,我們就不提供示例代碼了。

應用內升級

應用內升級並不是Do平臺的特有功能,但是Do平臺使用應用內升級還是很方便的。應用內升級可以理解為增量升級,替換任何項目文件。

  1. 檢查當前應用的版本號,這個版本號可能是從文件里讀出來的,可能是從SQLite資料庫讀出來的,反正這個版本的讀和寫都是由用戶來決定。
  2. 通過do_Http發送GET/POST請求升級服務端,請求當前應用的最新的版本號,這個版本號是指應用內源代碼的版本號,服務端是開發者自己搭建,和Do平臺無關,而且版本號的維護也是由開發者來決定。
  3. 比較這二個版本號,如果不一樣,則調用do_Http.download方法下載升級包,通常是一個zip文件。
  4. 下載後,解壓這個zip文件到data:// 下一個目錄
  5. 利用do_Appupdate方法拷貝所有的最新文件拷貝到source:// 下對應的目錄,覆蓋舊的文件。並更新新的版本到文件或資料庫。

這裡要註意的是:

  1. 升級的頁面只有再次打開才能看到變化,比如當前頁面更新了,需要退出這個頁面再打開才能看到變化。假如升級的是首頁,則需要退出應用重新打開App了。

  2. 如果選擇了代碼加密,則更新的文件也必須是加密過,而且是同樣的deviceone開發者賬號下的同樣的應用id。目前還沒有提供一個方便的方式隨意加密任何源代碼,只能重新打包,再從打出的包扣出相應的加密過的代碼。

參考一個示例Demo,主要的源代碼如下:

var button = ui("do_Button_1");
button.on("touch", function() {
    upgrade();
});
function upgrade() {
    // 獲取當前應用的版本號
    var current_version = storage.readFileSync("data://version.txt");
    // 獲取服務端最新的版本號,並下載升級
    // 因為沒有搭建一個真正的升級服務,所以先註釋這一行且直接調用update方法
    // getLatestVersion(current_version);
    update("1.1", "data://update.zip");
}
// 從伺服器上獲取最新的版本號
function getLatestVersion(ver) {
    var http = mm("do_Http");
    http.method = "GET";
    http.url = "http://www.xxxx.com/getLatestVersion?current=" + ver;
    http.on("success", function(d) {
        // 服務端判斷最新的版本不等於當前的版本就會返回一個最新版本和下載地址,否則返回空
        if (d) {
            // 開始下載最新zip
            download(d);
        } else
            nf.alert("當前版本已經是最新版本");
    });
    http.request();
}
// 從伺服器上獲取最新的升級包
function download(d) {
    var http = mm("do_Http");
    var zip = "data://update.zip";
    http.method = "POST";
    // d.downlaodURL是zip的下載url,d.version是最新的版本號
    http.url = d.downloadURL;
    http.on("success", function(d) {
        update(d.version, zip);
    });
    http.download(zip);
}
// 解壓,然後覆蓋舊的文件,然後更新本地版本號
function update(ver, zip) {
    storage.unzip(zip, "data://update", function(data) {
        // 這裡可以拷貝文件,也可以拷貝目錄
        app.update([ "data://update/test.ui", "data://update/test.ui.js" ],
                "source://view", function() {
                    nf.alert("升級完成");
                    storage.writeFile("data://version.txt", "1.1",function(){
                        app.closePage();
                    });
                });
    })
}

這個示例的下載參考這裡


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • --系統應用與系統服務 iOS開發過程中有時候難免會使用iOS內置的一些應用軟體和服務,例如QQ通訊錄、微信電話本會使用iOS的通訊錄,一些第三方軟體會在應用內發送簡訊等。今天將和大家一起學習如何使用系統應用、使用系統服務:http://www.jinhusns.com/Products/Downl ...
  • 安卓為驗證碼倒計時提供了一個很方便的類android.os.CountDownTimer 其使用方法:new CountDownTimer(30000, 1000) { public void onTick(long millisUntilFinished) { mTextField.setText... ...
  • 一,效果圖。 二,代碼。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self initTimerCompare]; } #pragma -mark -f ...
  • android.app.Notification android.app.Notification.Builder Notification,俗稱通知,是一種具有全局效果的通知,它展示在屏幕的頂端,首先會表現為一個圖標的形式,當用戶向下滑動的時候,展示出通知具體的內容。 NotificationMa ...
  • 1、NSDate的基本用法: //只要通過NSDate創建時間對象,對象中就保存了當前時間 NSDate *time = [NSDate date]; NSLog(@"date = %@",time); 輸出的結果為: date = 2016-04-21 00:11:14 +0000 最後的+000 ...
  • 由於初用mac,mac上面的快捷鍵都是以符號的形式出現,總是記不住,現記錄如下。mac上的符號根按鍵的對應關係如下圖所示: 我用的Xcode版本號是Version 6.1.1 (6A2008a) 1.斷點:command+\ 2.編譯程式:command + b 3.運行程式:command + r ...
  • Ctrl+1 快速修複(最經典的快捷鍵,一定要會) Ctrl+D: 刪除當前行 Ctrl+Alt+↓ 複製當前行到下一行(複製增加)Ctrl+Alt+↑ 複製當前行到上一行(複製增加)Alt+↓ 當前行和下麵一行交互位置Alt+↑ 當前行和上面一行交互位置Alt+← 前一個編輯的頁面Alt+→ 下一 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...