一种应用程序的漏洞修复方法、移动终端及补丁服务器技术领域
本发明涉及通讯领域,尤其涉及一种应用程序的漏洞修复方法、移动终端及补丁
服务器。
背景技术
目前市面上的各种APP(应用程序)或多或少都会遇到线上版本有重大Bug(漏洞)
的情况。APP需要更新程序以修复Bug,但在苹果商店中发布新版本的时间是很长的,因此,
需要一套可利用的机制,以便在不发布新版本的情况下就能修复APP中的Bug。
大多数开发者的做法是使用热修复技术,也就是在APP刚一启动的时候去下载一
段修复脚本,利用Objective-C的动态特性将有问题的代码替换掉,从而使APP能够正常运
行,其技术细节如下:
(1)如果APP存在Bug,则开发者把正确的代码作为补丁文件上传到APP对应的服务
器。当前主流的补丁文件,一种是JSPatch,一种是lua脚本。
(2)当APP启动时,首先加载本地已经下载了的补丁文件,APP把补丁文件中的代码
解析出来,利用iOS系统专用语言objective-c的动态性和运行时机制,替换APP包中旧的错
误代码。
(3)APP启动时,同时发送接口请求,询问补丁服务器是否有新的补丁文件,如果
有,则从补丁服务器下载这个补丁文件到本地。此时,APP处于等待状态,同时APP继续执行
启动流程,以开启APP进行使用。
当APP等到第(3)步下载完成补丁文件后,在下一次重新启动该APP时,会向步骤
(2)的过程一样,重新从本地去加载新的补丁文件。
上述过程中,由于APP启动时已经加载了已下载的补丁文件,因此,当APP执行到出
现Bug的页面时,会执行被替换后的正确代码,而非有问题的旧代码,因此,通过以上方法,
不需要发版,就可实现修复线上APP的Bug。
然而,如果当前APP的Bug发生在启动过程中,导致来不及下载补丁服务器上新的
补丁文件,在刚启动的过程中就会crash(宕机),则当前APP的Bug将得不到修复,将会一启
动就crash,用户将无法使用当前APP,必须等到重新发版才可以使用,用户体验较低。
发明内容
本发明提供一种应用程序的漏洞修复方法、移动终端及补丁服务器,用以解决现
有技术的如下问题:如果当前APP的Bug发生在启动过程中,会导致来不及下载补丁服务器
上新的补丁文件,在刚启动的过程中APP就会crash,用户将无法使用当前APP,必须等到重
新发版才可以使用,用户体验较低。
为解决上述技术问题,一方面,本发明提供一种应用程序的漏洞修复方法,包括:
通过应用程序的通知服务拓展接口接收推送服务器发送来的补丁推送消息,所述
补丁推送消息包含有标识信息;
通过所述通知服务拓展接口向所述应用程序的补丁服务器发送包含有所述标识
信息的补丁下载请求,并接收所述补丁服务器基于所述标识信息发来的相应的补丁文件;
当所述应用程序启动时,加载所述补丁文件,通过所述补丁文件修复所述应用程
序中的漏洞。
可选的,所述方法还包括:
所述通知服务拓展接口将从所述补丁服务器中下载的所述补丁文件保存到应用
分组的共享文件中;所述应用程序和所述通知服务拓展接口均位于所述应用分组中。
可选的,所述当所述应用程序启动时,加载所述补丁文件,通过所述补丁文件修复
所述应用程序中的漏洞,包括:
当所述应用程序启动时,从所述共享文件中获取最新版本的补丁文件,并解析出
最新版本的补丁文件中的代码,用解析出的所述代码替换所述应用程序中的错误代码。
另一方面,本发明还提供一种应用程序的漏洞修复方法,包括:
接收移动终端中的应用程序的通知服务拓展接口发送来的补丁下载请求,所述补
丁下载请求包含有标识信息;
根据所述标识信息查找对应的补丁文件,并将查找到的补丁文件发送给所述通知
服务拓展接口。
可选的,在接收所述补丁下载请求之前,所述方法还包括:
接收应用程序开发平台发送来的补丁文件,并为所述补丁文件生成对应的标识信
息;
将所述标识信息反馈给所述应用程序开发平台,以通过所述应用程序开发平台将
包含有所述标识信息的补丁推送消息发送给推送服务器。
另一方面,本发明还提供一种移动终端,包括:
第一接收模块,用于通过应用程序的通知服务拓展接口接收推送服务器发送来的
补丁推送消息,所述补丁推送消息包含有标识信息;
下载模块,用于通过所述通知服务拓展接口向所述应用程序的补丁服务器发送包
含有所述标识信息的补丁下载请求,并接收所述补丁服务器基于所述标识信息发来的相应
的补丁文件;
修复模块,用于当所述应用程序启动时,加载所述补丁文件,通过所述补丁文件修
复所述应用程序中的漏洞。
可选的,所述下载模块,还用于:
所述通知服务拓展接口将从所述补丁服务器中下载的所述补丁文件保存到应用
分组的共享文件中;所述应用程序和所述通知服务拓展接口均位于所述应用分组中。
可选的,所述修复模块,具体用于:
当所述应用程序启动时,从所述共享文件中获取最新版本的补丁文件,并解析出
最新版本的补丁文件中的代码,用解析出的所述代码替换所述应用程序中的错误代码。
另一方面,本发明还提供一种补丁服务器,包括:
第二接收模块,用于接收移动终端中的应用程序的通知服务拓展接口发送来的补
丁下载请求,所述补丁下载请求包含有标识信息;
查找模块,用于根据所述标识信息查找对应的补丁文件,并将查找到的补丁文件
发送给所述通知服务拓展接口。
可选的,所述补丁服务器还包括:
生成模块,用于接收应用程序开发平台发送来的补丁文件,并为所述补丁文件生
成对应的标识信息;
反馈模块,用于将所述标识信息反馈给所述应用程序开发平台,以通过所述应用
程序开发平台将包含有所述标识信息的补丁推送消息发送给推送服务器。
采用上述技术方案,本发明至少具有下列优点:
本发明所述的应用程序的漏洞修复方法、移动终端及补丁服务器,当应用程序开
发平台将应用程序的补丁文件上传到补丁服务器时,会通过推送服务器发送携带有标识信
息的补丁推送消息,苹果系统中的通知服务拓展接口会拦截补丁推送消息,并根据所述补
丁推送消息中的标识信息从补丁服务器中下载补丁文件,并将补丁文件保存到本地的共享
文件中。当应用程序启动时,只需从本地的共享文件中就能直接获得所述补丁文件,从而修
复应用程序的漏洞。由于通知服务拓展接口已将补丁文件保存到本地的共享文件中,所以
应用程序不用再等待向补丁服务器发送请求,以及等待从补丁服务器下载补丁文件。与现
有技术先比,本发明的响应速度更快,不仅提高了系统的整体性能,也提高了用户体验度。
整个过程中,在用户毫无察觉的情况下就能够完成软件更新,在应用程序完全启动前就修
复好各种漏洞,应用程序就不会遇到宕机风险。
附图说明
图1是本发明第一实施例中应用程序的漏洞修复方法的流程图;
图2是本发明第二实施例中应用程序的漏洞修复方法的流程图;
图3是本发明第三实施例中移动终端的结构示意图;
图4是本发明第四实施例中补丁服务器的结构示意图;
图5是本发明第五实施例中修复APP中的Bug的方法的流程图。
具体实施方式
为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图
及较佳实施例,对本发明进行详细说明如后。
本发明第一实施例,一种应用程序的漏洞修复方法,应用于移动终端,如图1所示,
所述方法包括以下具体步骤:
S101:通过应用程序的通知服务拓展接口接收推送服务器发送来的补丁推送消
息,所述补丁推送消息包含有标识信息。
本实施例利用了苹果公司在iOS10操作系统中推出的通知服务拓展接口
UNNotificationServiceExtension。UNNotificationServiceExtension是苹果公司在
iOS10操作系统中推出的一个用于在本地处理推送消息的管理类。当苹果手机更新到iOS10
操作系统时,用户能为每个APP创建一个通知服务拓展来管理和显示APP的推送内容。当
UNNotificationServiceExtension拦截到推送信息时,iOS10操作系统允许进行一些网络
请求并向UNNotificationServiceExtension所在的应用分组APP Group下的共享文件中存
储一些资源。
具体的,所述标识信息为补丁服务器为每个补丁文件生成的用于区分于其他补丁
文件的唯一身份标识;例如,补丁服务器为每个补丁文件设置对应的补丁ID,并将补丁文件
以及补丁ID之间的对应关系进行存储。
进一步的,在应用程序开发平台完成了补丁文件后,就可以将补丁文件发送至与
所述应用程序对应的补丁服务器中,所述补丁服务器为存储的补丁文件生成一个唯一的补
丁ID,并将所述补丁ID返回至应用程序开发平台。应用程序开发平台在接收到所述补丁ID
后,就可以将所述补丁ID发送至推送服务器,此时,推送服务器在发送补丁推送消息时,就
可以将所述补丁ID携带在所述补丁推送消息中,并发送至移动终端中的
UNNotificationServiceExtension。
S102:通过所述通知服务拓展接口向所述应用程序的补丁服务器发送包含有所述
标识信息的补丁下载请求,并接收所述补丁服务器基于所述标识信息发来的相应的补丁文
件。
在本实施例中通过为应用程序设置的UNNotificationServiceExtension来下载
补丁服务器中的补丁文件。
S103:当所述应用程序启动时,加载所述补丁文件,通过所述补丁文件修复所述应
用程序中的漏洞。
具体的,所述方法还包括:
UNNotificationServiceExtension将从所述补丁服务器中下载的所述补丁文件
保存到应用分组APP Group的共享文件中;
所述应用程序和所述UNNotificationServiceExtension均位于所述APP Group
中。
进一步的,步骤S103,具体包括:
当所述应用程序启动时,从所述共享文件中获取最新版本的补丁文件,并解析出
最新版本的补丁文件中的代码,用解析出的所述代码替换所述应用程序中的错误代码。
本实施例通过为移动终端上的任一应用程序设定对应的通知服务拓展接口
UNNotificationServiceExtension,以通过UNNotificationServiceExtension根据推送消
息中的补丁ID从所述任一应用程序的补丁服务器中下载与所述补丁ID相对应的补丁文件,
UNNotificationServiceExtension将所述补丁文件保存到
UNNotificationServiceExtension和所述任一应用程序共同存在的APP Group中的共享文
件中,从而当所述任一应用程序再次启动时,可直接从所述共享文件中获取最新版本的补
丁文件,并基于所述最新版本的补丁文件对所述任一应用程序进行漏洞修复,完成所述任
一应用程序的更新。
本发明第二实施例,一种应用程序的漏洞修复方法,应用于补丁服务器,如图2所
示,所述方法包括以下具体步骤:
步骤S201:接收移动终端中的应用程序的通知服务拓展接口发送来的补丁下载请
求,所述补丁下载请求包含有标识信息。
本实施例利用了苹果公司在iOS10操作系统中推出的通知服务拓展接口
UNNotificationServiceExtension。UNNotificationServiceExtension是苹果公司在
iOS10操作系统中推出的一个用于在本地处理推送消息的管理类。当苹果手机更新到iOS10
操作系统时,用户能为每个APP创建一个通知服务拓展来管理和显示APP的推送内容。当
UNNotificationServiceExtension拦截到推送信息时,iOS10操作系统允许进行一些网络
请求并向UNNotificationServiceExtension所在的应用分组APP Group下的共享文件中存
储一些资源。
具体的,所述标识信息为补丁服务器为每个补丁文件生成的用于区分于其他补丁
文件的唯一身份标识;例如,补丁服务器为每个补丁文件设置对应的补丁ID,并将补丁文件
以及补丁ID之间的对应关系进行存储。
进一步的,在接收所述补丁下载请求之前,所述方法还包括:
接收应用程序开发平台发送来的补丁文件,并为所述补丁文件生成对应的标识信
息;
将所述标识信息反馈给所述应用程序开发平台,以通过所述应用程序开发平台将
包含有所述标识信息的补丁推送消息发送给推送服务器。
在应用程序开发平台完成了补丁文件后,就可以将补丁文件发送至与所述应用程
序对应的补丁服务器中,所述补丁服务器为存储的补丁文件生成一个唯一的补丁ID,并将
所述补丁ID返回至应用程序开发平台。应用程序开发平台在接收到所述补丁ID后,就可以
将所述补丁ID发送至推送服务器,此时,推送服务器在发送补丁推送消息时,就可以将所述
补丁ID携带在所述补丁推送消息中,并发送至移动终端中的
UNNotificationServiceExtension。
步骤S202:根据所述标识信息查找对应的补丁文件,并将查找到的补丁文件发送
给所述通知服务拓展接口。
本发明第三实施例,一种移动终端,如图3所示,具体包括以下组成部分:
接收模块301,用于通过应用程序的通知服务拓展接口接收推送服务器发送来的
补丁推送消息,所述补丁推送消息包含有标识信息。
本实施例利用了苹果公司在iOS10操作系统中推出的通知服务拓展接口
UNNotificationServiceExtension。UNNotificationServiceExtension是苹果公司在
iOS10操作系统中推出的一个用于在本地处理推送消息的管理类。当苹果手机更新到iOS10
操作系统时,用户能为每个APP创建一个通知服务拓展来管理和显示APP的推送内容。当
UNNotificationServiceExtension拦截到推送信息时,iOS10操作系统允许进行一些网络
请求并向UNNotificationServiceExtension所在的应用分组APP Group下的共享文件中存
储一些资源。
具体的,所述标识信息为补丁服务器为每个补丁文件生成的用于区分于其他补丁
文件的唯一身份标识;例如,补丁服务器为每个补丁文件设置对应的补丁ID,并将补丁文件
以及补丁ID之间的对应关系进行存储。
进一步的,在应用程序开发平台完成了补丁文件后,就可以将补丁文件发送至与
所述应用程序对应的补丁服务器中,所述补丁服务器为存储的补丁文件生成一个唯一的补
丁ID,并将所述补丁ID返回至应用程序开发平台。应用程序开发平台在接收到所述补丁ID
后,就可以将所述补丁ID发送至推送服务器,此时,推送服务器在发送补丁推送消息时,就
可以将所述补丁ID携带在所述补丁推送消息中,并发送至移动终端中的
UNNotificationServiceExtension。
下载模块302,用于通过所述通知服务拓展接口向所述应用程序的补丁服务器发
送包含有所述标识信息的补丁下载请求,并接收所述补丁服务器基于所述标识信息发来的
相应的补丁文件。
在本实施例中通过为应用程序设置的UNNotificationServiceExtension来下载
补丁服务器中的补丁文件。
具体的,所述下载模块302,还用于:
所述通知服务拓展接口将从所述补丁服务器中下载的所述补丁文件保存到应用
分组的共享文件中;所述应用程序和所述通知服务拓展接口均位于所述应用分组中。
修复模块303,用于当所述应用程序启动时,加载所述补丁文件,通过所述补丁文
件修复所述应用程序中的漏洞。
具体的,修复模块303,用于:
当所述应用程序启动时,从所述共享文件中获取最新版本的补丁文件,并解析出
最新版本的补丁文件中的代码,用解析出的所述代码替换所述应用程序中的错误代码。
本实施例通过为移动终端上的任一应用程序设定对应的通知服务拓展接口
UNNotificationServiceExtension,以通过UNNotificationServiceExtension根据推送消
息中的补丁ID从所述任一应用程序的补丁服务器中下载与所述补丁ID相对应的补丁文件,
UNNotificationServiceExtension将所述补丁文件保存到
UNNotificationServiceExtension和所述任一应用程序共同存在的APP Group中的共享文
件中,从而当所述任一应用程序再次启动时,可直接从所述共享文件中获取最新版本的补
丁文件,并基于所述最新版本的补丁文件对所述任一应用程序进行漏洞修复,完成所述任
一应用程序的更新。
本发明第四实施例,一种补丁服务器,如图4所示,具体包括以下组成部分:
接收模块401,用于接收移动终端中的应用程序的通知服务拓展接口发送来的补
丁下载请求,所述补丁下载请求包含有标识信息。
本实施例利用了苹果公司在iOS10操作系统中推出的通知服务拓展接口
UNNotificationServiceExtension。UNNotificationServiceExtension是苹果公司在
iOS10操作系统中推出的一个用于在本地处理推送消息的管理类。当苹果手机更新到iOS10
操作系统时,用户能为每个APP创建一个通知服务拓展来管理和显示APP的推送内容。当
UNNotificationServiceExtension拦截到推送信息时,iOS10操作系统允许进行一些网络
请求并向UNNotificationServiceExtension所在的应用分组APP Group下的共享文件中存
储一些资源。
具体的,所述标识信息为补丁服务器为每个补丁文件生成的用于区分于其他补丁
文件的唯一身份标识;例如,补丁服务器为每个补丁文件设置对应的补丁ID,并将补丁文件
以及补丁ID之间的对应关系进行存储。
进一步的,所述装置还包括:
生成模块,用于接收应用程序开发平台发送来的补丁文件,并为所述补丁文件生
成对应的标识信息。
反馈模块,用于将所述标识信息反馈给所述应用程序开发平台,以通过所述应用
程序开发平台将包含有所述标识信息的补丁推送消息发送给推送服务器。
在应用程序开发平台完成了补丁文件后,就可以将补丁文件发送至与所述应用程
序对应的补丁服务器中,所述补丁服务器为存储的补丁文件生成一个唯一的补丁ID,并将
所述补丁ID返回至应用程序开发平台。应用程序开发平台在接收到所述补丁ID后,就可以
将所述补丁ID发送至推送服务器,此时,推送服务器在发送补丁推送消息时,就可以将所述
补丁ID携带在所述补丁推送消息中,并发送至移动终端中的
UNNotificationServiceExtension。
查找模块402,用于根据所述标识信息查找对应的补丁文件,并将查找到的补丁文
件发送给所述通知服务拓展接口。
为了解决应用程序APP在启动过程中发生宕机crash,导致无法通过传统的热修复
来解决漏洞Bug的问题,本发明第五实施例提出了一种利用iOS10操作系统提供的
UNNotificationServiceExtension来修复APP中的Bug的方法,如图5所示,包括以下具体内
容:
S501:APP的开发者通过开发平台修正出现Bug的代码,把新的修复代码转换为JS
或者lua语言实现,将其保存为补丁文件。
S502:APP的开发者把以上补丁文件上传到APP对应的补丁服务器,补丁服务器针
对该补丁文件生成一个对应的补丁ID。
S503:通过推送服务将一条特殊格式的携带补丁ID的推送消息发送给移动终端
(用户)。
S504:移动终端上的UNNotificationServiceExtension拦截所述推送消息,并通
过设定的接口根据补丁ID下载补丁文件,并将所述补丁文件保存在本地的共享文件中。
S505:APP再次启动时,判断本地的共享文件中有没有补丁文件,如果有补丁文件,
则读取其中较新的一个,APP把补丁文件中的代码解析出来,利用objective-c的动态性和
运行时机制,替换APP包中旧的错误代码。
S506:APP继续执行启动过程,直到APP完全开启。即使原本启动过程存在Bug会产
生crash,但是上述S505已经替换了Bug代码,所以这里不再有Bug,Bug得以修复。
本发明可以实现在App不启动的情况下将修复脚本下载到用户设备上,当App启动
后,第一时间去获取脚本进行修复,可以解决在获取到修复脚本前,程序就崩溃的问题。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到
各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施
例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多
情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有
技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储
介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算
机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。