CN110704131B - 一种html5应用调用原生应用的方法和装置 - Google Patents
一种html5应用调用原生应用的方法和装置 Download PDFInfo
- Publication number
- CN110704131B CN110704131B CN201910808765.0A CN201910808765A CN110704131B CN 110704131 B CN110704131 B CN 110704131B CN 201910808765 A CN201910808765 A CN 201910808765A CN 110704131 B CN110704131 B CN 110704131B
- Authority
- CN
- China
- Prior art keywords
- function
- calling
- application
- native application
- adapter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了一种HTML5应用调用原生应用的方法和装置。HTML5应用调用原生应用的方法包括:响应于HTML5应用的启动指令,检测HTML5应用所处的原生应用;创建与原生应用匹配的适配器;适配器是所述原生应用提供的JS SDK对象的实例;拦截HTML5应用调用预设的统一入口函数的调用指令,并依据调用指令调用适配器的第一函数,通过适配器的第一函数调用JS SDK对象,并通过JS SDK对象调用原生应用的功能;其中,第一函数是与调用指令中的函数名称相同的函数。解决了HTML5应用调用原生应用时,代码逻辑重用困难以及对业务的侵入较大,影响开发效率的问题。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种HTML5应用调用原生应用的方法和装置。
背景技术
在移动互联时代,为了业务的快速开发以及各业务的安全隔离,越来越多的业务采用Web应用(即HTML5应用,或称H5页面)方式进行开发,HTML5作为一门重要的开发语言,具有开发速度快、运行效率高、安全性好、可扩展性强等优点。借助于原生应用或第三方提供的JSSDK(JavaScript Software Development Kit,适合于JavaScript语言的开发工具包),HTML 5应用可以调用原生应用(Native App,也称为本地App)相关组件的功能。比如,直接在H5页面中唤起原生应用的分享、登录、获取精确地理信息等功能。
但是,由于各JSSDK的提供方并没有直接提供调用原生应用各应用接口的访问控制钩子函数,当H5页面业务想要统计应用接口的调用频率,监控应用接口的异常,控制应用接口的访问权限等不同操作时,就需要在每个调用的地方手动埋入访问控制相关逻辑,规范处理输入参数和输出参数。而访问控制逻辑与业务没有关联性,所以在各业务调用点手动埋入访问控制相关逻辑虽然实现简单,但重用困难,并且对业务的侵入较大。
发明内容
有鉴于此,本申请实施例提供了一种HTML5应用调用原生应用的方法和装置,解决或至少部分解决HTML5业务应用调用原生应用时,代码逻辑重用困难以及对业务的侵入较大,影响开发效率的问题。
根据本申请的第一个方面,提供了一种HTML5应用调用原生应用的方法,所述方法包括:
响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JS SDK对象的实例;
拦截所述HTML5应用调用预设的统一入口函数的调用指令,并依据所述调用指令调用所述适配器的第一函数,通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能;其中,所述第一函数是与所述调用指令中的函数名称相同的函数。
可选地,所述检测所述HTML5应用所处的原生应用包括:
获取浏览器信息;其中所述浏览器信息是启动所述HTML5应用的所述原生应用的内置浏览器的信息;
如果所述浏览器信息中存在预设的关键词,则将所述关键词指示的原生应用确定为所述HTML5应用所处的原生应用。
可选地,所述创建与所述原生应用匹配的适配器包括:
依据所述原生应用提供的所述JS SDK对象创建适配器,并调用所述适配器的认证函数,通过所述认证函数调用所述原生应用的认证服务,以对所述JS SDK对象进行安全性认证。
可选地,该方法还包括:
在依据所述调用指令调用所述适配器的第一函数之前,监控调用所述第一函数的调用请求,获得调用请求监控数据;
以及,在依据所述调用指令调用所述适配器的第一函数后,监控与所述第一函数对应的回调函数返回的调用结果,获得调用结果监控数据;
将所述调用请求监控数据以及所述调用结果监控数据上报至监控平台,以使所述监控平台对所述调用请求监控数据以及所述调用结果监控数据中的异常信息进行汇总分析。
可选地,该方法还包括:
判断所述JS SDK对象是否成功调用所述原生应用的功能;
如果未成功,则通过所述适配器触发调用预设的HTML5页面;
其中,所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
可选地,所述判断所述JS SDK对象是否成功调用所述原生应用的功能包括:
如果所述JS SDK对象中不存在与所述第一函数对应的第二函数,则确定所述JSSDK对象未成功调用所述原生应用的功能;
或,
如果所述JS SDK对象中存在所述第二函数且所述第二函数返回的调用结果为异常,则确定所述JS SDK对象未成功调用所述原生应用的功能。
可选地,所述通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JSSDK对象调用所述原生应用的功能还包括:
在将所述调用结果监控数据上报所述监控平台之前,统计所述调用结果的异常次数,
如果所述异常次数超过预设降级策略中的次数阈值,则在拦截到新的调用指令时,触发调用预设的HTML5页面;
其中,所述预设降级策略基于所述调用结果监控数据设置,所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
可选地,所述通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JSSDK对象调用所述原生应用的功能包括:
如果所述原生应用中存在所述JS SDK对象,则通过所述适配器的所述第一函数调用所述JS SDK对象;
如果所述原生应用中不存在所述JS SDK对象,则通过所述适配器控制加载所述JSSDK对象并关联所述JS SDK对象后,通过所述适配器的第一函数调用所述JS SDK对象。
根据本申请的另一个方面,提供了一种HTML5应用调用原生应用的装置,所述装置应用于HTML5应用,包括代理模块,
所述代理模块,响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
所述代理模块,创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JS SDK对象的实例;
所述代理模块,在拦截到所述HTML5应用调用所述代理模块预设的统一入口函数的调用指令时,调用所述适配器中的第一函数,以通过所述第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能。
根据本申请的又一个方面,提供了一种电子设备,所述电子设备包括:处理器,以及存储有可在处理器上运行的计算机程序的存储器;其中,所述处理器,用于在执行所述存储器中的计算机程序时执行如本申请一个方面所述的方法。
根据本申请的再一个方面,提供了一种非瞬时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如本申请一个方面所述方法的步骤。
有益效果:本申请实施例的HTML5应用调用原生应用的技术方案,响应于HTML5应用的启动指令,检测HTML5应用所处的原生应用,创建与原生应用匹配的适配器(适配器即原生应用的JS SDK对象实例),拦截HTML5应用调用预设的统一入口函数的调用指令,并依据调用指令调用适配器的第一函数,通过第一函数调用JS SDK对象进而通过JS SDK对象调用原生应用的功能。如此,通过入口收敛和切面拦截,对于业务方而言,只需要编写一套HTML5应用的业务代码,应对不同的原生应用,实现了代码的重用,业务方不需要关注HTML5应用在哪一个原生应用环境中运行,提高了开发效率,而且也不需要在业务中手动埋入访问控制逻辑,避免了对业务的侵入。
附图说明
图1是本申请一个实施例的HTML5应用调用原生应用的方法的流程图;
图2是本申请一个实施例的HTML5应用调用原生应用的方法的流程示意图;
图3是本申请一个实施例的HTML5应用调用原生应用的装置的框图;
图4是本申请一个实施例的电子设备的结构示意图;
图5是本申请一个实施例的非瞬时性计算机可读存储介质的结构示意图。
具体实施方式
为使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请实施例作进一步详细的说明。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请实施例保护的范围。
本申请的技术构思是:针对现有HTML5应用调用各个原生应用时需要在HTML5应用的切入点埋入相应的逻辑代码,导致重用困难和对HTML5应用的侵入较大的技术问题,提出一种HTML5应用调用原生应用的技术方案,该技术方案通过在HTML5应用中内嵌代理,由代理进行入口收敛并检测HTML5应用当前所处的运行环境(即,原生应用),并基于运行环境的不同创建与运行环境匹配的一个适配器,后续拦截HTML5应用调用原生应用的指令,并通过适配器的函数调用JS SDK对象,由于适配器是JS SDK对象的实例,所以调用适配器即可实现调用原生应用相应功能的技术效果。如此,对于业务方(即HTML5应用)而言,其无需关注具体的运行环境,对各个原生应用的调用参数(比如函数名)都是统一的,实现了代码的重用,并且不需要在各切入点埋入控制逻辑,避免了对业务的侵入,满足了实际需求。
为便于理解,这里对HTML5应用、原生应用以及JS SDK的关系进行说明。HTML5是新发布的一种技术,HTML5应用(或称H5页面)是一种Web应用,包含HTML5的标记规范,开发者可以在没有任何设备限制的环境中开发web应用。原生应用是基于操作系统开发,能直接运行于当前操作系统的应用程序。JS-SDK(JavaScript Software Development Kit)是适合JavaScript语言的软件开发工具包。
以微信的实现分享功能的H5页面为例,微信集成有浏览器,使得用户可以通过微信的浏览器来加载和打开H5分享页面,这里,微信就是原生应用,H5分享页面就是HTML5应用。而H5分享页面通过微信提供的JSSDK来调用微信的原生的分享功能,从而实现分享这一操作。
可知,H5分享页面的运行环境与JSSDK是一对一的关系,而H5分享页面与运行环境是一对多的关系。也就是说,同一个H5分享页面可以运行于微信原生应用中,可以运行于美团原生应用中,还可以运行于微博原生应用中等等。当H5分享页面运行于微信这一原生应用时,需要通过微信的JSSDK最终实现分享功能。那么业务方在开发H5页面时需要针对不同原生应用的JSSDK编写相应的代码,比如,对应微信中的分享功能,编写分享代码1,对应美团的分享功能,编写分享代码2,代码的重用困难,并且对业务的侵入比较大。
本申请提出在H5中内置原生应用的代理,利用切面拦截技术,由代理自动帮助业务选择匹配的运行环境,并处理环境相关的逻辑,对于业务方而言,不需要关注运行环境,可以使用统一的一套代码。如:外卖点餐的支付功能:H5页面调用proxy.pay(),在美团原生应用中调用美团的支付模块,在微信原生应用中调用微信的支付模块,在微博原生应用中调用微博的支付模块(如果微博也可以支付)。对H5页面而言,只是简单调用了一个函数pay,就能在不同运行环境下调用不同的支付模块完成支付。
图1是本申请一个实施例的HTML5应用调用原生应用的方法的流程图,参见图1,本实施例的HTML5应用调用原生应用的方法包括:
步骤S101,响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
步骤S102,创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JS SDK对象的实例;
步骤S103,拦截所述HTML5应用调用预设的统一入口函数的调用指令,并依据所述调用指令调用所述适配器的第一函数,通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能;其中,所述第一函数是与所述调用指令中的函数名称相同的函数。
由图1所示可知,本实施例的HTML5应用调用原生应用的方法,响应于HTML5应用的启动指令检测HTML5应用所处的原生应用,创建与原生应用匹配的适配器,当拦截HTML5应用调用预设的统一入口函数的调用指令时,调用适配器的第一函数,通过第一函数调用JSSDK对象进而通过JS SDK对象调用原生应用的功能。如此,通过入口收敛和切面拦截,对于业务方而言,只需要编写一套HTML5应用的业务代码,在调用不同原生应用的某个函数时参数都是统一的,实现了代码的重用,业务方不需要关注在哪一个原生应用环境中运行,提高了开发效率,而且也不需要在业务中手动埋入访问控制逻辑,避免了对业务的侵入。
如前述,H5页面与运行环境是一对多的关系,运行环境与JSSDK是一对一的关系,每个H5页面在运行环境下,需要去适配对应环境的JSSDK,才能调用对应运行环境的原生功能。本实施例引入了代理做入口收敛,使得业务方在调用某个函数的时候输入参数和输出参数都是统一的,函数的名称也是统一的,不需要去关心在哪一个运行环境中。比如:分享方法,对业务方使用统一的一套逻辑就可以处理完成,更多的与运行环境相关的逻辑都由代理统一处理。
图2是本申请一个实施例的HTML5应用调用原生应用的方法的流程示意图;参见图2,HTML5应用调用原生应用的流程如下:
HTML5应用,调用预设的统一入口函数。
代理,集成有拦截方法,用于拦截HTML5应用调用预设的统一入口函数的调用指令,并依据调用指令调用适配器的第一函数(即图2中所示的JSSDK代理方法),通过适配器的第一函数调用原生应用提供的JS SDK对象,并通过JS SDK对象调用原生应用的功能。
原生应用,根据JS SDK对象的调用,执行相应的功能并反馈调用结果。
需要说明的是,图2示意了三个原生应用,分别是美团、微信、微博,各原生应用都提供有对应的JS SDK。对于一个特定的应用场景而言,运行H5页面的原生应用只有一个。另外,JS SDK对象调用原生应用的功能是现有技术,不是本实施例的重点,有关JS SDK对象调用原生应用的功能可以参见现有技术的说明,这里不再赘述。
本实施例的HTML5应用内嵌代理,代理响应于HTML5应用的启动指令,检测HTML5应用所处的原生应用;即,代理封装有相同的函数用于检测HTML5应用可适用的运行环境的逻辑。当H5页面在一个原生应用中启动时,代理获取当前运行的原生应用的标识,比如,原生应用是美团、是微信还是微博等。以原生应用是美团为例,代理在检测出H5页面在美团中启动之后,根据原生应用(比如美团)提供的JS SDK对象,创建与美团应用匹配的对象实例,即适配器。
后续,代理拦截HTML5应用调用预设的统一入口函数(这里是代理提供的一个入口函数)的调用指令,并依据调用指令调用适配器的第一函数,通过适配器的第一函数调用JSSDK对象,并通过JS SDK对象调用原生应用的功能;第一函数是与调用指令中的函数名称相同的函数。
需要说明的是,本实施例的适配器采用组合模式这种设计模式实现,适配器是上层的一个抽象类,其中组合有具体运行环境的JSSDK的一个对象实例。如,美团适配器组合包含了美团的JS SDK,而不是直接指向JS SDK。
由上可知,本实施例将代理前置,调用适配器的函数都是先通过代理处理通用逻辑以后,再调用到适配器的函数,代理做入口收敛,使得业务方在调用某个函数的时候输入参数和输出参数都是统一的,函数的名称也是统一的,不需要去关心在哪一个运行环境中。
举例而言,不做入口收敛的调用方式:
基于本实施例,做了入口收敛后的调用方式:
代理(proxy)对象->share({
Content:“分享的内容”
})
由此可知,对业务方使用统一的一套逻辑就可以处理完成,更多的与运行环境相关的逻辑由代理统一处理。
一个实施例中,检测所述HTML5应用所处的原生应用包括:获取浏览器信息;其中所述浏览器信息是启动所述HTML5应用的所述原生应用的内置浏览器的信息;如果所述浏览器信息中存在预设的关键词,则将所述关键词指示的原生应用确定为所述HTML5应用所处的原生应用。
比如,本实施例中使用运行环境的navigator.userAgent,判断与对应运行环境相同的特征关键字。如:微信是否存在micromessenger关键字,美团是否存在meituan关键字。通过关键字就能识别出对应的运行环境,相应的就能创建或获取对应环境的适配器。
一个实施例中,创建与所述原生应用匹配的适配器包括:依据所述原生应用提供的JS SDK对象创建适配器,并调用所述适配器的认证函数,通过所述认证函数调用所述原生应用的认证服务,以对所述JS SDK对象进行安全性认证。
由于一些原生应用对通过JS SDK对象来调用原生应用的功能设定了认证条件,因此,本实施例中,在依据原生应用提供的JS SDK对象创建适配器的过程中调用适配器的认证函数,通过认证函数调用原生应用的认证服务,以对JS SDK对象进行安全性认证。具体认证由各JS SDK的适配器进行,调用链路是:代理proxy调用适配器的认证函数→适配器认证函数调用运行环境的认证服务(如:微信JS SDK认证的后台服务),这样,拓宽了本申请实施例的H5页面的应用范围。
为了满足对函数调用情况的监控需求,本实施例的HTML5应用调用原生应用的方法还包括:在依据所述调用指令调用所述适配器的第一函数之前,监控调用所述第一函数的调用请求,获得调用请求监控数据;以及,在依据所述调用指令调用所述适配器的第一函数后,监控与所述第一函数对应的回调函数返回的调用结果,获得调用结果监控数据;将所述调用请求监控数据以及所述调用结果监控数据上报至监控平台,以使所述监控平台对所述调用请求监控数据以及所述调用结果监控数据中的异常信息进行汇总分析。
通过代理将监控获得的调用请求数据和调用结果数据上报到监控平台,监控平台对监控数据中的异常情况进行汇总分析,为后续调整函数调用,修改H5页面提供了参考。
实际应用中,H5页面不是每次都能成功调用原生应用的功能,不成功的原因大致有两种,一种是原生应用本身不支持相应的功能,另一种是原生应用支持相应的功能但调用当时存在故障,基于此,本实施例提供了兜底H5页面,以应对JS SDK对象不能成功调用原生应用功能的状况。
具体的,该方法还包括:判断所述JS SDK对象是否成功调用所述原生应用的功能;如果未成功,则通过所述适配器触发调用预设的HTML5页面;其中,所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
比如,原生应用的一个功能是支付功能,当H5调用原生应用的支付功能时如果不成功,本实施例的适配器触发调用预设的HTML5页面;预设的HTML5页面实现的也是支付功能,与原生应用的支付功能相同,从而在H5调用原生应用的支付功能不成功时,提供了备用和兜底页面,提高调用的成功率,优化了用户体验。
一个实施例中,判断所述JS SDK对象是否成功调用所述原生应用的功能包括:如果所述JS SDK对象中不存在与所述第一函数对应的第二函数,则确定所述JS SDK对象未成功调用所述原生应用的功能;或,如果所述JS SDK对象中存在所述第二函数且所述第二函数返回的调用结果为异常,则确定所述JS SDK对象未成功调用所述原生应用的功能。
也就是说,本实施例中适配器判断JS SDK对象中是否存在与第一函数如pay()对应的第二函数pay’(),如果JS SDK对象中不存在与第一函数对应的第二函数,那么说明原生应用不支持该函数功能。或者,在适配器判断JS SDK对象中存在第二函数,但是第二函数返回的调用结果为异常时,那么也可以确定JS SDK对象未成功调用原生应用的功能。
本实施例中提供了策略降级机制以提高H5页面调用原生应用的成功率,满足实际需求。也就是说,通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能还包括:在将所述调用结果监控数据上报所述监控平台之前,统计所述调用结果的异常次数,如果所述异常次数超过预设降级策略中的次数阈值,则在拦截到新的调用指令时,触发调用预设的HTML5页面;所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
比如,根据需求设定降级策略中的次数阈值为8次,在每次收到调用结果监控数据后对异常次数进行累计,如果异常次数超过预设降级策略中的次数阈值,比如,累计的异常次数为10,大于8次,那么在拦截到新的调用指令时,触发调用预设的HTML5页面,而不再继续调用JS SDK对象。这是因为,根据历史数据可知调用JS SDK对象实现调用原生应用功能的失败次数过多,可能原生应用当前存在故障,所以如果继续调用JS SDK对象很大概率仍会失败,本实施例进行降级,在拦截到新的调用指令时,直接触发调用预设的HTML5页面,提高了调用成功率。
实际应用中,为了节省功耗,原生应用的JS SDK对象不是处于随时可用的状态,因此通过所述适配器的第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能包括:如果所述原生应用中存在所述JS SDK对象,则通过所述适配器的所述第一函数调用所述JS SDK对象;如果所述原生应用中不存在所述JS SDK对象,则通过所述适配器控制加载所述JS SDK对象并关联所述JS SDK对象后,通过所述适配器的第一函数调用所述JS SDK对象。也就是说,根据原生应用中是否存在JS SDK对象的不同情况进行相应的处理,保证调用流程的顺畅。
综上可知,本申请实施例的HTML5应用调用原生应用的方法,响应于HTML5应用的启动指令,检测HTML5应用所处的原生应用,创建与原生应用匹配的适配器(适配器即原生应用的JS SDK对象实例),拦截HTML5应用调用预设的统一入口函数的调用指令,并依据调用指令调用适配器的第一函数,通过第一函数调用JS SDK对象进而通过JS SDK对象调用原生应用的功能,如此,通过入口收敛和切面拦截,对于业务方而言,只需要编写一套HTML5应用的业务代码,应对不同的原生应用,实现了代码的重用,业务方不需要关注HTML5应用在哪一个原生应用环境中运行,提高了开发效率,而且也不需要在业务中手动埋入访问控制逻辑,避免了对业务的侵入。
与前述HTML5应用调用原生应用的方法同属于一个技术构思,本申请实施例还提供了一种HTML5应用调用原生应用的装置。图3是本申请一个实施例的HTML5应用调用原生应用的装置的框图,参见图3,本实施例的HTML5应用调用原生应用的装置300应用于HTML5应用,包括代理模块301,
所述代理模块301,响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
所述代理模块301,创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JS SDK对象的实例;
所述代理模块301,在拦截到所述HTML5应用调用所述代理模块预设的统一入口函数的调用指令时,调用所述适配器中的第一函数,以通过所述第一函数调用所述JS SDK对象,并通过所述JS SDK对象调用所述原生应用的功能。
在本申请的一个实施例中,所述代理模块301,获取浏览器信息;其中所述浏览器信息是启动所述HTML5应用的所述原生应用的内置浏览器的信息;
如果所述浏览器信息中存在预设的关键词,则将所述关键词指示的原生应用确定为所述HTML5应用所处的原生应用。
在本申请的一个实施例中,所述代理模块301,依据所述原生应用提供的JS SDK对象创建适配器,并调用所述适配器的认证函数,通过所述认证函数调用所述原生应用的认证服务,以对所述JS SDK对象进行安全性认证。
在本申请的一个实施例中,所述代理模块301,还用于:在依据所述调用指令调用所述适配器的第一函数之前,监控调用所述第一函数的调用请求,获得调用请求监控数据;以及,在依据所述调用指令调用所述适配器的第一函数后,监控与所述第一函数对应的回调函数返回的调用结果,获得调用结果监控数据;将所述调用请求监控数据以及所述调用结果监控数据上报至监控平台,以使所述监控平台对所述调用请求监控数据以及所述调用结果监控数据中的异常信息进行汇总分析。
在本申请的一个实施例中,所述代理模块301,还用于判断所述JS SDK对象是否成功调用所述原生应用的功能;如果未成功,则通过所述适配器触发调用预设的HTML5页面;其中,所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
在本申请的一个实施例中,所述代理模块301,具体用于如果所述JS SDK对象中不存在与所述第一函数对应的第二函数,则确定所述JS SDK对象未成功调用所述原生应用的功能;或,如果所述JS SDK对象中存在所述第二函数且所述第二函数返回的调用结果为异常,则确定所述JS SDK对象未成功调用所述原生应用的功能。
在本申请的一个实施例中,所述代理模块301,在将所述调用结果监控数据上报所述监控平台之前,统计所述调用结果的异常次数,如果所述异常次数超过预设降级策略中的次数阈值,则在拦截到新的调用指令时,触发调用预设的HTML5页面;所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
在本申请的一个实施例中,所述代理模块301,具体用于如果所述原生应用中存在所述JS SDK对象,则通过所述适配器的所述第一函数调用所述JS SDK对象;如果所述原生应用中不存在所述JS SDK对象,则通过所述适配器控制加载所述JS SDK对象并关联所述JSSDK对象后,通过所述适配器的第一函数调用所述JS SDK对象。
关于图3所示装置中的代理模块所执行的各个功能的举例解释说明,与前述方法实施例中的举例解释说明一致,这里不再一一赘述。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请实施例的内容,并且上面对特定语言所做的描述是为了披露本申请实施例的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本申请并帮助理解各个申请方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,申请方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本申请实施例的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本申请实施例的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本申请实施例的页面性能测试装置中的一些或者全部部件的一些或者全部功能。本申请还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本申请实施例的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图4是本申请一个实施例的电子设备的结构示意图。该电子设备400包括:处理器401,以及存储有可在所述处理器401上运行的计算机程序的存储器402。处理器401,用于在执行所述存储器402中的计算机程序时执行本申请实施例中方法的各步骤。存储器402可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器402具有存储用于执行上述方法中的任何方法步骤的计算机程序404的存储空间403。计算机程序404可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图5所示的非瞬时性计算机可读存储介质。
图5是本申请一个实施例的非瞬时性计算机可读存储介质的结构示意图。该计算机可读存储介质500存储有用于执行根据本申请实施例的方法步骤的计算机程序404,可以被电子设备400的处理器401读取,当计算机程序404由电子设备400运行时,导致该电子设备400执行上面所描述的方法中的各个步骤,具体来说,该计算机可读存储介质存储的计算程序404可以执行上述任一实施例中示出的方法。计算机程序404可以以适当形式进行压缩。
应该注意的是上述实施例对本申请实施例进行说明而不是对本申请实施例进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本申请实施例可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词、第二、以及第三等的使用不表示任何顺序,可将这些单词解释为名称。
Claims (11)
1.一种HTML5应用调用原生应用的方法,其特征在于,所述方法包括:
响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JSSDK对象的实例;
拦截所述HTML5应用调用预设的统一入口函数的调用指令,并依据所述调用指令调用所述适配器的第一函数,通过所述适配器的第一函数调用所述JSSDK对象,并通过所述JSSDK对象调用所述原生应用的功能;其中,所述第一函数是与所述调用指令中的函数名称相同的函数。
2.如权利要求1所述的方法,其特征在于,所述检测所述HTML5应用所处的原生应用包括:
获取浏览器信息;其中所述浏览器信息是启动所述HTML5应用的所述原生应用的内置浏览器的信息;
如果所述浏览器信息中存在预设的关键词,则将所述关键词指示的原生应用确定为所述HTML5应用所处的原生应用。
3.如权利要求1所述的方法,其特征在于,所述创建与所述原生应用匹配的适配器包括:
依据所述原生应用提供的JSSDK对象创建适配器,并调用所述适配器的认证函数,通过所述认证函数调用所述原生应用的认证服务,以对所述JS SDK对象进行安全性认证。
4.如权利要求1-3中任一项所述的方法,其特征在于,该方法还包括:
在依据所述调用指令调用所述适配器的第一函数之前,监控调用所述第一函数的调用请求,获得调用请求监控数据;
以及,在依据所述调用指令调用所述适配器的第一函数后,监控与所述第一函数对应的回调函数返回的调用结果,获得调用结果监控数据;
将所述调用请求监控数据以及所述调用结果监控数据上报至监控平台,以使所述监控平台对所述调用请求监控数据以及所述调用结果监控数据中的异常信息进行汇总分析。
5.如权利要求1所述的方法,其特征在于,该方法还包括:
判断所述JSSDK对象是否成功调用所述原生应用的功能;
如果未成功,则通过所述适配器触发调用预设的HTML5页面;
其中,所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
6.如权利要求5所述的方法,其特征在于,所述判断所述JSSDK对象是否成功调用所述原生应用的功能包括:
如果所述JSSDK对象中不存在与所述第一函数对应的第二函数,则确定所述JSSDK对象未成功调用所述原生应用的功能;
或,
如果所述JSSDK对象中存在所述第二函数且所述第二函数返回的调用结果为异常,则确定所述JSSDK对象未成功调用所述原生应用的功能。
7.如权利要求4所述的方法,其特征在于,所述通过所述适配器的第一函数调用所述JSSDK对象,并通过所述JSSDK对象调用所述原生应用的功能还包括:
在将所述调用结果监控数据上报所述监控平台之前,统计所述调用结果的异常次数,
如果所述异常次数超过预设降级策略中的次数阈值,则在拦截到新的调用指令时,触发调用预设的HTML5页面;所述预设的HTML5页面实现的功能与所述原生应用的功能相同。
8.如权利要求1所述的方法,其特征在于,所述通过所述适配器的第一函数调用所述JSSDK对象,并通过所述JSSDK对象调用所述原生应用的功能包括:
如果所述原生应用中存在所述JSSDK对象,则通过所述适配器的所述第一函数调用所述JSSDK对象;
如果所述原生应用中不存在所述JSSDK对象,则通过所述适配器控制加载所述JSSDK对象并关联所述JSSDK对象后,通过所述适配器的第一函数调用所述JSSDK对象。
9.一种HTML5应用调用原生应用的装置,其特征在于,所述装置应用于HTML5应用,包括代理模块;
所述代理模块,响应于所述HTML5应用的启动指令,检测所述HTML5应用所处的原生应用;
所述代理模块,创建与所述原生应用匹配的适配器;所述适配器是所述原生应用提供的JSSDK对象的实例;
所述代理模块,在拦截到所述HTML5应用调用所述代理模块预设的统一入口函数的调用指令时,调用所述适配器中的第一函数,以通过所述第一函数调用所述JSSDK对象,并通过所述JSSDK对象调用所述原生应用的功能。
10.一种电子设备,其特征在于,所述电子设备包括:处理器,以及存储有可在处理器上运行的计算机程序的存储器;
其中,所述处理器,用于在执行所述存储器中的计算机程序时执行权利要求1-8中任一项所述的方法。
11.一种非瞬时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1-8中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910808765.0A CN110704131B (zh) | 2019-08-29 | 2019-08-29 | 一种html5应用调用原生应用的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910808765.0A CN110704131B (zh) | 2019-08-29 | 2019-08-29 | 一种html5应用调用原生应用的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110704131A CN110704131A (zh) | 2020-01-17 |
CN110704131B true CN110704131B (zh) | 2020-11-20 |
Family
ID=69194204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910808765.0A Active CN110704131B (zh) | 2019-08-29 | 2019-08-29 | 一种html5应用调用原生应用的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110704131B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258683A (zh) * | 2020-01-19 | 2020-06-09 | 北京三快在线科技有限公司 | 检测方法、装置、计算机设备及存储介质 |
CN113448654B (zh) * | 2020-12-07 | 2024-03-01 | 北京新氧科技有限公司 | web应用程序与原生应用程序的交互方法及装置 |
CN112559026B (zh) * | 2020-12-23 | 2024-05-14 | 南方电网数字平台科技(广东)有限公司 | 基于api接口的原生能力拓展方法、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106102A (zh) * | 2013-01-14 | 2013-05-15 | 百度在线网络技术(北京)有限公司 | 一种web应用程序的运行方法及移动终端 |
CN105389222A (zh) * | 2015-12-15 | 2016-03-09 | 中国科学院声学研究所 | 一种动态调用原生接口的方法、装置和系统 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN106454525A (zh) * | 2016-10-26 | 2017-02-22 | 北京奇虎科技有限公司 | 直播方法、装置及终端 |
CN106445583A (zh) * | 2016-08-31 | 2017-02-22 | 广州品唯软件有限公司 | 一种页面显示方法、设备及系统 |
CN106951233A (zh) * | 2017-03-02 | 2017-07-14 | 广州天高软件科技有限公司 | 混合模式智能手机应用开发框架 |
-
2019
- 2019-08-29 CN CN201910808765.0A patent/CN110704131B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106102A (zh) * | 2013-01-14 | 2013-05-15 | 百度在线网络技术(北京)有限公司 | 一种web应用程序的运行方法及移动终端 |
CN105389222A (zh) * | 2015-12-15 | 2016-03-09 | 中国科学院声学研究所 | 一种动态调用原生接口的方法、装置和系统 |
CN105718313A (zh) * | 2016-01-22 | 2016-06-29 | 北京京东尚科信息技术有限公司 | 应用操作方法和装置 |
CN106445583A (zh) * | 2016-08-31 | 2017-02-22 | 广州品唯软件有限公司 | 一种页面显示方法、设备及系统 |
CN106454525A (zh) * | 2016-10-26 | 2017-02-22 | 北京奇虎科技有限公司 | 直播方法、装置及终端 |
CN106951233A (zh) * | 2017-03-02 | 2017-07-14 | 广州天高软件科技有限公司 | 混合模式智能手机应用开发框架 |
Also Published As
Publication number | Publication date |
---|---|
CN110704131A (zh) | 2020-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110704131B (zh) | 一种html5应用调用原生应用的方法和装置 | |
CN108182131B (zh) | 监控应用运行状态的方法、装置、存储介质及电子设备 | |
US10176327B2 (en) | Method and device for preventing application in an operating system from being uninstalled | |
CN105159771A (zh) | 处理应用间链式启动的方法及装置 | |
CN106598662B (zh) | 基于android的应用加载方法及装置 | |
CN110457132B (zh) | 一种功能对象的创建方法、装置和终端设备 | |
CN115543827A (zh) | 一种埋点数据展示方法及装置 | |
CN110928630A (zh) | 应用程序窗口的激活控制方法、装置、设备及存储介质 | |
CN108509228B (zh) | 加载页面的方法、终端设备及计算机可读存储介质 | |
CN112835639B (zh) | 一种Hook实现方法、装置、设备、介质及产品 | |
CN117807601A (zh) | 应用程序的漏洞检测方法、装置、介质及设备 | |
CN116561013B (zh) | 基于目标服务框架的测试方法、装置、电子设备和介质 | |
CN113176907A (zh) | 接口数据调用方法、装置、计算机系统及可读存储介质 | |
CN110399131B (zh) | 提高应用程序稳定性的方法、装置、计算机设备 | |
CN111124627A (zh) | 应用程序的调起者确定方法、装置、终端及存储介质 | |
CN116956272A (zh) | 权限调用监控方法、装置及电子设备 | |
US10783020B2 (en) | Method for invoking component, and terminal | |
CN111324386B (zh) | 分身应用程序的启动方法、装置、电子设备及存储介质 | |
CN113515299A (zh) | 软件开发工具包sdk热升级方法、装置、设备及存储介质 | |
KR101946569B1 (ko) | 모바일 운영체계 시스템의 발신 호 스푸핑 방지 방법, 이를 위한 장치, 컴퓨터 판독 가능 기록 매체 및 컴퓨터 프로그램 | |
CN112600803A (zh) | Web端数据签名方法、装置及计算机设备 | |
US20140201839A1 (en) | Identification and alerting of network devices requiring special handling maintenance procedures | |
KR20160024719A (ko) | 운영체제 기반 스미싱 방어 방법 및 장치 | |
CN112068814A (zh) | 可执行文件的生成方法、装置、系统及介质 | |
CN112771499A (zh) | 一种消息加载方法、消息加载装置及移动终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |