CN113852647A - 基于顶层视图标记网络请求的方法、装置、介质及设备 - Google Patents

基于顶层视图标记网络请求的方法、装置、介质及设备 Download PDF

Info

Publication number
CN113852647A
CN113852647A CN202010593299.1A CN202010593299A CN113852647A CN 113852647 A CN113852647 A CN 113852647A CN 202010593299 A CN202010593299 A CN 202010593299A CN 113852647 A CN113852647 A CN 113852647A
Authority
CN
China
Prior art keywords
controller
network request
mark
root controller
tangent plane
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.)
Pending
Application number
CN202010593299.1A
Other languages
English (en)
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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN202010593299.1A priority Critical patent/CN113852647A/zh
Publication of CN113852647A publication Critical patent/CN113852647A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种基于顶层视图标记网络请求的方法、装置、介质及设备,包括:创建元数据类;获得功能页面的顶层视图;判断顶层视图是否满足标示获取协议,若满足,则利用切面代理获得当前根控制器的标示;当向功能页面发起网络请求时,利用切面代理调用所述元数据类拦截网络请求;为网络请求添加所述标示;如此,若某个功能页面处于正在显示的状态时,可以基于顶层视图获取到该功能页面的标示;当向功能页面发起网络请求时,利用切面代理调用元数据类拦截网络请求,为网络请求添加标示;这样只需修改功能页面顶层视图的逻辑代码,创建元数据类,调用切面代理即可实现对网络请求添加标示;无需修改大量的代码,降低工作量,提高添加标示的效率。

Description

基于顶层视图标记网络请求的方法、装置、介质及设备
技术领域
本申请属于网络通信的技术领域,尤其涉及一种基于顶层视图标记网络请求的方法、装置、介质及设备。
背景技术
在服务器和终端的通信过程中,需要利用多域方案将针对某个功能页面的所有的网络请求都添加上标示,方便服务端统计该页面有多少网络请求。比如:有A功能页面和B功能页面,每个功能页面有200个网络请求,那么需要为访问A功能页面的网络请求添加标示,需要为访问B功能页面的网络请求添加标示。
现有技术中,需要对每个功能页面的相关函数进行修改才可以获取到相应的标示,再为相应的网络请求增添标示,但是功能页面众多,需要修改的函数代码也非常多,导致工作量较大,添加标示的效率较低。
发明内容
针对现有技术中在为网络请求添加标示时,需要修改的函数代码较多,导致工作量大且添加标示的效率低的技术问题,本申请实施例提供了一种基于顶层视图标记网络请求的方法、装置、介质及计算机设备。
本申请的第一方面,提供一种标记网络请求的方法,所述方法包括:
创建元数据类,所述元数据类预留有数据接口;
针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
通过所述数据接口为所述网络请求添加所述标示;其中,
所述获得所述功能页面的顶层视图,包括:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
可选的,所述创建元数据类包括:
基于一次性令牌创建唯一的静态变量;
创建静态的元数据以及所述元数据对应的类;
基于所述静态变量、所述元数据及所述元数据对应的类创建实例,并返回所述元数据。
可选的,所述获得当前显示的顶层视图,包括:
基于根控制器获取函数获得根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
可选的,所述查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示,包括:
遍历存储列表,基于所述当前根控制器的标示ID查找对应的切面代理;所述存储列表中注册有各根控制器对应的切面代理以及所述根控制器与所述切面代理之间的对应关系;
利用所述切面代理调用标示获取函数获得所述当前根控制器的标示。
可选的,所述遍历存储列表之前,还包括:
创建子线程,利用所述子线程创建存储列表;
利用回调方法ExecuteLater回调注册函数,利用注册函数[[DYNetworkRequestManagerdefaultManager]registerAspectDelegate:delegate]回调所有功能页面对应的切面代理;
将所述切面代理注册至所述存储列表中;其中,delegate为所述切面代理。
可选的,所述当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求,包括:
当向所述功能页面发起所述网络请求时,判断所述切面代理是否响应了所述元数据类中的请求添加数据方法;
若确定切面代理响应了所述请求添加数据方法,则利用所述请求添加数据方法拦截所述网络请求。
可选的,所述通过所述数据接口为所述网络请求添加所述标示,包括:
在所述元数据类中回调所述网络请求;
判断所述网络请求的请求头是否存在,若确定所述网络请求的请求头存在,则基于所述数据接口利用标示添加函数将所述标示添加至所述请求头中。
可选的,方法还包括:
若确定所述网络请求的请求头不存在,创建当前请求头;
基于所述数据接口利用标示添加函数将所述标示添加至所述当前请求头中;
将所述当前请求头赋值给所述网络请求。
本申请的第二方面,提供一种标记网络请求的装置,所述装置包括:
创建单元,用于创建元数据类,所述元数据类预留有数据接口;
第一获取单元,用于针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
第二获取单元,用于判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
拦截单元,用于当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
添加单元,用于通过所述数据接口为所述网络请求添加所述标示;其中,
所述第二获取单元具体用于:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
本申请的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述的方法。
本申请的第三方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面任一项所述的方法。
本申请提供了一种基于顶层视图标记网络请求的方法、装置、介质及计算机设备,方法包括:创建元数据类,所述元数据类预留有数据接口;针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;通过所述数据接口为所述网络请求添加所述标示;所述获得所述功能页面的顶层视图,包括:基于根控制器获取函数获得所述功能页面的根控制器;判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;获得所述当前根控制器对应的视图;如此,只需对屏幕显示顶级视图的逻辑代码进行修改,若某个功能页面在屏幕上处于正在显示的状态时,可基于顶层视图获取到该功能页面的标示;当向功能页面发起网络请求时,利用切面代理调用元数据类拦截网络请求,并通过元数据类为网络请求添加标示;整个标示添加过程只涉及功能页面顶层视图的逻辑代码的修改,元数据类的创建及切面代理的调用切面代理等操作;无需修改功能页面中其他函数的大量代码,因此可以降低工作量,提高添加标示的效率。
附图说明
图1为本申请实施例提供的基于顶层视图标记网络请求的方法流程示意图;
图2为本申请实施例提供的基于顶层视图标记网络请求的装置结构示意图;
图3为本申请实施例提供的基于顶层视图标记网络请求的计算机设备结构示意图;
图4为本申请实施例提供的基于顶层视图标记网络请求的计算机介质结构示意图。
具体实施方式
为了解决现有技术中在为网络请求添加标示时,需要修改的函数代码较多,导致工作量大且添加标示的效率低的技术问题,本申请实施例提供了一种基于顶层视图标记网络请求的方法、装置、介质及计算机设备。
下面通过附图及具体实施例对本申请的技术方案做进一步的详细说明。
实施例一
本实施例提供一种基于顶层视图标记网络请求的方法,如图1所示,所述方法包括:
S110,创建元数据类,所述元数据类预留有数据接口;
本实施例需要利用元数据类的方法为网络请求添加标示,因此需要创建元数据类,元数据类预留有数据接口,以能向元数据类中添加元数据。
作为一种可选的实施例,创建元数据类,包括:
基于一次性令牌创建唯一的静态变量;
创建静态的元数据以及所述元数据对应的类;
基于所述静态变量、所述元数据及所述元数据对应的类创建实例,并返回所述元数据。
为了确保在APP启动的过程都能够获取到待添加的标示,需要保持类一直常驻,在APP启动时,确保该类不能被销毁。因此,创建一个元数据类DYNetworkAddMetadata,元数据类为内存中的一个常驻对象,元数据类的实例需要为一个唯一的实例,并且在应用程序APP启动过程中,该实例不能被销毁。具体的,基于一次性令牌onceToken创建了一个静态变量static dispatch_once_tonceToken,定义一个静态的元数据networkAddMetadata及元数据对应的元数据类DYNetworkAddMetadata;基于静态变量、元数据及元数据对应的类,利用创建函数dispatch_once创建实例,代码实现如下:
dispatch_once(&onceToken,{
networkAddMetadata=[DYNetworkAddMetadata new];
});
最后返回元数据networkAddMetadata。
这样,利用onceToken在内存中只会创建一次的特性,可以确保在APP启动的时候只有唯一的实例。
S111,针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
为了提高标示添加的效率,本实施例针对每一个处于显示状态的功能页面,获得功能页面的顶层视图;也即,一旦某个功能页面正处于显示状态时(该页面正显示在屏幕上),此时才会获得该功能页面的顶层视图;然后基于顶层视图获得对应根控制器的标示。这样在为网络请求添加标示时,只需要修改顶层视图的逻辑代码,无需对功能页面的所有函数的代码进行修改,进而可降低工作量。
作为一种可选的实施例,所述获得当前显示的顶层视图,包括:
基于根控制器获取函数获得根控制器;
判断根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定根控制器并非是视图控制器、分屏控制器及标签栏控制器的任意一种,则确定根控制器对应的视图为顶层视图;
具体的,首先基于根控制器获取函数[UIApplicationsharedApplication].delegate.windowrootViewController获取根控制器;此时获得的根控制器不一定是顶层视图对应的控制器,因此还需判断根控制器是否为导航控制器UINavigationController、分屏控制器UISplitViewController及标签栏控制器UITabBarController;如果根控制器为上述三种类型的任意一种,则说明根控制器不是顶级视图对应的控制器;如果根控制器并非为上述三种类型的任意一种,则确定根控制器对应的视图为顶层视图,此时直接获取根控制器对应的视图即可。
这里,若根控制器为导航控制器UINavigationController,需要利用top函数UIViewController*vc=[DYFindTopViewController topViewController]查找顶层视图对应的目标根控制器,再根据目标根控制器获得对应的顶层视图。
若根控制器为标签栏控制器UITabBarController,需要基于选择函数selectedViewController查找到目标根控制器,这个当前根控制器即为顶部控制器,再根据当前根控制器获得对应的顶层视图。
S112,判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
获取到顶层视图后,利用判断函数vc respondsToSelector:@selector(getBiz)判断顶层视图是否满足(遵守)标示获取协议getBiz,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得当前根控制器的标示;所述当前根控制器为顶层视图对应的根控制器。其中,每个视图的根控制器都有一个对应的切面代理。
作为一种可选的实施例,查找当前根控制器对应的切面代理之前,还包括:将各个视图的切面代理注册至预先创建的存储列表中。
具体的,当APP启动时,显示首页时,创建一个子线程,利用子线程创建一个存储列表,将切面代理注册至存储列表中,存储列表包括哈希表。
利用子线程创建一存储列表,将切面代理注册至存储列表,包括:
利用回调方法ExecuteLater回调注册函数,利用注册函数[[DYNetworkRequestManagerdefaultManager]registerAspectDelegate:delegate]回调所有功能页面对应的切面代理;
将切面代理注册至存储列表中;其中,delegate为所述切面代理。
值得注意的是,因每个根控制器对应一个切面代理,因此存储列表中还存储有根控制器与切面代理之间的对应关系。
作为一种可选的实施例,查找当前根控制器对应的切面代理,利用切面代理获得当前根控制器的标示,包括:
遍历预先创建的存储列表,基于当前根控制器查找对应的切面代理;存储列表中注册有各根控制器对应的切面代理以及根控制器与切面代理之间的对应关系;
利用切面代理调用标示获取函数获得当前根控制器的标示。
具体的,若顶层视图满足标示获取协议,遍历存储列表,通过切面代理获取函数NSArray*aspectDelegatesArray=[_aspectDelegatesallObjects]获取到所有的切面代理;
在所有的切面代理中,基于当前根控制器的ID,利用查找函数for(idaspectDelegate in aspectDelegatesArray)匹配出当前控制器ID对应的切面代理;
再利用切面代理调用标示获取函数NSInteger biz=[[vcperformSelector:@selector(getBiz)]integerValue]获得当前根控制器的标示。
S113,当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
当网络请求每一次发起时,为了确保网络请求可以被有效拦截,在网络请求发起之前、发起过程中及发起后均需要遍历上述创建的存储列表,查找对应的切面代理。具体的,获取功能页面顶层视图对应的根控制器,基于根控制器查找对应的切面代理。获取切面代理的方法与步骤S112中获取切面代理的方法完全相同,在此不再赘述。
获取到切面代理后,利用切面代理调用所述元数据类拦截所述网络请求。具体的,当向功能页面发起网络请求时,判断切面代理是否响应了元数据类中的请求添加数据方法requestShouldSend;若确定切面代理响应了请求添加数据方法requestShouldSend,则通过调用函数BOOL aspectSend=[aspectDelegaterequestShouldSend:request]调用请求添加数据方法requestShouldSend,并利用请求添加数据方法拦截网络请求。
S114,通过所述数据接口为所述网络请求添加所述标示。
拦截到网络请求后,利用切面代理,通过元数据类的数据接口为网络请求添加标示。
为了使得切面代理可以向元数据类中添加元数据,基于DYNetworkRequestProtocol协议文件对切面代理进行声明,使得切面代理可以利用回调函数(BOOL)requestShouldSend:(DYNetworkRequest*)request在元数据类中回调网络请求request,在requestShouldSend方法中为网络请求添加标示。
在requestShouldSend方法中为网络请求添加标示的具体实现如下:
通过函数回调函数NSInteger biz=[self getBiz]回调标示获取函数NSIntegerbiz=[[vc performSelector:@selector(getBiz)]integerValue]获得当前根控制器的标示;
通过请求头获取函数NSDictionary*requestHeader=request.requestHeader获取网络请求的请求头;
判断请求头是否存在,若确定网络请求的请求头存在,则基于数据接口利用标示添加函数request.requestHeader=@{@"biz":bizString}将标示biz添加至请求头中。
若确定所述网络请求的请求头不存在,利用请求头创建函数requestHeaderAdded=[requestHeader mutableCopy]创建当前请求头requestHeaderAdded;
基于数据接口利用标示添加函数将标示添加至当前请求头中;
将所述当前请求头赋值给网络请求。
这样即实现了对网络请求添加标示。
可以看出,本申请中只需对屏幕显示顶级视图的逻辑代码进行修改,一旦某个功能页面在屏幕上处于正在显示的状态时,可基于顶层视图获取到该功能页面的标示;当向功能页面发起网络请求时,利用切面代理调用元数据类拦截网络请求,并通过元数据类为网络请求添加标示;整个标示添加过程只涉及功能页面顶层视图的逻辑代码的修改,元数据类的创建及切面代理的调用切面代理等操作;无需修改功能页面中其他函数的大量代码,因此可以降低工作量,提高添加标示的效率。
基于同样的发明构思,本申请还提供一种基于顶层视图标记网络请求的装置,详见实施例二。
实施例二
本实施例提供一种基于顶层视图标记网络请求的装置,如图2所示,装置包括:创建单元21、第一获取单元22、第二获取单元23、拦截单元24及添加单元25;
创建单元21,用于创建元数据类,所述元数据类预留有数据接口;
第一获取单元22,用于针对每一个功能页面,获得当前显示的所述功能页面的顶层视图;
第二获取单元23,用于判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
拦截单元24,用于当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
添加单元25,用于通过所述数据接口为所述网络请求添加所述标示。
具体的,本实施例需要利用元数据类的方法为网络请求添加标示,因此需要创建元数据类,元数据类预留有数据接口,以能向元数据类中添加元数据。
作为一种可选的实施例,创建单元21用于:
基于一次性令牌创建唯一的静态变量;
创建静态的元数据以及所述元数据对应的类;
基于所述静态变量、所述元数据及所述元数据对应的类创建实例,并返回所述元数据。
为了确保在APP启动的过程都能够获取到待添加的标示,需要保持类一直常驻,在APP启动时,确保该类不能被销毁。因此,创建单元21创建一个元数据类DYNetworkAddMetadata,元数据类为内存中的一个常驻对象,元数据类的实例需要为一个唯一的实例,并且在应用程序APP启动过程中,该实例不能被销毁。具体的,基于一次性令牌onceToken创建了一个静态变量staticdispatch_once_t onceToken,定义一个静态的元数据networkAddMetadata及元数据对应的元数据类DYNetworkAddMetadata;基于静态变量、元数据及元数据对应的类,利用创建函数dispatch_once创建实例,代码实现如下:
dispatch_once(&onceToken,{
networkAddMetadata=[DYNetworkAddMetadata new];
});
最后返回元数据networkAddMetadata。
这样,利用onceToken在内存中只会创建一次的特性,可以确保在APP启动的时候只有唯一的实例。
为了提高标示添加的效率,本实施例针对每一个功能页面,获得当前显示的功能页面的顶层视图;也即,一旦某个功能页面正处于显示状态时(该页面正显示在屏幕上),然后基于顶层视图获得对应根控制器的标示。这样在为网络请求添加标示时,只需要修改顶层视图的逻辑代码,无需对功能页面的所有函数的代码进行修改,进而可降低工作量。
作为一种可选的实施例,第一获取单元22用于:
基于根控制器获取函数获得根控制器;
判断根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定根控制器并非是视图控制器、分屏控制器及标签栏控制器的任意一种,则确定根控制器对应的视图为顶层视图;
具体的,第一获取单元22首先基于根控制器获取函数[UIApplicationsharedApplication].delegate.windowrootViewController获取根控制器;此时获得的根控制器不一定是顶层视图对应的控制器,因此还需判断根控制器是否为导航控制器UINavigationController、分屏控制器UISplitViewController及标签栏控制器UITabBarController;如果根控制器为上述三种类型的任意一种,则说明根控制器不是顶级视图对应的控制器;如果根控制器并非为上述三种类型的任意一种,则确定根控制器对应的视图为顶层视图,此时直接获取根控制器对应的视图即可。
这里,若根控制器为导航控制器UINavigationController,需要利用top函数UIViewController*vc=[DYFindTopViewController topViewController]查找顶层视图对应的目标根控制器,再根据目标根控制器获得对应的顶层视图。
若根控制器为标签栏控制器UITabBarController,需要基于选择函数selectedViewController查找到目标根控制器,这个当前根控制器即为顶部控制器,再根据当前根控制器获得对应的顶层视图。
获取到顶层视图后,第二获取单元23用于利用判断函数vcrespondsToSelector:@selector(getBiz)判断顶层视图是否满足(遵守)标示获取协议getBiz,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得当前根控制器的标示;所述当前根控制器为顶层视图对应的根控制器。其中,每个视图的根控制器都有一个对应的切面代理。
作为一种可选的实施例,查找当前根控制器对应的切面代理之前,第二获取单元23还用于:将各个视图的切面代理注册至预先创建的存储列表中。
具体的,当APP启动时,显示首页时,创建一个子线程,利用子线程创建一个存储列表,将切面代理注册至存储列表中,存储列表包括哈希表。
利用子线程创建一存储列表,将切面代理注册至存储列表,包括:
利用回调方法ExecuteLater回调注册函数,利用注册函数[[DYNetworkRequestManagerdefaultManager]registerAspectDelegate:delegate]回调所有功能页面对应的切面代理;
将切面代理注册至存储列表中;其中,delegate为所述切面代理。
值得注意的是,因每个根控制器对应一个切面代理,因此存储列表中还存储有根控制器与切面代理之间的对应关系。
作为一种可选的实施例,第二获取单元23用于:
遍历预先创建的存储列表,基于当前根控制器查找对应的切面代理;存储列表中注册有各根控制器对应的切面代理以及根控制器与切面代理之间的对应关系;
利用切面代理调用标示获取函数获得当前根控制器的标示。
具体的,若顶层视图满足标示获取协议,遍历存储列表,通过切面代理获取函数NSArray*aspectDelegatesArray=[_aspectDelegatesallObjects]获取到所有的切面代理;
在所有的切面代理中,基于当前根控制器的ID,利用查找函数for(idaspectDelegate in aspectDelegatesArray)匹配出当前控制器ID对应的切面代理;
再利用切面代理调用标示获取函数NSInteger biz=[[vcperformSelector:@selector(getBiz)]integerValue]获得当前根控制器的标示。
当网络请求每一次发起时,为了确保网络请求可以被有效拦截,拦截单元24用于在网络请求发起之前、发起过程中及发起后均需要遍历上述创建的存储列表,查找对应的切面代理。具体的,获取功能页面顶层视图对应的根控制器,基于根控制器查找对应的切面代理。获取切面代理的方法与步骤S112中获取切面代理的方法完全相同,在此不再赘述。
获取到切面代理后,拦截单元24利用切面代理调用所述元数据类拦截所述网络请求。具体的,当向功能页面发起网络请求时,判断切面代理是否响应了元数据类中的请求添加数据方法requestShouldSend;若确定切面代理响应了请求添加数据方法requestShouldSend,则通过调用函数BOOL aspectSend=[aspectDelegaterequestShouldSend:request]调用请求添加数据方法requestShouldSend,并利用请求添加数据方法拦截网络请求。
拦截到网络请求后,添加单元25用于利用切面代理,通过元数据类的数据接口为网络请求添加标示。
为了使得切面代理可以向元数据类中添加元数据,基于DYNetworkRequestProtocol协议文件对切面代理进行声明,使得切面代理可以利用回调函数(BOOL)requestShouldSend:(DYNetworkRequest*)request在元数据类中回调网络请求request,在requestShouldSend方法中为网络请求添加标示。
在requestShouldSend方法中为网络请求添加标示的具体实现如下:
通过函数回调函数NSInteger biz=[self getBiz]回调标示获取函数NSIntegerbiz=[[vc performSelector:@selector(getBiz)]integerValue]获得当前根控制器的标示;
通过请求头获取函数NSDictionary*requestHeader=request.requestHeader获取网络请求的请求头;
判断请求头是否存在,若确定网络请求的请求头存在,则基于数据接口利用标示添加函数request.requestHeader=@{@"biz":bizString}将标示biz添加至请求头中。
若确定所述网络请求的请求头不存在,利用请求头创建函数requestHeaderAdded=[requestHeader mutableCopy]创建当前请求头requestHeaderAdded;
基于数据接口利用标示添加函数将标示添加至当前请求头中;
将所述当前请求头赋值给网络请求。
这样即实现了对网络请求添加标示。
可以看出,本申请中只需对屏幕显示顶级视图的逻辑代码进行修改,一旦某个功能页面在屏幕上处于正在显示的状态时,可基于顶层视图获取到该功能页面的标示;当向功能页面发起网络请求时,利用切面代理调用元数据类拦截网络请求,并通过元数据类为网络请求添加标示;整个标示添加过程只涉及功能页面顶层视图的逻辑代码的修改,元数据类的创建及切面代理的调用切面代理等操作;无需修改功能页面中其他函数的大量代码,因此可以降低工作量,提高添加标示的效率。
实施例三
本实施例提供一种计算机设备,如图3所示,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:
创建元数据类,所述元数据类预留有数据接口;
针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
通过所述数据接口为所述网络请求添加所述标示;其中,
所述获得所述功能页面的顶层视图,包括:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
在具体实施过程中,处理器320执行计算机程序311时,可以实现实施例一中任一实施方式。
由于本实施例所介绍的计算机设备为实施本申请实施例一中一种基于顶层视图标记网络请求的方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的计算机设备的具体实施方式以及其各种变化形式,所以在此对于该服务器如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的存储介质,详见实施例四。
实施例四
本实施例提供一种计算机可读存储介质400,如图4所示,其上存储有计算机程序411,该计算机程序411被处理器执行时实现以下步骤:
创建元数据类,所述元数据类预留有数据接口;
针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
通过所述数据接口为所述网络请求添加所述标示;其中,
所述获得所述功能页面的顶层视图,包括:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
在具体实施过程中,该计算机程序411被处理器执行时,可以实现实施例一中任一实施方式。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围,凡在本申请的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种基于顶层视图标记网络请求的方法,其特征在于,所述方法包括:
创建元数据类,所述元数据类预留有数据接口;
针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
通过所述数据接口为所述网络请求添加所述标示;其中,
所述获得所述功能页面的顶层视图,包括:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
2.如权利1所述的方法,其特征在于,所述创建元数据类包括:
基于一次性令牌创建唯一的静态变量;
创建静态的元数据以及所述元数据对应的类;
基于所述静态变量、所述元数据及所述元数据对应的类创建实例,并返回所述元数据。
3.如权利要求1所述的方法,其特征在于,所述查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示,包括:
遍历存储列表,基于所述当前根控制器的标示查找对应的切面代理;所述存储列表中注册有各根控制器对应的切面代理以及所述根控制器与所述切面代理之间的对应关系;
利用所述切面代理调用标示获取函数获得所述当前根控制器的标示。
4.如权利要求3所述的方法,其特征在于,所述遍历存储列表之前,还包括:
创建子线程,利用所述子线程创建存储列表;
利用回调方法ExecuteLater回调注册函数,利用注册函数[[DYNetworkRequestManagerdefaultManager]registerAspectDelegate:delegate]回调所有功能页面对应的切面代理;
将所述切面代理注册至所述存储列表中;其中,delegate为所述切面代理。
5.如权利要求1所述的方法,其特征在于,所述当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求,包括:
当向所述功能页面发起所述网络请求时,判断所述切面代理是否响应了所述元数据类中的请求添加数据方法;
若确定切面代理响应了所述请求添加数据方法,则利用所述请求添加数据方法拦截所述网络请求。
6.如权利要求1所述的方法,其特征在于,所述通过所述数据接口为所述网络请求添加所述标示,包括:
在所述元数据类中回调所述网络请求;
判断所述网络请求的请求头是否存在,若确定所述网络请求的请求头存在,则基于所述数据接口利用标示添加函数将所述标示添加至所述请求头中。
7.如权利要求6所述的方法,其特征在于,方法还包括:
若确定所述网络请求的请求头不存在,创建当前请求头;
基于所述数据接口利用标示添加函数将所述标示添加至所述当前请求头中;
将所述当前请求头赋值给所述网络请求。
8.一种基于顶层视图标记网络请求的装置,其特征在于,所述装置包括:
创建单元,用于创建元数据类,所述元数据类预留有数据接口;
第一获取单元,用于针对每个处于显示状态的功能页面,获得所述功能页面的顶层视图;
第二获取单元,用于判断所述顶层视图是否满足标示获取协议,若满足,则查找当前根控制器对应的切面代理,利用所述切面代理获得所述当前根控制器的标示;所述当前根控制器为所述顶层视图对应的根控制器;
拦截单元,用于当向所述功能页面发起网络请求时,利用所述切面代理调用所述元数据类拦截所述网络请求;
添加单元,用于通过所述数据接口为所述网络请求添加所述标示;其中,
所述第二获取单元具体用于:
基于根控制器获取函数获得所述功能页面的根控制器;
判断所述根控制器是否为导航控制器、分屏控制器及标签栏控制器中的任意一种;
若确定所述根控制器并非是所述视图控制器、所述分屏控制器及所述标签栏控制器的任意一种,则确定所述根控制器对应的视图为所述顶层视图;
获得所述当前根控制器对应的视图。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至7任一项所述的方法。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述的方法。
CN202010593299.1A 2020-06-26 2020-06-26 基于顶层视图标记网络请求的方法、装置、介质及设备 Pending CN113852647A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010593299.1A CN113852647A (zh) 2020-06-26 2020-06-26 基于顶层视图标记网络请求的方法、装置、介质及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010593299.1A CN113852647A (zh) 2020-06-26 2020-06-26 基于顶层视图标记网络请求的方法、装置、介质及设备

Publications (1)

Publication Number Publication Date
CN113852647A true CN113852647A (zh) 2021-12-28

Family

ID=78972297

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010593299.1A Pending CN113852647A (zh) 2020-06-26 2020-06-26 基于顶层视图标记网络请求的方法、装置、介质及设备

Country Status (1)

Country Link
CN (1) CN113852647A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100851746B1 (ko) * 2007-04-09 2008-08-11 (주) 엘지텔레콤 이동통신 단말기를 포함하는 마크업 페이지 송수신 시스템 및 그 제어방법
CN101611399A (zh) * 2007-02-16 2009-12-23 罗凡 网页、网站建模和生成
CN102932390A (zh) * 2011-08-11 2013-02-13 阿里巴巴集团控股有限公司 一种网络请求的处理方法和系统、网络服务提供装置
CN110347952A (zh) * 2019-07-18 2019-10-18 武汉斗鱼网络科技有限公司 一种打开直播间页面的方法、装置及计算机设备
CN111294377A (zh) * 2018-12-10 2020-06-16 武汉斗鱼网络科技有限公司 一种依赖关系的网络请求发送方法、终端装置及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101611399A (zh) * 2007-02-16 2009-12-23 罗凡 网页、网站建模和生成
KR100851746B1 (ko) * 2007-04-09 2008-08-11 (주) 엘지텔레콤 이동통신 단말기를 포함하는 마크업 페이지 송수신 시스템 및 그 제어방법
CN102932390A (zh) * 2011-08-11 2013-02-13 阿里巴巴集团控股有限公司 一种网络请求的处理方法和系统、网络服务提供装置
CN111294377A (zh) * 2018-12-10 2020-06-16 武汉斗鱼网络科技有限公司 一种依赖关系的网络请求发送方法、终端装置及存储介质
CN110347952A (zh) * 2019-07-18 2019-10-18 武汉斗鱼网络科技有限公司 一种打开直播间页面的方法、装置及计算机设备

Similar Documents

Publication Publication Date Title
CN107168726B (zh) 一种动态配置应用程序的方法和装置
CN110489391B (zh) 一种数据处理方法及相关设备
RU2008138700A (ru) Создание шаблонов отключенных ресурсов
US11082404B2 (en) RPC call interception
CN106202100B (zh) 页面的加载方法及装置
CN106713042B (zh) 一种确定网络拓扑方法及装置
CN107071007B (zh) 一种获取配置资源的方法、装置及客户端
US20170351510A1 (en) Method for recognizing application type
US11303532B2 (en) Method and system for detecting service quality of CDN system
CN110674427B (zh) 响应网页访问请求的方法、装置、设备及存储介质
CN106878311B (zh) Http报文的重写方法及装置
CN112905708A (zh) 基于SaaS系统的数据库操作方法及系统
CN113852647A (zh) 基于顶层视图标记网络请求的方法、装置、介质及设备
US9990369B2 (en) Method and apparatus for scanning files
CN113495723B (zh) 一种调用功能组件的方法、装置及存储介质
CN115686746A (zh) 访问方法、任务处理方法、计算设备及计算机存储介质
CN110297647B (zh) 一种前端工程更新npm包的方法及终端
CN111669358B (zh) 一种批量处理vrouter网络隔离空间的方法和装置
CN113849125A (zh) 一种cdn服务器磁盘读取的方法、装置及系统
CN109474712B (zh) 一种ip地理信息确定方法、服务器及存储介质
CN109299117B (zh) 数据请求的处理方法和装置、存储介质、处理器
CN107463374B (zh) 一种基于继承和关联自动推演的子集模型抽取方法及系统
US11847240B2 (en) System and method for matching, grouping and recommending computer security rules
US11921759B1 (en) Operating a distributed search index in a content delivery network
US9626228B1 (en) Synchronizing stateless process across multiple instances

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