BBASchemeDispatcher.h
9.1 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
//
// BBASchemeDispatcher.h
// BBASchemeDispatcher
//
// Created by zhangshuaibing on 2016/11/29.
// Copyright © 2016年 zhangshuaibing. All rights reserved.
//
/******************************************************************************/
// 描述:BBASchemeDispatcher(组件命名简称SD)调起协议模块,集成插件注册、调起协议解析与分发;
// 场景:外部调起&H5下的调起协议解析与分发能力;
// 用法:工程启动注册appid&schemes;
// 实现modlue对应plugin,plugin继承自BBASDPluginBase,并实现+load方法完成插件注册
// 调起场景下,创建BBASchemeDispatcher实例,并执行dispatch进行分发。
/******************************************************************************/
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
#import "BBADispatcherBase.h"
#import "BBASDPluginBase.h"
#import "BBASDPluginProtocol.h"
#import "BBASDDefine.h"
#import "BDPSDError.h"
// @class - BBASchemeDispatcher
// @brief - 调起协议分发器
@interface BBASchemeDispatcher : BBADispatcherBase
/**
@abstract 注册配置项:工程启动时调用,用于追加新的scheme头, 默认配置为BaiduService-Info.plist的 APP_NAME
@param schemes 追加支持的调起协议scheme集合
**/
+ (void)registerSupportSchemes:(NSArray *)schemes;
/**
@abstract 兼容老版协议(无action&无module)所有协议走自定义分发
@param moduleName 自定义module名
@param actionList 相应module下action集合
**/
+ (void)registerModuleName:(NSString *)moduleName
actionList:(NSArray *)actionList;
/**
@abstract 重定向协议(原Module、Action分发到新的toModule、toAction;满足组件化逻辑各有归属的需要)
@param module 协议中的Module
@param action 协议中的action(兼容旧协议,可以为空)
@param toModule 分发目标Module
@param toAction 分发目标action
**/
+ (void)registerRedirectModule:(NSString *)module
action:(NSString *)action
toModule:(NSString *)toModule
toAction:(NSString *)toAction;
/**
@abstract App启动时注册端能力插件名, (注册插件以className去掉前缀后缀的string为Key,不会初始化插件类)
@param className 需要注册的端能力类
@result 插件已存在返回NO,插件未存在并成功注册返回YES
**/
+ (BOOL)registerPluginWithClassName:(NSString *)className;
/**
@abstract App启动时注册端能力插件名, 以传入的module为Key (如果module为空,以className去掉前缀后缀的string为Key),不会初始化插件类
@param className 需要注册的端能力类
@param module 端能力调起对应的module参数
@result 插件已存在返回NO,插件未存在并成功注册返回YES
**/
+ (BOOL)registerPluginWithClassName:(NSString *)className module:(NSString *)module;
/**
@abstract 插件前后缀注册,如模块名为Account,拼接前后缀为类名BBAAccountPlugin
@param prefix 注册类名前缀,如BBA
@param suffix 注册类名前缀,如Plugin
**/
+ (void)registerPluginPrefix:(NSString *)prefix
suffix:(NSString *)suffix;
/**
@abstract 注册block,用于捕捉分发时候的dispatcher
@param dispatcherHandler block方法
**/
+ (void)registerDispatcherBlock:(DispatcherHandler)dispatcherHandler;
/**
@abstract 注册block,用于打点
@param ubcHandler 打点方法
**/
+ (void)registerUBCBlock:(SDUBCHandler)ubcHandler;
/**
@abstract 注册block,用于鉴权,判断scheme是否可以调起
@param sdGuardHandler 鉴权方法
**/
+ (void)registerSDGuardBlock:(SDGuardHandler)sdGuardHandler;
/**
@abstract 部分业务有自己的解析逻辑,需要在解析完成后分发之前执行自己的解析逻辑
@param parseFinishHandler 解析完成后分发之前需要执行的逻辑
@param hostStr 在url的host为hostStr时执行block
**/
+ (void)registerParseFinishHandler:(SDParseFinishHandler)parseFinishHandler forHostString:(NSString *)hostStr;
/**
@abstract 判断是否支持当前scheme调起
@param scheme scheme名称
@result bool
**/
+ (BOOL)isSupportScheme:(NSString *)scheme;
/**
@abstract 校验版本是否支持,是否有对应的 module action 承接端能力
@result bool
**/
- (BOOL)isSupportModuleActionDispatcher;
/**
@abstract 调起分发器初始化.
@param aURL 调起协议URL.
@param sourceURL 调起源域名.
@param sourceApplication 调起来源对象.
@result An initialized 调起分发器实例.
**/
- (instancetype)initWithURL:(NSURL *)aURL
sourceURL:(NSURL *)sourceURL
sourceApplication:(id)sourceApplication;
/**
@method dispatch
@abstract 调起分发器分发.
**/
- (void)dispatch;
/**
@method dispatch
@abstract 调起分发器分发.
@param completionHandler 回调方法,返回调起执行信息.
**/
- (void)dispatchWithCompletionHandler:(void (^)(NSDictionary *response))completionHandler;
/**
@abstract 调起一级回调统一回调入口 !!!!(9.1后统一从此处回调)
@param status 状态码.(0~999为调起协议保留号段,保留状态码见BBADispatcherBase.h,业务自定义状态码自1000起)
@param message 错误详细信息.(保留状态码对应错误信息见BBADispatcherBase.h)
@param data 自定义回调字典,统一封装到“data”字段下,由业务自定义.
@result 回调成功返回YES
**/
- (BOOL)doCallbackWithStatus:(NSString *)status
message:(NSString *)message
data:(NSDictionary *)data;
/**
@abstract 调起一级回调统一回调入口 !!!!(9.1后统一从此处回调)
@param status 状态码.(0~999为调起协议保留号段,保留状态码见BBADispatcherBase.h,业务自定义状态码自1000起)
@param message 错误详细信息.(保留状态码对应错误信息见BBADispatcherBase.h)
@param data 自定义回调字典,统一封装到“data”字段下,由业务自定义.
@param completionHandler 执行js的回调
@result 回调成功返回YES
**/
- (BOOL)doCallbackWithStatus:(NSString *)status
message:(NSString *)message
data:(NSDictionary *)data
completionHandler:(void (^)(id result,
NSError * error))completionHandler;
/**
@abstract 调起一级回调统一回调入口 默认的成功实现 "status":"0", "message":"调起成功";
@param data 回调的data参数
**/
- (void)doCallbackForDefaultSuccess:(NSDictionary *)data;
/**
@abstract 调起一级回调统一回调入口 参数错误的回调 "status":"202", "message":"解析失败,请检查参数是否正确";
@param data 回调的data参数
**/
- (void)doCallbackForDefaultParmasFail:(NSDictionary *)data;
/**
@abstract 业务二级回调统一回调入口 !!!!(9.1后统一从此处回调)
@param method 二级参数下回调js方法
@param data 自定义回调字典,统一封装到“data”字段下,由业务自定义.
@result 回调成功返回YES
**/
- (BOOL)doCallbackWithJSMethod:(NSString *)method data:(id)data;
/**
@abstract 业务二级回调统一回调入口,同步操作,不进行异步操作
@param method 二级参数下回调js方法
@param data 自定义回调字典,统一封装到“data”字段下,由业务自定义.
@result 回调成功返回YES
**/
- (BOOL)syncDoCallbackWithJSMethod:(NSString *)method data:(id)data;
/**
@method dispatchCallbackWithParams:
@abstract 用于执行Callback js回调 目前仅browser使用, 禁止业务使用
@result 回调成功返回YES
**/
- (BOOL)dispatchCallbackWithParams:(NSDictionary *)paramDic __attribute__((deprecated("废弃 请使用 doCallbackWithStatus")));
/**
@method doCallbackWithParams:
@abstract 用于格式固定的成功回调,当callbackBlock非空执行NA回调,否则执行callback js回调
@result 回调成功返回YES
**/
- (BOOL)doCallbackWithParams:(NSDictionary *)paramDic __attribute__((deprecated("废弃 请使用 doCallbackWithStatus")));
/**
@method doSuccessCallbackWithParamDict:
@abstract 用于格式固定的成功回调,当callbackBlock非空执行NA回调,否则执行successCallback js回调
@result 回调成功返回YES
**/
- (BOOL)doSuccessCallbackWithParamDict:(NSDictionary *)paramDict __attribute__((deprecated("废弃 请使用 doCallbackWithStatus")));
/**
@method doFailCallbackWithErrorCode:
@abstract 用于格式固定的失败回调,当callbackBlock非空执行NA回调,否则执行failCallback js回调
@result 回调成功返回YES
**/
- (BOOL)doFailCallbackWithErrorCode:(NSUInteger)errorCode
paramDict:(NSDictionary *)paramDict __attribute__((deprecated("废弃 请使用 doCallbackWithStatus")));
@end