BBAAPIRequestManager.h
5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//
// BBAAPIRequestManager.h
// BBAPods
//
// Created by mengxiangping on 16/10/11.
// Modified by cairui01 on 18/3/15
// Copyright © 2016年 Baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BBABaseAPIRequest.h"
#import "BBAAPIRequestInterface.h"
#import "BBAAPIReqUtils.h"
#import "BBANetworkProbeScheduler.h"
NS_ASSUME_NONNULL_BEGIN
@class AFHTTPSessionManager;
// 网络质量监控监听器
@protocol BBANetworkQualityListener <NSObject>
/**
* 当有网络质量变化会回调此方法
* @param networkQuality 网络质量状态值,取值范围APIREQUEST_GOOD_NETWORK_QUALITY,APIREQUEST_BAD_NETWORK_QUALITY,APIREQUEST_OFFLINE_NETWORK_QUALITY,APIREQUEST_UNKNOWN_NETWORK_QUALITY
*/
- (void)didNetworkQualityChange: (int)networkQuality;
@end
@protocol BBAAPIRequestInterceptor<NSObject>
- (NSInteger)level;
- (BOOL)shouldIntercept;
- (NSMutableURLRequest *)handleRequestWithURLRequest: (NSMutableURLRequest *)originalURLRequest;
@end
/**
手百网络门面核心管理类
*/
@interface BBAAPIRequestManager : NSObject
/**
* 用于判断网络门面是否支持QUIC协议
*/
@property (atomic, assign, readonly) BOOL quicEnable;
/**
* 具备TurboNet能力的SessionConfig,订制需求高的选用这个config初始化Session
*/
@property (atomic, copy, readonly) NSURLSessionConfiguration * turboNetConfig __attribute__((deprecated("已废弃,请使用- (NSURLSessionConfiguration *)turbonetConfigWithConfig:(NSURLSessionConfiguration *)sessionConfiguration;")));
/**
* 如果有自定义子类,通过此方法注册。
* @param subClasses 子类列表,key 为 @(engineType),value 为类。
* 注意:
* 1. subClasses 中的类必须继承自 BBAAPIRequestManager 或其子类,engineType 不得与现有 engineType 重复;
* 2. 该方法的调用的时机应尽可能早,且必须在 +(instancetype)sharedInstance 方法之前调用
* 3. 子类需在.m 文件中 import BBAAPIRequestSubClassManager.h ,并按需求重载其中的方法,不要重载标明 Don't override 的方法。
*/
+ (void) registerSubClasses: (NSDictionary <NSNumber*, Class> *) subClasses;
+ (void) registerNetEngineType: (NetEngineType)type __deprecated; // TODO: 网络门面重构全量后,须移除
/**
* 手百网络门面全局单实例
* @return 单例实例
*/
+ (instancetype)sharedInstance;
+ (instancetype)sharedInstanceOfNewManager __attribute__((deprecated("已废弃,请使用+ (instancetype)sharedInstance")));; // TODO: 网络门面重构全量后,须移除
/**
* 手百网络门面共享Session,如果开启TurboNet,将支持TurboNet能力,订制需求不高的选用此接口
* @return NSURLSession实例
*/
- (NSURLSession*)sharedSession;
/**
ClientIP
*/
@property (nonatomic, strong, readonly) NSString * clientIP;
- (void)parseResponseHeaderForClientIP:(NSDictionary*)headers;
#pragma mark 对外方法
//添加请求入队
- (void) enqueueAPIRequest:(BBABaseAPIRequest *)apiRequest;
//取消队中的请求
- (void) cancelAPIRequest:(BBABaseAPIRequest *)apiRequest;
//添加请求入自定义队列
- (void) enqueueAPIRequest:(BBABaseAPIRequest *)apiRequest intoQueue: (NSOperationQueue *) operationQueue;
#pragma mark - 数据打点
- (void) statisticsBusinessMetricsAction:(NSURLSessionTask *)sessionTask metrics: (NSDictionary *) metrics;
- (BOOL)statisticsBusinessTimeOutCaseWithError:(NSError *)error;
@property (atomic, assign, readonly) BOOL isWeakNet;
@property (nonatomic, copy) NSArray<NSString *> *quicDomains;
@property (atomic, assign, readonly) APIRequestQuicStatus quicStatus;
// 用来获取网络质量,参考常量值APIREQUEST_GOOD_NETWORK_QUALITY,APIREQUEST_BAD_NETWORK_QUALITY,APIREQUEST_OFFLINE_NETWORK_QUALITY,APIREQUEST_UNKNOWN_NETWORK_QUALITY
@property (atomic, assign, readonly) int networkQuality;
@property (nonatomic, strong) NSMutableDictionary* pingErrCode;
@property (nonatomic, strong) NSMutableDictionary* dnsErrCode;
@property (nonatomic, strong, readonly) NSDictionary<NSString *, NSNumber *> *dnsSubErrCode;
@property (nonatomic, strong, readonly) NSString *localDnsServerIpList;
@property (nonatomic, strong, readonly) NSString *localDnsServerIpUsed;
/**
* 添加网络质量监听器
* @param listener 要添加的网络质量监听器
*/
- (void)addNetworkQualityListener:(id <BBANetworkQualityListener>_Nonnull)listener;
/**
* 移除网络质量监听器
* @param listener 要移除的网络质量监听器
*/
- (void)removeNetworkQualityListener:(id <BBANetworkQualityListener>_Nonnull)listener;
/**
* 异步对指定域名进行网络探测
* @param host 需要探测的域名
* @param completion 完成回调
*/
- (void)checkNetworkQualityOfHost:(NSString *)host completion:(NetQualityDiagnoseCallback)completion;
/**
* 供业务方注册TurboNet初始化完成回调
*(需要在TurboNet初始前注册,初始化需要时间,blk将在Turbo准备完成后调用一次)
*/
- (void)addUserTurboNetStartCallBack:(void(^_Nullable)(void))blk moduleName:(NSString*_Nullable)moduleName;
- (void)removeUserTurboNetStartCallBack:(NSString*_Nullable)moduleName;
- (NSURLSessionConfiguration *)turbonetConfigWithConfig:(NSURLSessionConfiguration *)sessionConfiguration;
/**
* 添加请求拦截器
* @param interceptor 要添加的请求拦截器
*/
- (void)addRequestInterceptor:(id <BBAAPIRequestInterceptor>)interceptor;
/**
* 移除请求拦截器
* @param interceptor 要移除的请求拦截器
*/
- (void)removeRequestInterceptor:(id <BBAAPIRequestInterceptor>_Nonnull)interceptor;
@end
NS_ASSUME_NONNULL_END