跨平台的API共享方法、装置、系统及存储介质与流程

文档序号:25419526发布日期:2021-06-11 21:30阅读:73来源:国知局
跨平台的API共享方法、装置、系统及存储介质与流程

本申请涉及计算机技术领域,尤其涉及一种跨平台的api共享方法、装置、系统及存储介质。



背景技术:

跨平台开发解决方案越来越多,例如reactnative/weex、flutter等等。而这种框架对android/ios平台的基础api是有依赖,因此,在这些平台上开发的应用时,经常需要开发很多原生相关的api来完成某些特定的功能。

现有的flutter和reactnative对原生api的调用方式和封装是两套不同的逻辑。reactnative是通过标记reactmethod来注册所有的api到js端的。而flutter是通过methodchannel直接告诉原生端需要调用的接口的名字,然后原生端根据需要名字决定调用逻辑。由于flutter和reactnative的调用方式和封装逻辑不同,因此需要分别开发api,开发成本高。



技术实现要素:

本申请提供一种跨平台的api共享方法、装置、系统及存储介质,可以实现不同应用开发平台的api兼容,保证接口调用的一致性,降低开发成本。

第一方面,本申请实施例提供一种跨平台的api共享方法,包括:

根据应用开发平台的类型,确定应用程序编程接口api的调用方式;

根据所述调用方式,运行与目标api对应的监听器;其中,所述监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。

在一种可能的设计中,根据应用开发平台的类型,确定应用程序编程接口api的调用方式,包括:

若应用开发平台为reactnative,则采用react标记方法调用所述目标api;

若应用开发平台为flutter,则通过flutter统一调用接口调用所述目标api,其中,所述flutter统一调用接口用于建立目标api和对应监听器之间的映射关系。

在一种可能的设计中,所述采用react标记方法调用所述目标api,包括:

在react接口管理对象中注册模块方法,所述模块方法用于将api声明为react标记方法,并注册与所述react标记方法对应的监听器;

通过js通讯桥建立所述模块方法与js之间的互相调用;

通过所述模块方法中的react标记方法调用所述目标api对应的监听器。

在一种可能的设计中,所述通过flutter统一调用接口调用所述目标api,包括:

在flutter框架中定义所述flutter统一调用接口;

通过flutter统一调用接口调用所述目标api对应的监听器。

在一种可能的设计中,在所述通过flutter统一调用接口调用所述目标api对应的监听器之前,还包括:

将所述映射接口通过flutter方法关键字的方式保存到缓存的表中;

以flutter方法关键字注册flutter接口回调注册中心;

当调用关键字到对象的方法时,根据关键字的值从缓存中找到对应的flutter统一调用接口,并将数据转成表和方法之后传递给所述flutter统一调用接口。

在一种可能的设计中,还包括:

通过flutter统一调用接口将所述监听器的运行结果反馈给flutter结果回调接口,以使得所述flutter结果回调接口将所述运行结果回传给调用端。

第二方面,本申请实施例提供一种跨平台的api共享装置,包括:

确定模块,用于根据应用开发平台的类型,确定应用程序编程接口api的调用方式;

调用模块,用于根据所述调用方式,运行与目标api对应的监听器;其中,所述监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。

在一种可能的设计中,所述确定模块,具体用于:

若应用开发平台为reactnative,则采用react标记方法调用所述目标api;

若应用开发平台为flutter,则通过flutter统一调用接口调用所述目标api,其中,所述flutter统一调用接口用于建立目标api和对应监听器之间的映射关系。

在一种可能的设计中,所述采用react标记方法调用所述目标api,包括:

在react接口管理对象中注册模块方法,所述模块方法用于将api声明为react标记方法,并注册与所述react标记方法对应的监听器;

通过js通讯桥建立所述模块方法与js之间的互相调用;

通过所述模块方法中的react标记方法调用所述目标api对应的监听器。

在一种可能的设计中,所述通过flutter统一调用接口调用所述目标api,包括:

在flutter框架中定义所述flutter统一调用接口;

通过flutter统一调用接口调用所述目标api对应的监听器。

在一种可能的设计中,还包括:

缓存模块,用于在所述通过flutter统一调用接口调用所述目标api对应的监听器之前,将所述映射接口通过flutter方法关键字的方式保存到缓存的表中;

注册模块,用于以flutter方法关键字注册flutter接口回调注册中心;

传输模块,用于当调用关键字到对象的方法时,根据关键字的值从缓存中找到对应的flutter统一调用接口,并将数据转成表和方法之后传递给所述flutter统一调用接口。

在一种可能的设计中,还包括:

反馈模块,用于通过flutter统一调用接口将所述监听器的运行结果反馈给flutter结果回调接口,以使得所述flutter结果回调接口将所述运行结果回传给调用端。

第三方面,本申请实施例提供一种跨平台的api共享系统,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的跨平台的api共享方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述的跨平台的api共享方法。

第五方面,本申请实施例提供一种程序产品,所述程序产品包括:计算机程序,所述计算机程序存储在可读存储介质中,服务器的至少一个处理器可以从所述可读存储介质读取所述计算机程序,所述至少一个处理器执行所述计算机程序使得服务器执行第一方面中任一所述的跨平台的api共享方法。

本申请提供一种跨平台的api共享方法、装置、系统及存储介质,通过根据应用开发平台的类型,确定应用程序编程接口api的调用方式;根据所述调用方式,运行与目标api对应的监听器;其中,所述监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。从而可以实现不同应用开发平台的api兼容,保证接口调用的一致性,降低开发成本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请一应用场景的原理示意图;

图2为本申请实施例一提供的跨平台的api共享方法的流程图;

图3为本申请实施例二提供的跨平台的api共享装置的结构示意图;

图4为本申请实施例三提供的跨平台的api共享系统的结构示意图。

通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解:

1)flutter是google开发的一套全新的跨平台、开源ui框架,支持ios、android系统开发,并且是未来新操作系统fuchsia的默认开发套件。flutter的目标是使同一套代码同时运行在android和ios系统上,并且拥有媲美原生应用的性能,flutter甚至提供了两套控件来适配android和ios(滚动效果、字体和控件图标等等),为了让app在细节处看起来更像原生应用。

2)reactnative(简称rn)是facebook于2015年4月开源的跨平台移动应用开发框架,是facebook早先开源的js框架react在原生移动应用平台的衍生产物,目前支持ios和安卓两大平台。rn使用javascript语言,类似于html的jsx,以及css来开发移动应用,因此熟悉web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

跨平台开发解决方案越来越多,例如reactnative/weex、flutter等等。而这种框架对android/ios平台的基础api是有依赖,因此,在这些平台上开发的应用时,经常需要开发很多原生相关的api来完成某些特定的功能。

现有的flutter和reactnative对原生api的调用方式和封装是两套不同的逻辑。reactnative是通过标记reactmethod来注册所有的api到js端的。而flutter是通过methodchannel直接告诉原生端需要调用的接口的名字,然后原生端根据需要名字决定调用逻辑。由于flutter和reactnative的调用方式和封装逻辑不同,因此需要分别开发api,开发成本高。

针对上述问题,本申请提供一种跨平台的api共享方法、装置、系统及存储介质,可以实现不同应用开发平台的api兼容,保证接口调用的一致性,降低开发成本。图1为本申请一应用场景的原理示意图,如图1所示,本方案定义了一套新的接口,来将flutter和reactnative接口分离并抽象成几个层次,实现接口的统一。从下到上分别是coreapi层、jdreactframework层、sdk层、业务api层。

coreapi层(核心api)中完成该api的具体功能,让开发者只用关心api的作用,而不必担心跨框架导致的接口不一致重新开发的问题。开发者编写原生api时,需要抽象化这些api成接口(interface)并实现成监听器(listener),这是一套完全不依赖flutter和reactnative的api实现这个抽象接口,后面提供给两端使用。

在coreapi上面,可以定义一个jdreactframework层,也就是用于抹平两边接口不一致的抽象层。对于应用开发平台为reactnative,需要新增模块方法(moudleapi),将所有的api声明成react标记方法,并注册coreapi中提到的接口操作的功能集合(interface),让所有的react标记方法都统一的调用接口操作的功能集合对应的方法。因为模块方法生效是必须注册在react接口管理对象中进行注册,所以需要在注册时将该模块方法对应的监听器(listener)一同注册,这样里面对应api调用后,会直接调用到监听器中具体的实现。若应用开发平台为flutter,可以在jdreactframework层定义抽象一个新的统一调用接口(jdfluttercall)。定义并实现flutter的方法调用处理程序(methodcallhandler)成标准的接口(jdfluttermethodcallhandler,又称为flutter接口回调注册中心)。这一设置主要是为了统一所有的flutter接口,让开发者不在关注flutter的接口实现。

可选地,在jdreactframework层上面,可以是一个sdk层,作为业务api层与定义的jdreactframework层之间的桥梁。对于应用开发平台为reactnative,可以通过js通讯桥建立模块方法与js之间的互相调用,然后通过模块方法中的react标记方法调用目标api对应的监听器。若应用开发平台为flutter,采用methodchannel实现业务api层与jdreactframework层之间的交互。在业务调用时,维护所有实现的flutter统一调用接口的缓存。例如,可以存在表(map)中,然后根据flutter方法关键字(methodchannelkey)来保存。在表里面注入flutter方法的关键字。具体实施时,在flutter中会注册该接口到flutterview中,收到调用后,根据对应的关键字在缓存中找到对应的flutter统一调用接口,并将其中的方法,及参数传递到flutter统一调用接口中。

可选地,设置最上一层为业务api层,和原有的架构实现保持一致。然后可以根据应用开发平台的类型,确定应用程序编程接口api的调用方式。最后,根据调用方式,运行与目标api对应的监听器,从而实现了跨平台的api共享。

下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。

图2为本申请实施例一提供的跨平台的api共享方法的流程图,如图2所示,本实施例中的方法可以包括:

s101、根据应用开发平台的类型,确定应用程序编程接口api的调用方式。

本实施例中,当业务需要调用api时,首先根据应用开发平台的类型,确定应用程序编程接口api的调用方式。若应用开发平台为reactnative,则采用react标记方法调用目标api;若应用开发平台为flutter,则通过flutter统一调用接口调用目标api,其中,flutter统一调用接口用于建立目标api和对应监听器之间的映射关系。

具体地,本方案定义了一套新的接口,用于将flutter和reactnative接口分离并抽象成几个层次,实现接口的统一。从下到上分别是coreapi层、jdreactframework层、sdk层、业务api层。最终在coreapi中完成该api的功能,让开发者只用关心api的作用,而不必担心跨框架导致的接口不一致重新开发的问题。开发者编写原生api时,需要抽象化这些api成接口(interface)并实现成监听器(listener)。coreapi是实现的具体功能,这里可以先定义一个抽象的interface包含一组要实现的功能api,并在监听器中实现这一组单独的api功能。

因为reactnative的所有api都是通过实现java类reactcontextbasejavamodule实现的,所有对js暴露的api都用@reactmethod来标记,因此为了保持两边api的一致性,需要在module中注册之前声明的监听器,并在所有标记的方法里面回调这个监听器。因此,当业务需要调用api时,若应用开发平台为reactnative,则采用@reactmethod标记方法调用目标api。

而flutter的接口则是通过实现methodcallhandler里的onmethodcall来实现的,onmethodcall会告诉原生端调用api名字,由原生端来映射。所以flutter端可以抽象一个新的统一调用接口,用于不依赖任何flutter,实现所有api的映射,并在监听器中实现该接口。因此,当业务需要调用api时,若应用开发平台为flutter,则通过新的统一调用接口调用目标api。

可选地,采用react标记方法调用目标api,包括:在react接口管理对象中注册模块方法,模块方法用于将api声明为react标记方法,并注册与react标记方法对应的监听器;通过js通讯桥建立模块方法与js之间的互相调用;通过模块方法中的react标记方法调用目标api对应的监听器。

