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