本發(fā)明涉及數(shù)據(jù)交換,涉及傳輸控制規(guī)程,尤指一種基于electron技術(shù)的客戶端升級(jí)方法。
背景技術(shù):
electron是一種打包了瀏覽器內(nèi)核webkit和nodejs的運(yùn)行環(huán)境。使用electron,javascript,html,css這些web開(kāi)發(fā)技術(shù)可以用來(lái)開(kāi)發(fā)客戶端。electron程序開(kāi)發(fā)完成后,使用javascript,html,css開(kāi)發(fā)的h5程序和electron提供的運(yùn)行環(huán)境一起被打包成安裝包,供用戶下載安裝。最終安裝到用戶電腦上運(yùn)行。electron技術(shù)的出現(xiàn)是革命性的。它帶來(lái)兩個(gè)好處1.h5技術(shù)也可以用來(lái)開(kāi)發(fā)客戶端程序,不需要c++知識(shí)。這樣大大降低了開(kāi)發(fā)成本。2.electron開(kāi)發(fā)的h5程序是跨平臺(tái)的。
electron應(yīng)用程序一旦被用戶下載安裝就需要后續(xù)的軟件升級(jí),確保用戶能用上最新的功能?,F(xiàn)有的升級(jí)流程一般是這樣的。當(dāng)用戶啟動(dòng)軟件的時(shí)候,軟件發(fā)送當(dāng)前的版本信息到一個(gè)后臺(tái)版本升級(jí)服務(wù),版本升級(jí)服務(wù)根據(jù)配置檢測(cè)是否需要引導(dǎo)用戶升級(jí),并下發(fā)升級(jí)包的地址。這個(gè)升級(jí)包是一個(gè)全新的安裝包,包含electron運(yùn)行環(huán)境和h5程序。windows上安裝包是一個(gè)setup安裝文件,mac上則是一個(gè)app包或是一個(gè)dmg鏡像。當(dāng)新的安裝文件下載后,啟動(dòng)新版本安裝。
現(xiàn)有的升級(jí)方法存在這樣一個(gè)缺點(diǎn):打包了electron運(yùn)行環(huán)境和h5程序的安裝包比較大,造成下載升級(jí)不方便。安裝包較大的主要原因還是因?yàn)閑lectron運(yùn)行環(huán)境比較大,大概40-50m大小,包含瀏覽器webkit內(nèi)核和nodejs組件。而h5程序占比則小的多。每次程序發(fā)布新版本,用戶都需要下載較大的安裝包。安裝包越大,用戶越難有耐心下載完。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于electron技術(shù)的客戶端升級(jí)方法。旨在解決electron程序升級(jí)過(guò)程中,由于安裝包太大,而不方便升級(jí)的問(wèn)題。
本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:提供一種基于electron技術(shù)的客戶端升級(jí)方法,其特征在于包括如下步驟:
一.打包內(nèi)容升級(jí)包:
首先制作內(nèi)容升級(jí)包,把一個(gè)文件夾的所有升級(jí)內(nèi)容打包為一個(gè)文件;使用asar文件作為內(nèi)容包的格式;打包asar內(nèi)容包后,一并打包版本描述json文件為zip包,作為內(nèi)容升級(jí)包;
二.檢測(cè)升級(jí)并下載內(nèi)容升級(jí)包:
在內(nèi)容升級(jí)包中增加內(nèi)容版本號(hào)標(biāo)識(shí);使一個(gè)軟件有兩個(gè)版本號(hào),一個(gè)是原來(lái)的軟件的容器版本號(hào),一個(gè)是內(nèi)容升級(jí)包的版本號(hào);把容器版本號(hào)和內(nèi)容版本號(hào)一起發(fā)給版本檢測(cè)服務(wù);版本檢測(cè)服務(wù)根據(jù)配置信息判斷:
a.當(dāng)前版本均為最新版本,不用升級(jí),執(zhí)行原客戶端軟件;
b.容器版本需要升級(jí);執(zhí)行全量安裝包升級(jí),然后返回第一步;
c.內(nèi)容版本需要升級(jí);由版本檢測(cè)服務(wù)告訴前端內(nèi)容升級(jí)包的地址和內(nèi)容升級(jí)包的md5哈希值;前端下載內(nèi)容升級(jí)包到一個(gè)臨時(shí)目錄后校驗(yàn)md5哈希值;md5不正確,則刪除安裝包,并詢問(wèn)用戶,下載出錯(cuò)是否重試,是則返回第一步,否則退出;md5正確則執(zhí)行如下第三步;
三.安裝內(nèi)容升級(jí)包:
把內(nèi)容升級(jí)包移動(dòng)到有寫入權(quán)限的目錄,解壓縮出asar文件和元數(shù)據(jù)文件;在元數(shù)據(jù)文件中增加當(dāng)前運(yùn)行程序的容器版本和內(nèi)容版本;作廢已安裝的內(nèi)容升級(jí)包作廢已安裝的內(nèi)容升級(jí)包;
四.加載內(nèi)容升級(jí)包:
重新啟動(dòng)程序,首先檢查數(shù)據(jù)目錄中是否有內(nèi)容升級(jí)包;如果內(nèi)容升級(jí)包的元數(shù)據(jù)文件中的容器版本匹配當(dāng)前容器的版本,則內(nèi)容升級(jí)包有效,可以從內(nèi)容包中加載h5入口頁(yè)面index.html;如果版本不匹配,說(shuō)明升級(jí)包無(wú)效,則刪除內(nèi)容包,并加載安裝目錄下的內(nèi)容包中的index.html;加載后返回第二步。
本發(fā)明的有益效果是:
a.使用內(nèi)容升級(jí)后,直接把50兆的升級(jí)包變成3兆的內(nèi)容升級(jí)包。升級(jí)時(shí)間大大縮短。
b.只升級(jí)內(nèi)容,不升級(jí)瀏覽器內(nèi)核,使瀏覽器內(nèi)核相對(duì)穩(wěn)定。減少反復(fù)升級(jí)瀏覽器內(nèi)核帶來(lái)的風(fēng)險(xiǎn)。
c.另外,內(nèi)容升級(jí)和容器升級(jí)是兩套平行的升級(jí)機(jī)制。當(dāng)需要更新瀏覽器內(nèi)核的時(shí)候,仍然可以整體升級(jí)軟件。
附圖說(shuō)明
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述。
圖1是本發(fā)明的流程方框圖。
圖2是本發(fā)明的內(nèi)容升級(jí)包結(jié)構(gòu)示意圖。
圖3是本發(fā)明的內(nèi)容升級(jí)包安裝后的結(jié)構(gòu)示意圖。
具體實(shí)施方式
參見(jiàn)附圖,本發(fā)明一種基于electron技術(shù)的客戶端升級(jí)方法,其特征在于包括如下步驟:
一.打包內(nèi)容升級(jí)包:
內(nèi)容升級(jí)首先需要制作內(nèi)容升級(jí)包;asar是一種類似于tar的文件格式,相當(dāng)于把一個(gè)文件夾的所有內(nèi)容打包為一個(gè)文件;electron支持直接運(yùn)行打包了所有h5資源的asar文件;因此可以使用asar文件作為內(nèi)容包的格式;但是,由于asar文件由于沒(méi)有元數(shù)據(jù),不方便直接查看asar內(nèi)容包的版本號(hào),且無(wú)壓縮,不方便網(wǎng)絡(luò)傳輸;我們打包asar內(nèi)容包后,一并打包版本描述json文件為zip包,作為內(nèi)容升級(jí)包;內(nèi)容包升級(jí)的時(shí)候解壓縮zip包;程序啟動(dòng)時(shí)加載asar文件中的h5入口頁(yè)面index.html;
二.檢測(cè)升級(jí)并下載內(nèi)容升級(jí)包:
為了實(shí)現(xiàn)內(nèi)容升級(jí)的檢測(cè),內(nèi)容包中必須增加內(nèi)容版本號(hào)標(biāo)識(shí);這樣一個(gè)軟件就有了兩個(gè)版本號(hào),一個(gè)是原來(lái)的軟件的版本號(hào),即容器版本號(hào),一個(gè)是內(nèi)容包的版本號(hào);軟件啟動(dòng)檢測(cè)版本的時(shí)候,把容器版本號(hào)和內(nèi)容版本號(hào)一起發(fā)給版本檢測(cè)服務(wù)(圖1c);版本檢測(cè)服務(wù)根據(jù)配置信息返回給軟件三種情況:1.不用升級(jí);2.需要容器升級(jí);3.需要內(nèi)容升級(jí);第一種情況,表明當(dāng)前軟件為最新版本,可以正常啟動(dòng);第二種情況就是原來(lái)的全量安裝包升級(jí)機(jī)制,仍保留,作為內(nèi)容升級(jí)的補(bǔ)充;第三種情況,是本文所述內(nèi)容升級(jí);版本檢測(cè)服務(wù)需要告訴前端內(nèi)容升級(jí)包的地址,內(nèi)容升級(jí)包的md5哈希值;md5哈希值用于校驗(yàn)下載的升級(jí)包真實(shí)性;接著,前端下載內(nèi)容升級(jí)包到一個(gè)臨時(shí)目錄后(圖1d),校驗(yàn)md5哈希值;md5不正確,則刪除安裝包,并詢問(wèn)用戶,下載出錯(cuò)是否重試;md5正確則說(shuō)明內(nèi)容升級(jí)包可用,可以安裝內(nèi)容升級(jí)包;
三.安裝內(nèi)容升級(jí)包:
由于程序是沒(méi)有權(quán)限修改軟件的安裝目錄下的文件的,即windows下面非管理員賬戶啟動(dòng)的軟件無(wú)權(quán)限修改programfiles目錄下的自身的安裝文件,而mac下的程序可以修改app包內(nèi)容,但會(huì)破壞數(shù)字簽名證書,造成程序不可用;這樣內(nèi)容升級(jí)包直接替換安裝目錄下的內(nèi)容包是不可行的;本方案把內(nèi)容升級(jí)包移動(dòng)到有寫入權(quán)限的目錄,比如程序的數(shù)據(jù)目錄,windows下為appdata\roaming\yourapp,mac為~/library/applicationsupport/yourapp;移動(dòng)上一步下載的內(nèi)容升級(jí)包至此,并解壓縮出asar文件和元數(shù)據(jù)文件(圖1e);同時(shí),在元數(shù)據(jù)文件中增加當(dāng)前運(yùn)行程序的容器版本和內(nèi)容版本;這個(gè)版本號(hào)需要在程序加載內(nèi)容包的時(shí)候檢查;這個(gè)措施確保當(dāng)程序容器升級(jí)的時(shí)候,作廢已安裝的內(nèi)容升級(jí)包;
四.加載內(nèi)容升級(jí)包:
有了上一步的內(nèi)容升級(jí)包后,程序在重新啟動(dòng)的時(shí)候首先檢查數(shù)據(jù)目錄中是否有內(nèi)容升級(jí)包;如果內(nèi)容升級(jí)包的元數(shù)據(jù)文件中的容器版本匹配當(dāng)前容器的版本,則內(nèi)容升級(jí)包有效,可以從內(nèi)容包中加載h5入口頁(yè)面index.html;如果版本不匹配,說(shuō)明升級(jí)包無(wú)效,則刪除內(nèi)容包,并加載安裝目錄下的內(nèi)容包中的index.html(圖1b);加載后進(jìn)行步驟二所述的版本升級(jí)檢測(cè)。
在本發(fā)明的實(shí)施例中:
使用兩個(gè)版本號(hào)分別標(biāo)示容器和內(nèi)容的版本號(hào)。啟動(dòng)的時(shí)候,首先把容器版本號(hào)和內(nèi)容版本號(hào)通過(guò)http請(qǐng)求發(fā)給后臺(tái)版本檢測(cè)服務(wù)https://update.gf.com.cn/update/containerapp/checkversion。內(nèi)容升級(jí)的時(shí)候,后臺(tái)版本檢測(cè)服務(wù)返回內(nèi)容升級(jí)包的大小,md5和地址給前端。前端下載地址中的升級(jí)包到臨時(shí)目錄,并校驗(yàn)大小,md5。如果大小,md5正確,升級(jí)包被移動(dòng)到程序的數(shù)據(jù)目錄下,進(jìn)行安裝。否則,則提示下載出錯(cuò)。(數(shù)據(jù)目錄是一個(gè)有寫入權(quán)限的目錄,windows下為~\appdata\roaming\gf-trader,mac為~/library/applicationsupport/gf-trader)。
下載的內(nèi)容升級(jí)包是一個(gè)zip文件,包含一個(gè)asar文件,一個(gè)元數(shù)據(jù)json文件。asar文件是打包的h5資源(類似于tar文件,electron運(yùn)行時(shí)支持直接加載asar文件中的html頁(yè)面包括js,html,css,圖片等文件),元數(shù)據(jù)文件則描述這個(gè)升級(jí)包的版本號(hào)信息。安裝過(guò)程首先解壓內(nèi)容升級(jí)zip包。然后,在元數(shù)據(jù)json文件中追加寫入當(dāng)前被升級(jí)的軟件的內(nèi)容包版本號(hào)和容器版本號(hào),最后重啟軟件。
重新啟動(dòng)后,至易版在加載過(guò)程中,首先檢查程序的數(shù)據(jù)目錄中是否有升級(jí)包。不存在內(nèi)容升級(jí)包,則從軟件內(nèi)置的內(nèi)容包加載入口html文件。存在內(nèi)容升級(jí)包,則讀取元數(shù)據(jù)json文件,并判斷升級(jí)包的版本號(hào)和容器版本號(hào)是否和當(dāng)前啟動(dòng)的軟件的容器版本號(hào)、內(nèi)容版本號(hào)匹配。如果容器版本號(hào)不匹配,說(shuō)明內(nèi)容升級(jí)包已經(jīng)不適用于當(dāng)前安裝的軟件版本,則刪除失效的內(nèi)容升級(jí)包,并從軟件中內(nèi)置的內(nèi)容包加載。如果匹配,則加載內(nèi)容升級(jí)包asar文件中h5入口頁(yè)面。內(nèi)容升級(jí)完成。