具体地,在coreapi上面,可以定义一个jdreactframework层,也就是用于抹平两边接口不一致的抽象层。对于应用开发平台为reactnative,需要新增模块(moudle),将所有的api声明成react标记方法,并注册coreapi中提到的interface,让所有的react标记方法都统一的调用interface接口对应的方法。因为新增模块生效是必须注册到react接口管理对象中,所以需要在注册时将该模块对应的监听器一同注册,这样里面对应api调用后,会直接调用到监听器中具体的实现。在jdreactframework层上面,可以是一个sdk层,是业务api层与定义的jdreactframework层之间的桥梁。对于应用开发平台为reactnative,可以通过js通讯桥建立模块方法与js之间的互相调用,然后通过模块方法中的react标记方法调用目标api对应的监听器。

可选地,通过flutter统一调用接口调用目标api,包括:在flutter框架中定义flutter统一调用接口;通过flutter统一调用接口调用目标api对应的监听器。

具体地,若应用开发平台为flutter,可以在jdreactframework层定义抽象一个新的统一调用接口。定义并实现flutter的方法调用处理程序成标准的接口。在sdk层,采用methodchannel实现业务api层与jdreactframework层之间的交互。在业务调用时,维护所有实现的flutter统一调用接口的缓存,可以存在表中,根据flutter方法关键字来保存。具体实施时,在flutter中会注册该接口到flutterview中,收到调用后,根据对应的关键字在缓存中找到对应的flutter统一调用接口,并将其中的方法,及参数传递到flutter统一调用接口中。

可选地,通过flutter统一调用接口调用目标api对应的监听器之前,还包括:将映射接口通过flutter方法关键字的方式保存到缓存的表中;以flutter方法关键字注册flutter接口回调注册中心;当调用关键字到对象的方法时,根据关键字的值从缓存中找到对应的flutter统一调用接口,并将数据转成表和方法之后传递给flutter统一调用接口。

具体地,可以将所有的flutter统一调用接口通过flutter方法关键字的方式保存到缓存的哈希表中。在系统回调到关键字到对象的方法时,会根据关键字取出对应的flutter统一调用接口,并将数据转成hashmap和刚发的方式传递给flutter统一调用接口,最终flutter统一调用接口会回调对应的监听器来完成相应的功能,而且会通过flutter统一调用接口将数据传递到dart。

s102、根据调用方式,运行与目标api对应的监听器。

本实施例中,监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。根据调用方式,运行与目标api对应的监听器,实现coreapi中最终的功能。

具体地,最上一层是业务api层,和原有的实现保持一致。可以根据应用开发平台为flutter或reactnative,在sdk层中分别通过methodchannel或js桥与jdreactframework层中的flutter统一调用接口或moudleapi实现交互,并最总运行coreapi层中与目标api对应的监听器。本实施例可以通过抽象一层flutter统一调用接口和监听器来抹平两端接口的不一致性。然后,缓存所有的flutter统一调用接口,并定制来统一标准的methodcallhandler接口。通过flutter方法关键字对应flutter统一调用接口,从而不必封装api的开发者重复封装methodcallhandler。在这种模式下,开发者只需要关系监听器/flutter统一调用接口的实现,不必关心两边框架的不一致性。

可选地,通过flutter统一调用接口将监听器的运行结果反馈给flutter结果回调接口,以使得flutter结果回调接口将运行结果回传给调用端。

具体地,抽象化flutter的数据返回flutter结果回调接口,包含成功和失败的回调。当jdfluttercall返回数据后,最终会将数据通过jdfluttermethodcallhandler的结果回传到调用者。

本实施例,通过根据应用开发平台的类型,确定应用程序编程接口api的调用方式;根据调用方式,运行与目标api对应的监听器;其中,监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。从而可以实现不同应用开发平台的api兼容,保证接口调用的一致性,降低开发成本。

图3为本申请实施例二提供的跨平台的api共享装置的结构示意图,如图3所示,本实施例中的装置可以包括:

