CN111309407B - 集成第三方库的处理方法及装置 - Google Patents

集成第三方库的处理方法及装置 Download PDF

Info

Publication number
CN111309407B
CN111309407B CN202010108828.4A CN202010108828A CN111309407B CN 111309407 B CN111309407 B CN 111309407B CN 202010108828 A CN202010108828 A CN 202010108828A CN 111309407 B CN111309407 B CN 111309407B
Authority
CN
China
Prior art keywords
party application
party
class
function
parameter
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
Application number
CN202010108828.4A
Other languages
English (en)
Other versions
CN111309407A (zh
Inventor
唐鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Migu Cultural Technology Co Ltd
China Mobile Communications Group Co Ltd
Original Assignee
Migu Cultural Technology Co Ltd
China Mobile Communications Group Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Migu Cultural Technology Co Ltd, China Mobile Communications Group Co Ltd filed Critical Migu Cultural Technology Co Ltd
Priority to CN202010108828.4A priority Critical patent/CN111309407B/zh
Publication of CN111309407A publication Critical patent/CN111309407A/zh
Application granted granted Critical
Publication of CN111309407B publication Critical patent/CN111309407B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

本发明实施例提供一种集成第三方库的处理方法及装置,所述方法包括:SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。本发明实施例按需使用第三方库的功能,不必将全部的第三方库都引入工程,有效地减少了客户端集成的工作量,同时减少了APP的包体大小。

Description

集成第三方库的处理方法及装置
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种集成第三方库的处理方法及装置。
背景技术
当在IOS-SDK中集成第三方库时,要调用到第三方库中的方法,因此,需要引入到第三方库的头文件,这样才能找到对应的函数方法。例如,集成微信的授权登录功能时,需要在代码中引入WXApi.h头文件,然后才能编译成功。应用程序APP在使用IOS-SDK的时候将要使用的第三方应用的APPID和APPKey传入IOS-SDK,并在Xcode工程文件中引入相应的第三方SDK库,就可以一键使用第三方应用的授权登录功能。
若IOS-SDK同时拥有QQ、微信、微博和支付宝等多个第三方应用的功能,但是某一个调用方只需要使用某一种或者某几种组合的第三方应用的功能时,如果使用现有引入第三方头文件才能使用第三方SDK库函数的技术方案,Xcode工程文件中需要引入所有第三方应用的SDK库,否则IOS-SDK中引入的头文件将会报找不到对应的方法的编译错误。这样带来的问题主要有两点:一个是增加了客户端集成的工作量,引入了不必要的第三方SDK库;第二个是增加了APP的包体大小,因为一些不需要使用的第三方SDK库也被编译进来了。
发明内容
为了解决IOS-SDK必须引入第三方头文件才能使用第三方SDK库函数所导致的客户端集成工作量大且APP包体较大的问题,本发明实施例提供一种集成第三方库的处理方法及装置。
第一方面,本发明实施例提供一种集成第三方库的处理方法,包括:
软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
其中,所述软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,具体为:
动态生成所述第一方法;
若确定所述第三方应用的类的实例化对象中存在所述第一方法,则查找到所述第一方法,将所述标识信息作为所述第一方法的入参,实例化所述第一方法。
其中,所述通过动态调用所述第三方应用的类中第二方法之前,还包括:
通过动态调用所述第三方应用的类中第四方法,确定用户终端上安装有所述第三方应用。
其中,通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
动态生成所述第二方法;
若确定所述第三方应用的类的实例化对象中存在所述第二方法,则查找到所述第二方法;
将需要获取的与所述第三方应用的功能相关的参数的类型和所述参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数。
其中,所述将需要获取的与所述第三方应用的功能相关的参数的类型和参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
利用字符串构建类实例函数捕获所述目标应用程序内的授权请求发送指针,若捕获到所述授权请求发送指针,则构造授权请求发送类对象,其中,所述授权请求发送类对象用于指示需要获取的与所述第三方应用的功能相关的参数的类型;
将所述授权请求发送类对象、参数返回的位置和self参数作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述授权请求发送类对象、参数返回的位置和self参数向所述目标应用程序返回与所述第三方应用的功能相关的参数。
其中,通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数,具体为:
动态生成所述第三方法;
若确定第三方应用的类的实例化对象中存在所述第三方法,则查找到所述第三方法,并将从所述目标应用程序传入的、与所述第三方应用的功能相关的参数作为所述第三方法的入参,实例化所述第三方法。
其中,所述回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数的步骤之后,还包括:
通过调用回调函数,对与所述第三方应用的功能相关的参数进行解析,获得与所述第三方应用的功能相关的用户数据;
将所述用户数据上传至统一用户中心后台获得对应的用户信息和用户唯一标识,并将所述用户信息和用户唯一标识返回给所述目标应用程序。
第二方面,本发明实施例提供一种集成第三方库的处理装置,包括:
第三方应用注册模块,用于调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
动态授权模块,用于通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
参数回调模块,用于通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的集成第三方库的处理方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的集成第三方库的处理方法的步骤。
本发明实施例提供的集成第三方库的处理方法及装置,通过利用动态调用机制,解决了IOS-SDK必须引入头文件才能使用第三方库函数的难题,使得IOS-SDK和APP在编译时不用依赖第三方库的存在,即可以按需使用第三方库的功能,不必将全部的第三方库都引入工程,有效地减少了客户端集成的工作量,同时减少了APP的包体大小。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的集成第三方库的处理方法的流程示意图;
图2为本发明实施例提供的通过动态集成第三方库实现微信授权登录功能的流程示意图;
图3为本发明实施例提供的集成第三方库的处理装置的结构示意图;
图4为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所述,为本发明实施例提供的集成第三方库的处理方法的流程示意图,包括:
步骤100、软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
具体地,本发明实施例的执行主体为软件开发工具包SDK,为了在目标应用程序APP中集成第三方应用的功能,利用了IOS中的runtime机制,即在目标应用程序运行时动态加载相应的类和方法,不必将全部的第三方库都引入工程。
其中,第三方应用包括但不限于:微信、支付宝、微博和QQ等APP,第三方应用的功能包括但不限于授权登录功能、支付功能、分享功能等功能。
本发明实施例中首先需要确定在目标应用程序APP客户端,用户所选择的第三方应用,具体根据目标应用程序传入的标识信息来确定用户选择的第三方应用,然后动态加载与集成该第三方应用的功能相关的类,为了方便描述,将与集成第三方应用的功能相关的类简称为第三方应用的类。
在一个实施例中,若检测到提供给目标应用程序APP客户端的第三方应用的传参接口有值传入,则动态加载所述第三方应用的类;其中,所述值具体为所述第三方应用的标识信息。例如,若检测到提供给目标应用程序APP客户端的微信传参接口有值传入,则确定用户选择的第三方应用是微信,此时该值为微信的APPID,那么,动态加载微信的类WXApi。
为了调用第三方应用的类中的函数,需要将第三方应用的类进行实例化,然后利用该第三方应用的类的实例化对象去动态调用该第三方应用的类中的函数。在本发明实施例中,动态加载第三方应用的类,具体包括:
利用字符串构建类实例函数捕获所述第三方应用的类的指针;
若捕获到所述第三方应用的类的指针,则确定所述第三方应用的类的实例化对象存在。
其中,字符串构建类实例函数可以是NSClassFromString函数,NSClassFromString函数可以直接从字符串获取一个类,从而实现类的动态加载。利用字符串构建类实例函数捕获所述第三方应用的类的指针,具体代码可以表示为:
Class*wxClass=NSClassFromString(@“WXApi”)
若可以捕获(hook)到所述第三方应用的类的指针wxClass,则说明所述第三方应用的类的实例化对象存在。
在确定第三方应用的类的实例化对象存在后,SDK内部通过动态调用第三方应用的类中第一方法,注册所述第三方应用。
步骤101、通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
具体地,在注册第三方应用之后,SDK内部通过动态调用第三方应用的类中第二方法,实现向第三方应用的服务器发送授权请求;授权请求发送之后,会跳转到第三方应用的客户端,当用户确认授权之后,第三方应用的服务器向所述目标应用程序返回与第三方应用的功能相关的参数,然后目标应用程序通过SDK提供的第三方应用的传参接口将这些与第三方应用的功能相关的参数传入到SDK内部。
值得说明的是,本发明实施例中默认用户终端上安装了所述第三方应用的客户端。在一个实施例中,所述授权请求携带集成所述第三方应用的功能所需要的参数的类型以及参数返回的位置。
步骤102、通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
具体地,SDK内部动态调用第三方法,第三方法用于回调从所述目标应用程序传入的、所述第三方应用的服务器返回的参数。
SDK内部获取到第三方应用的服务器返回的参数,即获得了第三方应用授权,可以利用所述参数去实现第三方应用的功能。
本发明实施例提供的集成第三方库的处理方法,通过动态调用机制,解决了IOS-SDK必须引入头文件才能使用第三方库函数的难题,使得IOS-SDK和APP在编译时不用依赖第三方库的存在,即可以按需使用第三方库的功能,不必将全部的第三方库都引入工程,有效地减少了客户端集成的工作量,同时减少了APP的包体大小。
基于上述实施例的内容,所述软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,具体为:
动态生成所述第一方法;
若确定所述第三方应用的类的实例化对象中存在所述第一方法,则查找到所述第一方法,将所述标识信息作为所述第一方法的入参,实例化所述第一方法。
具体地,首先利用字符串构建类实例函数在目标应用程序运行时捕获第三方应用的类的指针,若捕获到第三方应用的类的指针,则确定该第三方应用的类的实例化对象存在。
然后,动态生成用于注册所述第三方应用的功能的第一方法,并判断第三方应用的类的指针所指向的方法表中是否存在第一方法。
在一个实施例中,利用字符串获取选择器函数动态生成第一方法,字符串获取选择器函数具体为NSSelectorFromString函数,NSSelectorFromString函数可以直接从字符串获取一个选择器,从而实现方法的动态加载。即利用NSSelectorFromString函数动态生成用于注册所述第三方应用的功能的第一方法,并使用respondsToSelector函数判断所述第三方应用的类的指针所指向的方法表中是否存在所述第一方法。
若确定第三方应用的类的指针所指向的方法表中存在第一方法,则查找到第一方法对应的指针,将第三方应用的标识信息作为第一方法的入参,根据指针实例化所述第一方法,从而将第三方应用的标识信息传入所述第一方法,注册第三方应用的功能。在一个实施例中,利用objc_msgSend汇编函数查找第一方法。利用objc_msgSend汇编函数实现参数传递,效率高且安全,不易被破解。
以实现微信授权登录功能为例,SDK内部检测到微信传参接口有值传入,使用NSClassFromString方法在APP运行时去主动hook应用内的WXApi类指针wxClass,如果不能实例化对象则说明wxClass不存在则返回失败,终止步骤。如果存在则继续使用NSSelectorFormString生成一个registerApp:动态方法SEL1,然后使用respondsToSelector:判断wxClass指向的方法表中是否存在SEL1方法,如果不存在则返回失败终止步骤,如果存在则使用objc_msgSend去wxClass指向的方法表中去找到SEL1方法对应的指针,根据指针实例化其方法,将APPID传入以注册微信授权登录功能。上述过程可通过如下伪代码实现:
Figure BDA0002389256620000091
本发明实施例提供的集成第三方库的处理方法及装置,通过利用动态调用机制,并利用objc_msgSend汇编函数实现参数传递,从而可以在APP运行时动态调用第三方SDK库头文件中要使用到的函数方法,有效地减少了客户端集成的工作量,同时减少了APP的包体大小。
基于上述实施例的内容,所述通过动态调用所述第三方应用的类中第二方法之前,还包括:
通过动态调用所述第三方应用的类中第四方法,确定用户终端上安装有所述第三方应用。
可以理解的是,若用户终端上没有安装相应的第三方应用,则无法实现对第三方应用的功能的集成,因此,在动态调用第三方应用的类中第二方法发送授权请求之前,需要确定用户终端上安装有相应的第三方应用。
通过动态调用所述第三方应用的类中第四方法,确定用户终端上安装有所述第三方应用,具体包括:
动态生成所述第四方法;
若确定所述第三方应用的类的实例化对象中存在所述第四方法,则查找到并实例化所述第四方法;
若所述第四方法的返回值为真值,则确定用户终端上安装有所述第三方应用。
在一个实施例中,利用字符串获取选择器函数NSSelectorFromString动态生成第四方法,其中,第四方法用于判断用户终端是否安装所述第三方应用,并使用respondsToSelector函数判断所述第三方应用的类的指针所指向的方法表中是否存在所述第四方法;若确定所述类的指针所指向的方法表中存在所述第四方法,则使用objc_msgSend函数在所述类的指针所指向的方法表中找到所述第四方法对应的指针,并根据所述第二方法对应的指针实例化所述第二方法;若所述第四方法的返回值为真值,则确定用户终端上安装有所述第三方应用。
以实现微信授权登录功能为例,在注册了微信授权功能之后,程序返回到目标应用程序,目标应用程序调用SDK提供的登录页面,并在用户点击登录页面上的微信授权登录入口后,SDK内部使用NSSelectorFormString生成一个isWXAppInstalled:动态方法SEL2,然后使用respondsToSelector函数判断wxClass指向的方法表中是否存在SEL2方法,如果不存在则返回失败终止步骤,如果存在则使用objc_msgSend去wxClass指向的方法表中找到SEL2对应的指针,根据指针实例化其方法;若isWXAppInstalled返回NO,则确定用户终端没有安装微信,则终止步骤,若返回YES,则确定用户终端安装有微信客户端,则进入下一步骤。上述过程可以采用如下伪代码实现:
Figure BDA0002389256620000101
Figure BDA0002389256620000111
基于上述实施例的内容,通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
动态生成所述第二方法;
若确定所述第三方应用的类的实例化对象中存在所述第二方法,则查找到所述第二方法;
将需要获取的与所述第三方应用的功能相关的参数的类型和所述参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数。
具体地,SDK内部可以利用字符串获取选择器函数NSSelectorFormString动态生成用于向所述第三方应用的服务器发送授权请求的第二方法,并利用respondsToSelector函数判断第三方应用的类的指针所指向的方法表中是否存在所述第二方法;若确定所述第三方应用的类的实例化对象中存在所述第二方法,则可以利用objc_msgSend汇编函数查找到所述第二方法,将需要获取的与所述第三方应用的功能相关的参数的类型和所述参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数。
在一个可选实施例中,所述将需要获取的与所述第三方应用的功能相关的参数的类型和参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
利用字符串构建类实例函数捕获所述目标应用程序内的授权请求发送指针,若捕获到所述授权请求发送指针,则构造授权请求发送类对象,其中,所述授权请求发送类对象用于指示需要获取的与所述第三方应用的功能相关的参数的类型;
将所述授权请求发送类对象、参数返回的位置和self参数作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述授权请求发送类对象、参数返回的位置和self参数向所述目标应用程序返回与所述第三方应用的功能相关的参数。
具体地,在实例化所述第二方法之前,利用字符串构建类实例函数NSClassFromString捕获所述目标应用程序内的授权请求发送指针,若捕获到所述授权请求发送指针,则构造授权请求发送类对象,其中,所述授权请求发送类对象用于指示需要获取的与所述第三方应用的功能相关的参数的类型,
在一个实施例中,授权请求发送指针具体为:SendAuthReq指针。若捕获到所述SendAuthReq指针,则构造SendAuthReq类对象。SendAuthReq类用于指示需要获取的与第三方应用的功能相关的参数的具体类型。
然后,将所述SendAuthReq类对象、参数返回的位置和self参数作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述SendAuthReq类对象、参数返回的位置和self参数向所述目标应用程序返回与所述第三方应用的功能相关的参数。
以实现微信授权登录功能为例,SDK内部使用NSSelectorFormString生成一个sendAuthReq:viewController:delegate:动态方法SEL3,然后使用respondsToSelector:判断wxClass指向的方法表中是否存在SEL3方法,如果不存在则返回失败终止步骤,如果存在则使用objc_msgSend去wxClass指向的方法表中去找到SEL3方法对应的指针,根据指针实例化SEL3方法,其中,使用NSClassFromString方法去hook住应用内的SendAuthReq指针,如果不能实例化对象则说明SendAuthReq指针不存在,则返回失败,终止步骤。否则,构造SendAuthReq类对象,将其和登录页面对象参数、self参数传入SEL3方法,便会跳转到微信客户端进行授权登录。上述过程可以采用如下代码实现:
Figure BDA0002389256620000131
基于上述实施例的内容,通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数,具体为:
利用字符串获取选择器函数动态生成所述第三方法;
若确定第三方应用的类的实例化对象中存在所述第三方法,则查找到所述第三方法,并将从所述目标应用程序传入的、与所述第三方应用的功能相关的参数作为所述第三方法的入参,实例化所述第三方法。
具体地,可以利用字符串获取选择器函数NSSelectorFormString动态生成第三方法,第三方法用于回调从目标应用程序传入的、与第三方应用的功能相关的参数,并利用respondsToSelector函数判断第三方应用的类的指针所指向的方法表中是否存在所述第三方法。
若确定所述类的指针所指向的方法表中存在所述第三方法,则可以利用objc_msgSend汇编函数查找并实例化所述第三方法,将从目标应用程序传入的、与第三方应用的功能相关的参数传入第三方法,从而实现参数回调。
以实现微信授权登录功能为例,微信授权登录成功后,又跳转回目标应用程序APP,并携带微信相关参数响应目标应用程序APP下的APPDelegate.m文件中的application:openURL:options:回调函数,目标应用程序APP再将这些回调参数通过SDK提供的接口传入SDK内部。SDK内部检测到有参数传入,继续使用NSSelectorFormString生成一个handleOpenURL:delegate:动态方法SEL4,然后使用respondsToSelector:判断wxClass指向的方法表中是否存在SEL4方法,如果不存在则返回失败终止步骤,如果存在则使用objc_msgSend找到wxClass中指向SEL4方法对应的指针,再实例化其方法,然后将微信相关参数传入。上述过程可采用如下伪代码实现:
Figure BDA0002389256620000141
基于上述实施例的内容,所述回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数的步骤之后,还包括:
通过调用回调函数,对与所述第三方应用的功能相关的参数进行解析,获得与所述第三方应用的功能相关的用户数据;
将所述用户数据上传至统一用户中心后台获得对应的用户信息和用户唯一标识,并将所述用户信息和用户唯一标识返回给所述目标应用程序。
具体地,在SDK内部获取到与所述第三方应用的功能相关的参数之后,调用回调函数,对与所述第三方应用的功能相关的参数进行解析,从而获得与所述第三方应用的功能相关的用户数据,然后根据该用户数据在后台服务器中获取与该第三方应用功能对应的用户信息和用户唯一标识,将所述用户信息和用户唯一标识返回给所述目标应用程序进行后续处理。
仍以实现微信授权登录功能为例,通过调用之前self参数所在文件下的onResp:回调函数,SDK内部对与所述第三方应用的功能相关的参数进行解析,获得与微信授权登录功能相应的accessToken和openID用户授权数据。SDK内部再将这两个参数上传至统一用户中心后台获得对应的用户信息和用户唯一标识符,SDK再将数据返回给APP,由APP进行展示处理。
值得说明的是,在本发明上述各实施例中,可以利用NSClassFromString函数捕获第三方应用的类的指针,NSClassFromString函数可以直接从字符串获取一个类,从而实现类的动态加载;利用NSSelectorFormString函数动态生成第三方应用的类中的方法,NSSelectorFromString函数可以直接从字符串获取一个选择器,从而实现方法的动态加载;利用respondsToSelector函数判断第三方应用的类的指针中是否存在动态生成的所述方法;利用objc_msgSend汇编函数在第三方应用的类的指针所指向的方法表中找到动态生成的所述方法所对应的指针,实现参数传递。
本发明实施例提供的集成第三方库的处理方法,实现了动态调用与SDK的全流程结合,并利用objc_msgSend汇编函数来实现参数传递,可有效地提升动态集成第三方库的代码运行效率。
如图2所示,为本发明实施例提供的通过动态集成第三方库实现微信授权登录功能的流程示意图。
如图3所示,为本发明实施例提供的集成第三方库的处理装置的结构示意图,包括:
第三方应用注册模块310,用于调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
具体地,第三方应用注册模块310通过调用第三方应用的类中第一方法,注册所述第三方应用。所述第三方应用根据目标应用程序传入的标识信息确定。
动态授权模块320,用于通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
具体地,动态授权模块320通过动态调用所述第三方应用的类中第二方法,实现向第三方应用的服务器发送授权请求;授权请求发送之后,会跳转到第三方应用的客户端,当用户确认授权之后,第三方应用的服务器向所述目标应用程序返回与第三方应用的功能相关的参数;目标应用程序通过SDK提供的第三方应用的传参接口将这些与第三方应用的功能相关的参数传入到SDK内部。
参数回调模块330,用于通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
具体地,参数回调模块330动态调用所述第三方应用的类中第三方法,第三方法用于回调从所述目标应用程序传入的、所述第三方应用的服务器返回的参数。获取到第三方应用的服务器返回的参数,即可以利用所述参数去实现第三方应用的功能授权。
本发明实施例提供的集成第三方库的处理装置,通过动态调用机制,解决了IOS-SDK必须引入头文件才能使用第三方库函数的难题,使得IOS-SDK和APP在编译时不用依赖第三方库的存在,即可以按需使用第三方库的功能,不必将全部的第三方库都引入工程,有效地减少了客户端集成的工作量,同时减少了APP的包体大小。
图4为本发明实施例提供的电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储在存储器430上并可在处理器410上运行的计算机程序,以执行上述各方法实施例所提供的集成第三方库的处理方法,例如包括:软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例提供的集成第三方库的处理方法,例如包括:软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种集成第三方库的处理方法,其特征在于,包括:
软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
2.根据权利要求1所述的集成第三方库的处理方法,其特征在于,所述软件开发工具包SDK内部动态调用第三方应用的类中用于注册所述第三方应用的第一方法,具体为:
动态生成所述第一方法;
若确定所述第三方应用的类的实例化对象中存在所述第一方法,则查找到所述第一方法,将所述标识信息作为所述第一方法的入参,实例化所述第一方法。
3.根据权利要求1所述的集成第三方库的处理方法,其特征在于,所述通过动态调用所述第三方应用的类中第二方法之前,还包括:
通过动态调用所述第三方应用的类中第四方法,确定用户终端上安装有所述第三方应用。
4.根据权利要求1所述的集成第三方库的处理方法,其特征在于,通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
动态生成所述第二方法;
若确定所述第三方应用的类的实例化对象中存在所述第二方法,则查找到所述第二方法;
将需要获取的与所述第三方应用的功能相关的参数的类型和所述参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数。
5.根据权利要求4所述的集成第三方库的处理方法,其特征在于,所述将需要获取的与所述第三方应用的功能相关的参数的类型和参数返回的位置作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述参数的类型和参数返回的位置向所述目标应用程序返回与所述第三方应用的功能相关的参数,具体为:
利用字符串构建类实例函数捕获所述目标应用程序内的授权请求发送指针,若捕获到所述授权请求发送指针,则构造授权请求发送类对象,其中,所述授权请求发送类对象用于指示需要获取的与所述第三方应用的功能相关的参数的类型;
将所述授权请求发送类对象、参数返回的位置和self参数作为所述第二方法的入参,实例化所述第二方法,以使得所述第三方应用的服务器根据所述授权请求发送类对象、参数返回的位置和self参数向所述目标应用程序返回与所述第三方应用的功能相关的参数。
6.根据权利要求1所述的集成第三方库的处理方法,其特征在于,通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数,具体为:
动态生成所述第三方法;
若确定第三方应用的类的实例化对象中存在所述第三方法,则查找到所述第三方法,并将从所述目标应用程序传入的、与所述第三方应用的功能相关的参数作为所述第三方法的入参,实例化所述第三方法。
7.根据权利要求1所述的集成第三方库的处理方法,其特征在于,所述回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数的步骤之后,还包括:
通过调用回调函数,对与所述第三方应用的功能相关的参数进行解析,获得与所述第三方应用的功能相关的用户数据;
将所述用户数据上传至统一用户中心后台获得对应的用户信息和用户唯一标识,并将所述用户信息和用户唯一标识返回给所述目标应用程序。
8.一种集成第三方库的处理装置,其特征在于,包括:
第三方应用注册模块,用于调用第三方应用的类中用于注册所述第三方应用的第一方法,其中,所述第三方应用根据目标应用程序传入的标识信息确定;
动态授权模块,用于通过动态调用所述第三方应用的类中第二方法,向所述第三方应用的服务器发送授权请求,以使得所述第三方应用的服务器向所述目标应用程序返回与所述第三方应用的功能相关的参数;
参数回调模块,用于通过动态调用所述第三方应用的类中第三方法,回调从所述目标应用程序传入的、与所述第三方应用的功能相关的参数。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述集成第三方库的处理方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述集成第三方库的处理方法的步骤。
CN202010108828.4A 2020-02-21 2020-02-21 集成第三方库的处理方法及装置 Active CN111309407B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010108828.4A CN111309407B (zh) 2020-02-21 2020-02-21 集成第三方库的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010108828.4A CN111309407B (zh) 2020-02-21 2020-02-21 集成第三方库的处理方法及装置

Publications (2)

Publication Number Publication Date
CN111309407A CN111309407A (zh) 2020-06-19
CN111309407B true CN111309407B (zh) 2023-07-11

Family

ID=71160160

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010108828.4A Active CN111309407B (zh) 2020-02-21 2020-02-21 集成第三方库的处理方法及装置

Country Status (1)

Country Link
CN (1) CN111309407B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112764729B (zh) * 2021-01-08 2024-02-06 深圳依时货拉拉科技有限公司 应用软件开发方法、装置、计算机设备及可读存储介质
CN114461226A (zh) * 2022-04-07 2022-05-10 广州易方信息科技股份有限公司 解决强制依赖的方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530156A (zh) * 2013-10-17 2014-01-22 北京奇虎科技有限公司 动态加载和调用程序的方法及装置
CN105094878A (zh) * 2014-05-22 2015-11-25 阿里巴巴集团控股有限公司 一种集成***库文件的方法和装置
CN109582400A (zh) * 2018-11-30 2019-04-05 北京小米移动软件有限公司 程序调用方法及装置
CN110427319A (zh) * 2019-07-22 2019-11-08 上海易点时空网络有限公司 基于ios的轻量级热修复方法及装置、存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016061762A1 (zh) * 2014-10-22 2016-04-28 刘大澎 移动终端软件的多渠道sdk接入***及方法
CN105656922A (zh) * 2016-02-04 2016-06-08 腾讯科技(深圳)有限公司 一种应用程序的登录方法、装置及智能设备
CN105843654A (zh) * 2016-04-14 2016-08-10 广州市久邦数码科技有限公司 一种动态加载广告sdk的实现方法及其实现***
US11340961B2 (en) * 2017-03-23 2022-05-24 Airwatch Llc Dynamically integrating a client application with third-party services
CN107977274B (zh) * 2017-10-19 2021-01-05 北京奇艺世纪科技有限公司 Sdk调用的控制方法及装置
CN108829467B (zh) * 2018-04-28 2020-05-22 蜂助手股份有限公司 第三方平台对接实现方法、装置、设备及存储介质
CN109522021B (zh) * 2018-10-30 2022-03-25 咪咕文化科技有限公司 参数回调处理方法、装置、电子设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530156A (zh) * 2013-10-17 2014-01-22 北京奇虎科技有限公司 动态加载和调用程序的方法及装置
CN105094878A (zh) * 2014-05-22 2015-11-25 阿里巴巴集团控股有限公司 一种集成***库文件的方法和装置
CN109582400A (zh) * 2018-11-30 2019-04-05 北京小米移动软件有限公司 程序调用方法及装置
CN110427319A (zh) * 2019-07-22 2019-11-08 上海易点时空网络有限公司 基于ios的轻量级热修复方法及装置、存储介质

Also Published As

Publication number Publication date
CN111309407A (zh) 2020-06-19

Similar Documents

Publication Publication Date Title
US9141444B2 (en) Inter-application communication on mobile platforms
US7877091B2 (en) Method and system for executing a container managed application on a processing device
US9280665B2 (en) Fast and accurate identification of message-based API calls in application binaries
US10754717B2 (en) Fast and accurate identification of message-based API calls in application binaries
CN111309407B (zh) 集成第三方库的处理方法及装置
CN111143087A (zh) 一种接口调用方法、装置、存储介质和服务器
US20140282630A1 (en) Backend custom code extensibility
CN112948835A (zh) 小程序风险检测方法和装置
US20230401058A1 (en) Semantic functional wrappers of services
CN113726943A (zh) 控制方法及电子设备
CN110619204A (zh) 一种邀请码生成方法、装置、终端设备及存储介质
CN113326539B (zh) 针对小程序进行隐私数据泄露检测的方法、装置及***
CN109388388B (zh) 功能模块间的信息交互方法、装置、设备及存储介质
US8738755B2 (en) Providing external access to service versions via a bundle framework
CN113010892B (zh) 小程序恶意行为检测方法和装置
CN112154417A (zh) 经由仿真网络通信信道在应用的单机版本和基于Web的版本之间共享代码库
CN112732547B (zh) 业务测试方法、装置、存储介质及电子设备
CN113176907A (zh) 接口数据调用方法、装置、计算机***及可读存储介质
CN111124627A (zh) 应用程序的调起者确定方法、装置、终端及存储介质
CN111049795B (zh) 分布式Web应用的敏感数据未加密漏洞的检测方法及装置
CN114301970A (zh) 服务调用方法、装置、电子设备及存储介质
US10929210B2 (en) Collaboration system protocol processing
US20230385128A1 (en) Cross service lock handling
CN114090082B (zh) 一种整合规则引擎的调用外部接口的方法及***
CN116010112B (zh) 钩子函数的调用方法、装置、计算机设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant