本發(fā)明涉及通訊領(lǐng)域,尤其涉及一種應用程序的漏洞修復方法、移動終端及補丁服務(wù)器。
背景技術(shù):
目前市面上的各種APP(應用程序)或多或少都會遇到線上版本有重大Bug(漏洞)的情況。APP需要更新程序以修復Bug,但在蘋果商店中發(fā)布新版本的時間是很長的,因此,需要一套可利用的機制,以便在不發(fā)布新版本的情況下就能修復APP中的Bug。
大多數(shù)開發(fā)者的做法是使用熱修復技術(shù),也就是在APP剛一啟動的時候去下載一段修復腳本,利用Objective-C的動態(tài)特性將有問題的代碼替換掉,從而使APP能夠正常運行,其技術(shù)細節(jié)如下:
(1)如果APP存在Bug,則開發(fā)者把正確的代碼作為補丁文件上傳到APP對應的服務(wù)器。當前主流的補丁文件,一種是JSPatch,一種是lua腳本。
(2)當APP啟動時,首先加載本地已經(jīng)下載了的補丁文件,APP把補丁文件中的代碼解析出來,利用iOS系統(tǒng)專用語言objective-c的動態(tài)性和運行時機制,替換APP包中舊的錯誤代碼。
(3)APP啟動時,同時發(fā)送接口請求,詢問補丁服務(wù)器是否有新的補丁文件,如果有,則從補丁服務(wù)器下載這個補丁文件到本地。此時,APP處于等待狀態(tài),同時APP繼續(xù)執(zhí)行啟動流程,以開啟APP進行使用。
當APP等到第(3)步下載完成補丁文件后,在下一次重新啟動該APP時,會向步驟(2)的過程一樣,重新從本地去加載新的補丁文件。
上述過程中,由于APP啟動時已經(jīng)加載了已下載的補丁文件,因此,當APP執(zhí)行到出現(xiàn)Bug的頁面時,會執(zhí)行被替換后的正確代碼,而非有問題的舊代碼,因此,通過以上方法,不需要發(fā)版,就可實現(xiàn)修復線上APP的Bug。
然而,如果當前APP的Bug發(fā)生在啟動過程中,導致來不及下載補丁服務(wù)器上新的補丁文件,在剛啟動的過程中就會crash(宕機),則當前APP的Bug將得不到修復,將會一啟動就crash,用戶將無法使用當前APP,必須等到重新發(fā)版才可以使用,用戶體驗較低。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種應用程序的漏洞修復方法、移動終端及補丁服務(wù)器,用以解決現(xiàn)有技術(shù)的如下問題:如果當前APP的Bug發(fā)生在啟動過程中,會導致來不及下載補丁服務(wù)器上新的補丁文件,在剛啟動的過程中APP就會crash,用戶將無法使用當前APP,必須等到重新發(fā)版才可以使用,用戶體驗較低。
為解決上述技術(shù)問題,一方面,本發(fā)明提供一種應用程序的漏洞修復方法,包括:
通過應用程序的通知服務(wù)拓展接口接收推送服務(wù)器發(fā)送來的補丁推送消息,所述補丁推送消息包含有標識信息;
通過所述通知服務(wù)拓展接口向所述應用程序的補丁服務(wù)器發(fā)送包含有所述標識信息的補丁下載請求,并接收所述補丁服務(wù)器基于所述標識信息發(fā)來的相應的補丁文件;
當所述應用程序啟動時,加載所述補丁文件,通過所述補丁文件修復所述應用程序中的漏洞。
可選的,所述方法還包括:
所述通知服務(wù)拓展接口將從所述補丁服務(wù)器中下載的所述補丁文件保存到應用分組的共享文件中;所述應用程序和所述通知服務(wù)拓展接口均位于所述應用分組中。
可選的,所述當所述應用程序啟動時,加載所述補丁文件,通過所述補丁文件修復所述應用程序中的漏洞,包括:
當所述應用程序啟動時,從所述共享文件中獲取最新版本的補丁文件,并解析出最新版本的補丁文件中的代碼,用解析出的所述代碼替換所述應用程序中的錯誤代碼。
另一方面,本發(fā)明還提供一種應用程序的漏洞修復方法,包括:
接收移動終端中的應用程序的通知服務(wù)拓展接口發(fā)送來的補丁下載請求,所述補丁下載請求包含有標識信息;
根據(jù)所述標識信息查找對應的補丁文件,并將查找到的補丁文件發(fā)送給所述通知服務(wù)拓展接口。
可選的,在接收所述補丁下載請求之前,所述方法還包括:
接收應用程序開發(fā)平臺發(fā)送來的補丁文件,并為所述補丁文件生成對應的標識信息;
將所述標識信息反饋給所述應用程序開發(fā)平臺,以通過所述應用程序開發(fā)平臺將包含有所述標識信息的補丁推送消息發(fā)送給推送服務(wù)器。
另一方面,本發(fā)明還提供一種移動終端,包括:
第一接收模塊,用于通過應用程序的通知服務(wù)拓展接口接收推送服務(wù)器發(fā)送來的補丁推送消息,所述補丁推送消息包含有標識信息;
下載模塊,用于通過所述通知服務(wù)拓展接口向所述應用程序的補丁服務(wù)器發(fā)送包含有所述標識信息的補丁下載請求,并接收所述補丁服務(wù)器基于所述標識信息發(fā)來的相應的補丁文件;
修復模塊,用于當所述應用程序啟動時,加載所述補丁文件,通過所述補丁文件修復所述應用程序中的漏洞。
可選的,所述下載模塊,還用于:
所述通知服務(wù)拓展接口將從所述補丁服務(wù)器中下載的所述補丁文件保存到應用分組的共享文件中;所述應用程序和所述通知服務(wù)拓展接口均位于所述應用分組中。
可選的,所述修復模塊,具體用于:
當所述應用程序啟動時,從所述共享文件中獲取最新版本的補丁文件,并解析出最新版本的補丁文件中的代碼,用解析出的所述代碼替換所述應用程序中的錯誤代碼。
另一方面,本發(fā)明還提供一種補丁服務(wù)器,包括:
第二接收模塊,用于接收移動終端中的應用程序的通知服務(wù)拓展接口發(fā)送來的補丁下載請求,所述補丁下載請求包含有標識信息;
查找模塊,用于根據(jù)所述標識信息查找對應的補丁文件,并將查找到的補丁文件發(fā)送給所述通知服務(wù)拓展接口。
可選的,所述補丁服務(wù)器還包括:
生成模塊,用于接收應用程序開發(fā)平臺發(fā)送來的補丁文件,并為所述補丁文件生成對應的標識信息;
反饋模塊,用于將所述標識信息反饋給所述應用程序開發(fā)平臺,以通過所述應用程序開發(fā)平臺將包含有所述標識信息的補丁推送消息發(fā)送給推送服務(wù)器。
采用上述技術(shù)方案,本發(fā)明至少具有下列優(yōu)點:
本發(fā)明所述的應用程序的漏洞修復方法、移動終端及補丁服務(wù)器,當應用程序開發(fā)平臺將應用程序的補丁文件上傳到補丁服務(wù)器時,會通過推送服務(wù)器發(fā)送攜帶有標識信息的補丁推送消息,蘋果系統(tǒng)中的通知服務(wù)拓展接口會攔截補丁推送消息,并根據(jù)所述補丁推送消息中的標識信息從補丁服務(wù)器中下載補丁文件,并將補丁文件保存到本地的共享文件中。當應用程序啟動時,只需從本地的共享文件中就能直接獲得所述補丁文件,從而修復應用程序的漏洞。由于通知服務(wù)拓展接口已將補丁文件保存到本地的共享文件中,所以應用程序不用再等待向補丁服務(wù)器發(fā)送請求,以及等待從補丁服務(wù)器下載補丁文件。與現(xiàn)有技術(shù)先比,本發(fā)明的響應速度更快,不僅提高了系統(tǒng)的整體性能,也提高了用戶體驗度。整個過程中,在用戶毫無察覺的情況下就能夠完成軟件更新,在應用程序完全啟動前就修復好各種漏洞,應用程序就不會遇到宕機風險。
附圖說明
圖1是本發(fā)明第一實施例中應用程序的漏洞修復方法的流程圖;
圖2是本發(fā)明第二實施例中應用程序的漏洞修復方法的流程圖;
圖3是本發(fā)明第三實施例中移動終端的結(jié)構(gòu)示意圖;
圖4是本發(fā)明第四實施例中補丁服務(wù)器的結(jié)構(gòu)示意圖;
圖5是本發(fā)明第五實施例中修復APP中的Bug的方法的流程圖。
具體實施方式
為更進一步闡述本發(fā)明為達成預定目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對本發(fā)明進行詳細說明如后。
本發(fā)明第一實施例,一種應用程序的漏洞修復方法,應用于移動終端,如圖1所示,所述方法包括以下具體步驟:
S101:通過應用程序的通知服務(wù)拓展接口接收推送服務(wù)器發(fā)送來的補丁推送消息,所述補丁推送消息包含有標識信息。
本實施例利用了蘋果公司在iOS10操作系統(tǒng)中推出的通知服務(wù)拓展接口UNNotificationServiceExtension。UNNotificationServiceExtension是蘋果公司在iOS10操作系統(tǒng)中推出的一個用于在本地處理推送消息的管理類。當蘋果手機更新到iOS10操作系統(tǒng)時,用戶能為每個APP創(chuàng)建一個通知服務(wù)拓展來管理和顯示APP的推送內(nèi)容。當UNNotificationServiceExtension攔截到推送信息時,iOS10操作系統(tǒng)允許進行一些網(wǎng)絡(luò)請求并向UNNotificationServiceExtension所在的應用分組APP Group下的共享文件中存儲一些資源。
具體的,所述標識信息為補丁服務(wù)器為每個補丁文件生成的用于區(qū)分于其他補丁文件的唯一身份標識;例如,補丁服務(wù)器為每個補丁文件設(shè)置對應的補丁ID,并將補丁文件以及補丁ID之間的對應關(guān)系進行存儲。
進一步的,在應用程序開發(fā)平臺完成了補丁文件后,就可以將補丁文件發(fā)送至與所述應用程序?qū)难a丁服務(wù)器中,所述補丁服務(wù)器為存儲的補丁文件生成一個唯一的補丁ID,并將所述補丁ID返回至應用程序開發(fā)平臺。應用程序開發(fā)平臺在接收到所述補丁ID后,就可以將所述補丁ID發(fā)送至推送服務(wù)器,此時,推送服務(wù)器在發(fā)送補丁推送消息時,就可以將所述補丁ID攜帶在所述補丁推送消息中,并發(fā)送至移動終端中的UNNotificationServiceExtension。
S102:通過所述通知服務(wù)拓展接口向所述應用程序的補丁服務(wù)器發(fā)送包含有所述標識信息的補丁下載請求,并接收所述補丁服務(wù)器基于所述標識信息發(fā)來的相應的補丁文件。
在本實施例中通過為應用程序設(shè)置的UNNotificationServiceExtension來下載補丁服務(wù)器中的補丁文件。
S103:當所述應用程序啟動時,加載所述補丁文件,通過所述補丁文件修復所述應用程序中的漏洞。
具體的,所述方法還包括:
UNNotificationServiceExtension將從所述補丁服務(wù)器中下載的所述補丁文件保存到應用分組APP Group的共享文件中;
所述應用程序和所述UNNotificationServiceExtension均位于所述APP Group中。
進一步的,步驟S103,具體包括:
當所述應用程序啟動時,從所述共享文件中獲取最新版本的補丁文件,并解析出最新版本的補丁文件中的代碼,用解析出的所述代碼替換所述應用程序中的錯誤代碼。
本實施例通過為移動終端上的任一應用程序設(shè)定對應的通知服務(wù)拓展接口UNNotificationServiceExtension,以通過UNNotificationServiceExtension根據(jù)推送消息中的補丁ID從所述任一應用程序的補丁服務(wù)器中下載與所述補丁ID相對應的補丁文件,UNNotificationServiceExtension將所述補丁文件保存到UNNotificationServiceExtension和所述任一應用程序共同存在的APP Group中的共享文件中,從而當所述任一應用程序再次啟動時,可直接從所述共享文件中獲取最新版本的補丁文件,并基于所述最新版本的補丁文件對所述任一應用程序進行漏洞修復,完成所述任一應用程序的更新。
本發(fā)明第二實施例,一種應用程序的漏洞修復方法,應用于補丁服務(wù)器,如圖2所示,所述方法包括以下具體步驟:
步驟S201:接收移動終端中的應用程序的通知服務(wù)拓展接口發(fā)送來的補丁下載請求,所述補丁下載請求包含有標識信息。
本實施例利用了蘋果公司在iOS10操作系統(tǒng)中推出的通知服務(wù)拓展接口UNNotificationServiceExtension。UNNotificationServiceExtension是蘋果公司在iOS10操作系統(tǒng)中推出的一個用于在本地處理推送消息的管理類。當蘋果手機更新到iOS10操作系統(tǒng)時,用戶能為每個APP創(chuàng)建一個通知服務(wù)拓展來管理和顯示APP的推送內(nèi)容。當UNNotificationServiceExtension攔截到推送信息時,iOS10操作系統(tǒng)允許進行一些網(wǎng)絡(luò)請求并向UNNotificationServiceExtension所在的應用分組APP Group下的共享文件中存儲一些資源。
具體的,所述標識信息為補丁服務(wù)器為每個補丁文件生成的用于區(qū)分于其他補丁文件的唯一身份標識;例如,補丁服務(wù)器為每個補丁文件設(shè)置對應的補丁ID,并將補丁文件以及補丁ID之間的對應關(guān)系進行存儲。
進一步的,在接收所述補丁下載請求之前,所述方法還包括:
接收應用程序開發(fā)平臺發(fā)送來的補丁文件,并為所述補丁文件生成對應的標識信息;
將所述標識信息反饋給所述應用程序開發(fā)平臺,以通過所述應用程序開發(fā)平臺將包含有所述標識信息的補丁推送消息發(fā)送給推送服務(wù)器。
在應用程序開發(fā)平臺完成了補丁文件后,就可以將補丁文件發(fā)送至與所述應用程序?qū)难a丁服務(wù)器中,所述補丁服務(wù)器為存儲的補丁文件生成一個唯一的補丁ID,并將所述補丁ID返回至應用程序開發(fā)平臺。應用程序開發(fā)平臺在接收到所述補丁ID后,就可以將所述補丁ID發(fā)送至推送服務(wù)器,此時,推送服務(wù)器在發(fā)送補丁推送消息時,就可以將所述補丁ID攜帶在所述補丁推送消息中,并發(fā)送至移動終端中的UNNotificationServiceExtension。
步驟S202:根據(jù)所述標識信息查找對應的補丁文件,并將查找到的補丁文件發(fā)送給所述通知服務(wù)拓展接口。
本發(fā)明第三實施例,一種移動終端,如圖3所示,具體包括以下組成部分:
接收模塊301,用于通過應用程序的通知服務(wù)拓展接口接收推送服務(wù)器發(fā)送來的補丁推送消息,所述補丁推送消息包含有標識信息。
本實施例利用了蘋果公司在iOS10操作系統(tǒng)中推出的通知服務(wù)拓展接口UNNotificationServiceExtension。UNNotificationServiceExtension是蘋果公司在iOS10操作系統(tǒng)中推出的一個用于在本地處理推送消息的管理類。當蘋果手機更新到iOS10操作系統(tǒng)時,用戶能為每個APP創(chuàng)建一個通知服務(wù)拓展來管理和顯示APP的推送內(nèi)容。當UNNotificationServiceExtension攔截到推送信息時,iOS10操作系統(tǒng)允許進行一些網(wǎng)絡(luò)請求并向UNNotificationServiceExtension所在的應用分組APP Group下的共享文件中存儲一些資源。
具體的,所述標識信息為補丁服務(wù)器為每個補丁文件生成的用于區(qū)分于其他補丁文件的唯一身份標識;例如,補丁服務(wù)器為每個補丁文件設(shè)置對應的補丁ID,并將補丁文件以及補丁ID之間的對應關(guān)系進行存儲。
進一步的,在應用程序開發(fā)平臺完成了補丁文件后,就可以將補丁文件發(fā)送至與所述應用程序?qū)难a丁服務(wù)器中,所述補丁服務(wù)器為存儲的補丁文件生成一個唯一的補丁ID,并將所述補丁ID返回至應用程序開發(fā)平臺。應用程序開發(fā)平臺在接收到所述補丁ID后,就可以將所述補丁ID發(fā)送至推送服務(wù)器,此時,推送服務(wù)器在發(fā)送補丁推送消息時,就可以將所述補丁ID攜帶在所述補丁推送消息中,并發(fā)送至移動終端中的UNNotificationServiceExtension。
下載模塊302,用于通過所述通知服務(wù)拓展接口向所述應用程序的補丁服務(wù)器發(fā)送包含有所述標識信息的補丁下載請求,并接收所述補丁服務(wù)器基于所述標識信息發(fā)來的相應的補丁文件。
在本實施例中通過為應用程序設(shè)置的UNNotificationServiceExtension來下載補丁服務(wù)器中的補丁文件。
具體的,所述下載模塊302,還用于:
所述通知服務(wù)拓展接口將從所述補丁服務(wù)器中下載的所述補丁文件保存到應用分組的共享文件中;所述應用程序和所述通知服務(wù)拓展接口均位于所述應用分組中。
修復模塊303,用于當所述應用程序啟動時,加載所述補丁文件,通過所述補丁文件修復所述應用程序中的漏洞。
具體的,修復模塊303,用于:
當所述應用程序啟動時,從所述共享文件中獲取最新版本的補丁文件,并解析出最新版本的補丁文件中的代碼,用解析出的所述代碼替換所述應用程序中的錯誤代碼。
本實施例通過為移動終端上的任一應用程序設(shè)定對應的通知服務(wù)拓展接口UNNotificationServiceExtension,以通過UNNotificationServiceExtension根據(jù)推送消息中的補丁ID從所述任一應用程序的補丁服務(wù)器中下載與所述補丁ID相對應的補丁文件,UNNotificationServiceExtension將所述補丁文件保存到UNNotificationServiceExtension和所述任一應用程序共同存在的APP Group中的共享文件中,從而當所述任一應用程序再次啟動時,可直接從所述共享文件中獲取最新版本的補丁文件,并基于所述最新版本的補丁文件對所述任一應用程序進行漏洞修復,完成所述任一應用程序的更新。
本發(fā)明第四實施例,一種補丁服務(wù)器,如圖4所示,具體包括以下組成部分:
接收模塊401,用于接收移動終端中的應用程序的通知服務(wù)拓展接口發(fā)送來的補丁下載請求,所述補丁下載請求包含有標識信息。
本實施例利用了蘋果公司在iOS10操作系統(tǒng)中推出的通知服務(wù)拓展接口UNNotificationServiceExtension。UNNotificationServiceExtension是蘋果公司在iOS10操作系統(tǒng)中推出的一個用于在本地處理推送消息的管理類。當蘋果手機更新到iOS10操作系統(tǒng)時,用戶能為每個APP創(chuàng)建一個通知服務(wù)拓展來管理和顯示APP的推送內(nèi)容。當UNNotificationServiceExtension攔截到推送信息時,iOS10操作系統(tǒng)允許進行一些網(wǎng)絡(luò)請求并向UNNotificationServiceExtension所在的應用分組APP Group下的共享文件中存儲一些資源。
具體的,所述標識信息為補丁服務(wù)器為每個補丁文件生成的用于區(qū)分于其他補丁文件的唯一身份標識;例如,補丁服務(wù)器為每個補丁文件設(shè)置對應的補丁ID,并將補丁文件以及補丁ID之間的對應關(guān)系進行存儲。
進一步的,所述裝置還包括:
生成模塊,用于接收應用程序開發(fā)平臺發(fā)送來的補丁文件,并為所述補丁文件生成對應的標識信息。
反饋模塊,用于將所述標識信息反饋給所述應用程序開發(fā)平臺,以通過所述應用程序開發(fā)平臺將包含有所述標識信息的補丁推送消息發(fā)送給推送服務(wù)器。
在應用程序開發(fā)平臺完成了補丁文件后,就可以將補丁文件發(fā)送至與所述應用程序?qū)难a丁服務(wù)器中,所述補丁服務(wù)器為存儲的補丁文件生成一個唯一的補丁ID,并將所述補丁ID返回至應用程序開發(fā)平臺。應用程序開發(fā)平臺在接收到所述補丁ID后,就可以將所述補丁ID發(fā)送至推送服務(wù)器,此時,推送服務(wù)器在發(fā)送補丁推送消息時,就可以將所述補丁ID攜帶在所述補丁推送消息中,并發(fā)送至移動終端中的UNNotificationServiceExtension。
查找模塊402,用于根據(jù)所述標識信息查找對應的補丁文件,并將查找到的補丁文件發(fā)送給所述通知服務(wù)拓展接口。
為了解決應用程序APP在啟動過程中發(fā)生宕機crash,導致無法通過傳統(tǒng)的熱修復來解決漏洞Bug的問題,本發(fā)明第五實施例提出了一種利用iOS10操作系統(tǒng)提供的UNNotificationServiceExtension來修復APP中的Bug的方法,如圖5所示,包括以下具體內(nèi)容:
S501:APP的開發(fā)者通過開發(fā)平臺修正出現(xiàn)Bug的代碼,把新的修復代碼轉(zhuǎn)換為JS或者lua語言實現(xiàn),將其保存為補丁文件。
S502:APP的開發(fā)者把以上補丁文件上傳到APP對應的補丁服務(wù)器,補丁服務(wù)器針對該補丁文件生成一個對應的補丁ID。
S503:通過推送服務(wù)將一條特殊格式的攜帶補丁ID的推送消息發(fā)送給移動終端(用戶)。
S504:移動終端上的UNNotificationServiceExtension攔截所述推送消息,并通過設(shè)定的接口根據(jù)補丁ID下載補丁文件,并將所述補丁文件保存在本地的共享文件中。
S505:APP再次啟動時,判斷本地的共享文件中有沒有補丁文件,如果有補丁文件,則讀取其中較新的一個,APP把補丁文件中的代碼解析出來,利用objective-c的動態(tài)性和運行時機制,替換APP包中舊的錯誤代碼。
S506:APP繼續(xù)執(zhí)行啟動過程,直到APP完全開啟。即使原本啟動過程存在Bug會產(chǎn)生crash,但是上述S505已經(jīng)替換了Bug代碼,所以這里不再有Bug,Bug得以修復。
本發(fā)明可以實現(xiàn)在App不啟動的情況下將修復腳本下載到用戶設(shè)備上,當App啟動后,第一時間去獲取腳本進行修復,可以解決在獲取到修復腳本前,程序就崩潰的問題。
盡管為示例目的,已經(jīng)公開了本發(fā)明的優(yōu)選實施例,本領(lǐng)域的技術(shù)人員將意識到各種改進、增加和取代也是可能的,因此,本發(fā)明的范圍應當不限于上述實施例。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。