應用程式更新方法及更新系統與流程
2023-05-14 11:20:06

本申請實施例涉及計算機技術,尤其涉及一種應用程式更新方法及更新系統。
背景技術:
隨著網際網路的發展,應用程式(application,app)等的種類和數量越來越多。開發人員通過開發各種app來滿足用戶的需求。
一般來說,app內頁面開發大致有如下兩種方式:方式一、安卓(android)作業系統和蘋果作業系統(iphoneoperatingsystem,ios)的開發人員基於各自平臺開發代碼,然後進行測試、發版、上線等流程;方式二、在app內直接引入由前端開發人員提供的超文本標記語言5(hypertextmark-uplanguage,html5)頁面。上述方式一中,app頁面訪問動畫效果絢麗且頁面流暢,但更新過程中,需要針對不同作業系統各自的app進行更新,面臨著雙平臺開發、打包發版的限制;上述方式二中,無需雙平臺開發、打包發版,但不具備流暢的動畫體驗效果。
因此,如何更新app,使得該app不受雙平臺開發、打包發版的限制,而且還能夠具備流暢的動畫體驗效果,實為業界亟待解決的問題。
技術實現要素:
本申請實施例提供一種應用程式更新方法及更新系統,基於reactnative更新app,使得app的更新不受雙平臺開發、打包發版的限制,而且具備流暢的動畫體驗效果。
第一方面,本申請實施例提供一種應用程式更新方法,包括:
更新系統獲取應用程式app的腳本語言文件,所述腳本語言文件為用於更新所述app的文件;
所述更新系統根據所述腳本語言文件生成補丁文件;
所述更新系統根據所述補丁文件更新資料庫。
在一種可行的設計中,所述更新系統根據所述補丁文件更新所述待app的資料庫之前,還包括:
所述更新系統對所述補丁文件進行測試。
在一種可行的設計中,所述更新系統根據所述腳本語言文件生成補丁文件之後,根據所述補丁文件更新所述app的資料庫之前,還包括:
所述更新系統將所述補丁文件上傳至內容分發網絡,供所述內容分發網絡將所述補丁文件寫入應用程式編程接口。
在一種可行的設計中,上述的方法還包括:
所述更新系統判斷更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;
若所述更新步驟發生異常,則執行回滾操作。
在一種可行的設計中,上述的方法還包括:
所述更新系統獲取更新信息,所述更新信息指示所述更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;
所述更新系統通過套接字發送所述更新信息。
在一種可行的設計中,所述更新系統根據所述補丁文件更新所述app的資料庫,包括:
所述更新系統判斷所述補丁文件為新增補丁文件或更新補丁文件;
若所述補丁文件為新增補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述新增補丁文件寫入應用程式編程接口,並寫入所述資料庫;否則,停止更新所述資料庫;
若所述補丁文件為更新補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述更新補丁文件寫入所述應用程式編程接口,並覆蓋所述資料庫中的原始補丁文件;否則,確定所述更新補丁文件的最大版本號。
第二方面,本申請實施例提供一種更新系統,包括:
獲取模塊,用於獲取應用程式app的腳本語言文件,所述腳本語言文件為用於更新所述app的文件;
處理模塊,用於根據所述腳本語言文件生成補丁文件;
更新模塊,用於根據所述補丁文件更新資料庫。
在一種可行的設計中,上述的更新系統還包括:
測試模塊,用於在所述更新模塊根據所述補丁文件更新所述待app的資料庫之前,對所述補丁文件進行測試。
在一種可行的設計中,上述的更新系統還包括:
上傳模塊,用於在所述處理模塊根據所述腳本語言文件生成補丁文件之後,所述更新模塊根據所述補丁文件更新所述app的資料庫之前,將所述補丁文件上傳至內容分發網絡,供所述內容分發網絡將所述補丁文件寫入應用程式編程接口。
在一種可行的設計中,所述處理模塊,還用於判斷更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;若所述更新步驟發生異常,則執行回滾操作。
在一種可行的設計中,所述處理模塊,還用於獲取更新信息,所述更新信息指示所述更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;通過套接字發送所述更新信息。
在一種可行的設計中,所述更新模塊,具體用於判斷所述補丁文件為新增補丁文件或更新補丁文件;
若所述補丁文件為新增補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述新增補丁文件寫入應用程式編程接口,並寫入所述資料庫;否則,停止更新所述資料庫;
若所述補丁文件為更新補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述更新補丁文件寫入所述應用程式編程接口,並覆蓋所述資料庫中的原始補丁文件;否則,確定所述更新補丁文件的最大版本號。
本申請實施例提供的應用程式更新方法及更新系統,更新系統獲取用於更新app的腳本語言文件,根據腳本語言文件生成補丁文件,並根據補丁文件更新資料庫。該過程中,將用於更新app的js文件通過更新系統轉換為能夠被nativeapp融合的補丁文件,並更新到資料庫中,使得後續對app進行更新時,僅將能夠融合到app中的補丁文件下發給終端,使得app的更新不受雙平臺開發、打包發版的限制,而且具備流暢的動畫體驗效果。
附圖說明
圖1為本申請應用程式更新方法實施例一的信令圖;
圖2為本申請應用程式更新方法中根據js文件生成補丁文件的過程示意圖;
圖3為本申請應用程式更新方法中更新系統的目錄結構圖;
圖4a為本申請應用程式更新方法中app更新的流程圖;
圖4b為本申請應用程式更新方法中app升級管理的流程圖;
圖5為本申請更新系統實施例一的結構示意圖;
圖6為本申請更新系統實施例二的結構示意圖。
具體實施方式
為使本申請實施例的目的、技術方案和優點更加清楚,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本申請保護的範圍。以下內容為結合附圖及較佳實施例,對依據本申請申請的具體實施方式、結構、特徵及其功效的詳細說明。
本申請的說明書和權利要求書及上述附圖中的術語「第一」、「第二」、「第三」、「第四」等(如果存在)是用於區別類似的對象,而不必用於描述特定的順序或先後次序。應該理解這樣使用的數據在適當情況下可以互換,以便這裡描述的本申請的實施例例如能夠以除了在這裡圖示或描述的那些以外的順序實施。此外,術語「包括」和「具有」以及他們的任何變形,意圖在於覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統、產品或設備不必限於清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對於這些過程、方法、產品或設備固有的其它步驟或單元。
reactnative是臉書(facebook)最新開源的,可同時用來開發ios和android應用,每個需要把數據上傳到伺服器的移動應用,都在重複實現數據提交的功能,如果有一種同時支持ios和android、能夠把數據上傳的伺服器的組件即插即用。
通常來說,移動網際網路行業應用可分為兩種,一種是基於本地作業系統,如ios或android作業系統運行的app,稱之為nativeapp;一種是基於智能終端的瀏覽器運行的webapp。對於nativeapp來說,開發人員可以基於作業系統平臺開發代碼以進行app的開發;或者,在app內直接引入由前端開發人員提供的html5頁面。基於作業系統平臺的開發方式中,app頁面訪問動畫效果絢麗且頁面流暢,但更新過程中,需要針對不同作業系統各自的app進行更新,面臨著雙平臺開發、打包發版的限制;引入html5的開發方式中,無需雙平臺開發、打包發版,但不具備流暢的動畫體驗效果。
因此,如何更新app,使得該app不受雙平臺開發、打包發版的限制,而且還能夠具備流暢的動畫體驗效果,實為業界亟待解決的問題。
有鑑於此,本申請實施例提供一種應用程式更新方法及更新系統,基於reactnative更新app,使得app的更新不受雙平臺開發、打包發版的限制,而且具備流暢的動畫體驗效果。具體的,可參加圖1。
圖1為本申請應用程式更新方法實施例一的信令圖,本實施例從更新系統的角度對本申請應用程式更新方法進行詳細說明。具體的,本實施例包括:
101、更新系統獲取應用程式app的腳本語言文件,所述腳本語言文件為用於更新所述app的文件。
本申請實施例中,app指nativeapp,各個app的相關文件存儲在資料庫中。基於reactnative的app更新過程中,開發人員基於腳本語言(javascript,js)文件開發用於更新app的代碼,即補丁(patch)文件,通過更新系統將該pacth文件更新到資料庫中,並將該patch文件下發給加載app的終端,使得該patch文件能夠融合到app中,其中,js文件為針對app需要更新的模塊進行編寫的代碼。融合過程中,終端無需退出app,而是在線對app進行熱更新。而且,更新過程中,僅僅將patch文件下發給終端,無需終端刪除低版本的app、再下載高版本的app以進行更新。
本步驟中,開發人員通過更新系統對app需要更新的模塊進行修改,如新增代碼、修改代碼、刪除代碼、查詢等,根據該些修改獲取js文件。
102、所述更新系統根據所述腳本語言文件生成補丁文件。
本步驟中,更新系統主要將前端開發人員開發出的js文件,轉換為可以被nativeapp使用的補丁(patch)文件。具體的,可參見圖2,圖2為本申請應用程式更新方法中根據js文件生成補丁文件的過程示意圖。
請參照圖2,轉換過程包括如下步驟:
201、js文件合併。
202、生成bundle類文件。
本步驟中,更新系統對合併後的js文件進行編譯,生成bundle類文件。
203、根據bundle類文件生成差異文件。
本步驟中,更新系統對bundle類文件和底層庫中的普通(common)文件進行對比,生成差異(diff)文件。
204、對diff文件進行壓縮。
本步驟中,更新系統採用消息摘要算法第五版(messagedigestalgorithm,md5)等對diff文件進行壓縮。
205、根據壓縮後的文件生成補丁文件。
本步驟中,更新系統根據根據壓縮後的文件生成補丁文件。
103、所述更新系統根據所述補丁文件更新資料庫。
本步驟中,更新系統通過將補丁文件寫入redis,進而寫入資料庫等一系列操作,將補丁文件寫入資料庫。
本申請實施例提供的應用程式更新方法,更新系統獲取用於更新app的腳本語言文件,根據腳本語言文件生成補丁文件,並根據補丁文件更新資料庫。該過程中,將用於更新app的js文件通過更新系統轉換為能夠被nativeapp融合的補丁文件,並更新到資料庫中,使得後續對app進行更新時,僅將能夠融合到app中的補丁文件下發給終端,使得app的更新不受雙平臺開發、打包發版的限制,而且具備流暢的動畫體驗效果。
下面,從邏輯層面對上述應用程式更新方法中的更新系統進行詳細說明。
具體的,更新系統基於「點+表達+java腳本模板庫+關係型資料庫管理系統(node+express+ejs+mysql)」搭建的項目框架,用於完成交互接口、數據查詢、數據交互等一系列操作。採用該框架的好處是:node是基於瀏覽器(chromev8)引擎的js運行環境,通過使用一個事件驅動、非阻塞式輸入/輸出(input/output,i/o)的模型,使得node為一個輕量級且高效的node。因此,可基於node純前端開發實現整個系統。更新系統採用模型視圖控制器(modelviewcontroller,mvc)開發模式,具體的目錄結構可參見圖3,圖3為本申請應用程式更新方法中更新系統的目錄結構圖。
請參照圖3,視圖(view)層為頁面展示層,用於展示頁面,路徑(routes)層為請求處理層,用於控制請求處理,dbo為數據操作層,用於資料庫的操作,模型(model)為邏輯處理層。
下面,以增加rn資源為例對上述的圖3進行詳細說明。
具體的,首先,用戶在view層的新增頁面輸入相關內容,點擊提交。例如,代碼如下:
其次,routes層攔截請求,調用model層的邏輯處理。例如,代碼如下:
再次,在model層處理相關邏輯,看是否需要操作資料庫。例如,代碼如下:
最後,調用dbo層的資料庫操作,插入數據,返回操作結果。例如,代碼如下:
接下來,從功能模塊的角度對上述的應用程式更新方法中的更新系統進行詳細說明。
具體的,本申請實施例中,更新系統從邏輯上分為四個功能模塊,分別為:rn資源管理模塊、rn審批上線模塊、app升級管理模塊和操作日誌展示模塊。其中,rn資源管理模塊具有新增、修改、查詢或刪除資源等功能,rn審批上線模塊主要用於申請閃現資源進行審批,app升級管理模塊,用於將用戶錄入的需要升級的app版本錄入資料庫、寫入遠程字典服務(remotedictionaryserver,redis)器,供後端研發(researchdesign,rd)讀取,操作日誌展示模塊用於展示用戶操作記錄,便於後期查閱記錄、排查問題等。另外,該些功能模塊可以按照用戶權限劃分,不同權限的用戶對該些功能模塊的操作權限不同。具體的,可參見圖4a與圖4b,圖4a為本申請應用程式更新方法中app更新的流程圖,圖4b為本申請應用程式更新方法中app升級管理的流程圖。
請參照圖4a,圖4a主要涉及rn資源管理模塊,app更新的流程包括:
301、rn資源管理模塊更新js文件。
本步驟中,rn資源管理模塊基於業務線,通過更新系統,在新增頁面、修改頁面、查詢頁面或刪除頁面輸入相應的js代碼文件,即將代碼託管到git上。
302、點擊提交。
本步驟中,用戶點擊提交。
303、驗證js文件是否合格,若合格,則執行304;若不合格,則執行301;
304、更新系統對js文件進行操作。
本步驟中,更新系統的後臺邏輯對js文件進行資源下載、生成補丁文件、將所述補丁文件上傳至內容分發網絡(contentdeliverynetwork,cdn),供所述內容分發網絡將補丁文件寫入應用程式編程接口(即寫入redis)。
305、對補丁文件進行測試,更新sql。
請參照圖4b,圖4b主要涉及rn審批上線模塊、app升級管理模塊和操作日誌展示模塊,app升級管理流程包括:
401、啟動app新增管理。
402、判斷補丁文件為新增補丁文件或更新補丁文件。
本步驟中,有操作權限的操作者對資源進行審批,即有操作權限的操作通過rn審批上線模塊判斷補丁文件為新增補丁文件或更新補丁文件,若補丁文件為更新補丁文件,則執行403;若補丁文件為新增補丁文件,則執行409。
403、修改已有記錄。
404、判斷更新補丁文件的版本號是否大於或等於資料庫中的最大版本號,若是,則執行405;若否,則執行403;
405、確定是否需要強制更新所述資料庫,若是,則執行406;若否,則執行408;
406、將所述更新補丁文件寫入所述應用程式編程接口,之後,執行407。
407、覆蓋資料庫中的原始補丁文件。
408、確定資料庫中該更新補丁文件的最大版本號,之後,執行406。
409、新增記錄。
本步驟中,對新增補丁文件進行記錄。
410、確定是否需要強制更新所述資料庫,若是,則執行411;若否,則執行412。
411、將所述新增補丁文件寫入應用程式編程接口,並寫入所述資料庫。
412、停止更新所述資料庫。
可選的,上述實施例中,根據所述補丁文件更新所述app的資料庫的步驟或該步驟之前的任意一個步驟都可稱之為更新步驟,更新系統還判斷任意一個更新步驟是否發生異常,若任意一個更新步驟發生異常,則執行回滾操作。
具體的,邏輯處理時,先執行操作非寫入資料庫的操作,對所有非寫入資料庫的操作執行成功後,最後執行寫入資料庫的操作。然而,當必須先執行資料庫的寫入操作再進行其他操作時,將會出現資料庫裡的信息發生改變、而後續的其他操作出現問題的現象,此時數據發生錯誤。
本申請實施例中,為了避免該種顯現的發生,對於必須先增加到資料庫的資源信息,也可稱之為先執行寫入資料庫的操作,該些先執行寫入資料庫的操作即為本申請中的更新步驟,若該些更新步驟拋出異常,則執行回滾操作,即執行回滾sql。例如,先基於資料庫中最大的bundle文件的id,在資料庫中插入新增資源信息,然後依次執行:下載資源、生成patch文件、文件上傳cdn、寫入redis等一系列操作,若這些操作中的某個步驟發生異常中斷,則在捕獲異常中執行回滾函數(rollbacksql)以執行回滾操作。代碼可以如下:
可選的,上述實施例中,根據所述補丁文件更新所述app的資料庫的步驟或該步驟之前的任意一個步驟都可稱之為更新步驟,更新系統還判斷任意一個更新步驟是否發生異常,若任意一個更新步驟發生異常,則更新系統通過套接字發送所述更新信息。
具體的,業務線進行新增或修改操作時,後臺程序在處理js文件,以執行生成patch文件、上傳cdn、寫入redis等步驟的時間較長,常規的異步javascript和xml(asynchronousjavascriptandxml,ajax)請求有時間限制,當執行時間過長時會出現網絡超時現象。若後臺程序未執行完,前端界面已收到ajax請求超時的提示,則會出現問題。
為避免上述問題的發生,本申請實施例中,引入套接字(socket.io),實現websockt通信,客戶端和伺服器可同時跨平臺實時通信。
通信過程中,用戶在進行新增或修改等操作時,客戶端設置基socket.io自定義的接收事件,並在編譯中給出提示;當js文件生成patch文件成功或失敗時,伺服器會基於socket.io,將操作結果註冊到接收事件上;客戶端接收到監聽事件的回饋結果,向用戶提示操作結束。部分實現代碼如下:
首先、node程序入口。
其次,客戶端相關代碼。
最後,伺服器相關代碼。
圖5為本申請更新系統實施例一的結構示意圖,包括:
獲取模塊11,用於獲取應用程式app的腳本語言文件,所述腳本語言文件為用於更新所述app的文件;
處理模塊12,用於根據所述腳本語言文件生成補丁文件;
更新模塊13,用於根據所述補丁文件更新資料庫。
本申請實施例提供的更新系統,獲取用於更新app的腳本語言文件,根據腳本語言文件生成補丁文件,並根據補丁文件更新資料庫。該過程中,將用於更新app的js文件通過更新系統轉換為能夠被nativeapp融合的補丁文件,並更新到資料庫中,使得後續對app進行更新時,僅將能夠融合到app中的補丁文件下發給終端,使得app的更新不受雙平臺開發、打包發版的限制,而且具備流暢的動畫體驗效果。
圖6為本申請更新系統實施例二的結構示意圖,請參照圖6,本申請實施例提供的更新系統,在上述圖5的基礎上,進一步的,還包括:
測試模塊14,用於在所述更新模塊13根據所述補丁文件更新所述待app的資料庫之前,對所述補丁文件進行測試。
再請參照圖6,可選的,在本申請一實施例中,上述的更新系統還包括:
上傳模塊15,用於在所述處理模塊12根據所述腳本語言文件生成補丁文件之後,所述更新模塊13根據所述補丁文件更新所述app的資料庫之前,將所述補丁文件上傳至內容分發網絡,供所述內容分發網絡將所述補丁文件寫入應用程式編程接口。
可選的,在本申請一實施例中,所述處理模塊12,還用於判斷更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;若所述更新步驟發生異常,則執行回滾操作。
可選的,在本申請一實施例中,所述處理模塊12,還用於獲取更新信息,所述更新信息指示所述更新步驟是否發生異常,所述更新步驟為所述更新系統根據所述補丁文件更新所述app的資料庫的步驟或之前的任意一個步驟;通過套接字發送所述更新信息。
可選的,在本申請一實施例中,所述更新模塊13,具體用於判斷所述補丁文件為新增補丁文件或更新補丁文件;
若所述補丁文件為新增補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述新增補丁文件寫入應用程式編程接口,並寫入所述資料庫;否則,停止更新所述資料庫;
若所述補丁文件為更新補丁文件,則確定是否需要更新所述資料庫,若需要,則將所述更新補丁文件寫入所述應用程式編程接口,並覆蓋所述資料庫中的原始補丁文件;否則,確定所述更新補丁文件的最大版本號。
本領域普通技術人員可以理解:實現上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬體來完成。前述的程序可以存儲於一計算機可讀取存儲介質中。該程序在執行時,執行包括上述各方法實施例的步驟;而前述的存儲介質包括:rom、ram、磁碟或者光碟等各種可以存儲程序代碼的介質。