确定模块31,用于根据应用开发平台的类型,确定应用程序编程接口api的调用方式;

调用模块32,用于根据调用方式,运行与目标api对应的监听器;其中,监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。

在一种可能的设计中,确定模块31,具体用于:

若应用开发平台为reactnative,则采用react标记方法调用目标api;

若应用开发平台为flutter,则通过flutter统一调用接口调用目标api,其中,flutter统一调用接口用于建立目标api和对应监听器之间的映射关系。

在一种可能的设计中,采用react标记方法调用目标api,包括:

在react接口管理对象中注册模块方法,模块方法用于将api声明为react标记方法,并注册与react标记方法对应的监听器;

通过js通讯桥建立模块方法与js之间的互相调用;

通过模块方法中的react标记方法调用目标api对应的监听器。

在一种可能的设计中,通过flutter统一调用接口调用目标api,包括:

在flutter框架中定义flutter统一调用接口;

通过flutter统一调用接口调用目标api对应的监听器。

在一种可能的设计中,还包括:

缓存模块33,用于在通过flutter统一调用接口调用目标api对应的监听器之前,将映射接口通过flutter方法关键字的方式保存到缓存的表中;

注册模块34,用于以flutter方法关键字注册flutter接口回调注册中心;

传输模块35,用于当调用关键字到对象的方法时,根据关键字的值从缓存中找到对应的flutter统一调用接口,并将数据转成表和方法之后传递给flutter统一调用接口。

在一种可能的设计中,还包括:

反馈模块36,用于通过flutter统一调用接口将监听器的运行结果反馈给flutter结果回调接口,以使得flutter结果回调接口将运行结果回传给调用端。

本实施例的跨平台的api共享装置,可以执行图2所示方法中的技术方案,其具体实现过程和技术原理参见图2所示方法中的相关描述,此处不再赘述。

本实施例,通过根据应用开发平台的类型,确定应用程序编程接口api的调用方式;根据调用方式,运行与目标api对应的监听器;其中,监听器包含有将api抽象成接口操作的功能集合后所编译得到的监听程序。从而可以实现不同应用开发平台的api兼容,保证接口调用的一致性,降低开发成本。

图4为本申请实施例三提供的跨平台的api共享系统的结构示意图,如图4所示,本实施例的跨平台的api共享系统40可以包括:处理器41和存储器42。

存储器42,用于存储程序;存储器42,可以包括易失性存储器(英文:volatilememory),例如随机存取存储器(英文:random-accessmemory,缩写:ram),如静态随机存取存储器(英文:staticrandom-accessmemory,缩写:sram),双倍数据率同步动态随机存取存储器(英文:doubledataratesynchronousdynamicrandomaccessmemory,缩写:ddrsdram)等;存储器也可以包括非易失性存储器(英文:non-volatilememory),例如快闪存储器(英文:flashmemory)。存储器42用于存储计算机程序(如实现上述方法的应用程序、功能模块等)、计算机指令等,上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器42中。并且上述的计算机程序、计算机指令、数据等可以被处理器41调用。

上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器42中。并且上述的计算机程序、计算机指令、数据等可以被处理器41调用。

处理器41,用于执行存储器42存储的计算机程序,以实现上述实施例涉及的方法中的各个步骤。

具体可以参见前面方法实施例中的相关描述。

处理器41和存储器42可以是独立结构,也可以是集成在一起的集成结构。当处理器41和存储器42是独立结构时,存储器42、处理器41可以通过总线43耦合连接。

本实施例的跨平台的api共享系统可以执行图2所示方法中的技术方案,其具体实现过程和技术原理参见图2所示方法中的相关描述,此处不再赘述。

此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当用户设备的至少一个处理器执行该计算机执行指令时,用户设备执行上述各种可能的方法。

其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。

本申请还提供一种程序产品,程序产品包括计算机程序,计算机程序存储在可读存储介质中,服务器的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得服务器实施上述本申请实施例任一的方法。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或对其中部分或全部技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1