BBASMDispatchEvent.h
10.5 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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
//
// BBASMDispatchEvent.h
// SWAN
//
// Created by baidu on 2018/11/6.
// Copyright © 2018 baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
#pragma mark - 声明小程序内部事件
/**
* @brief 向master派发AppReady事件;
*
* @ param NSDictionary,{@"appConfig":(NSString),
* @"appPath":(NSString),
* @"extraData":(NSDictionary,可以为空),
* @"pageUrl":(NSString,可以为空),
* @"wvID":(NSNumber,NSInteger),
* @"root":(NSString,可以为空),
* @"devhook":(NSString,值为@"true"或@"false"),
* }
*/
extern NSString * const kBBASMEventAppReady;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onAppShow;
*
* @ param NSDictionary,{@"appId":(NSString,可以为空),
* @"cuid":(NSString,可以为空),
* @"mtjCuid":(NSString,可以为空),
* @"clkid":(NSString,可以为空),
* @"scene":(NSString,可以为空),
* @"extraData":(NSDictionary,可以为空),
* }
*/
extern NSString * const kBBASMEventOnAppShow;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onAppHide;
*
* @ param NSDictionary,{@"appId":(NSString,可以为空)}
*/
extern NSString * const kBBASMEventOnAppHide;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onClose;
*
* @ param NSDictionary,{@"appId":(NSString,可以为空)}
*/
extern NSString * const kBBASMEventOnClose;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onShow;
*
* @ param NSDictionary,{@"wvID":(NSString,页面id)}
*/
extern NSString * const kBBASMEventOnShow;
/**
* @brief 向slave派发PageReady事件;
*
* @ param NSDictionary,{@"pagePath":(NSString,可以为空),
* @"appPath":(NSString,可以为空),
* @"onReachBottomDistance":(NSString,可以为空),
* @"devhook":(NSString,@"true"或@"false"),
* @"root":(NSString,可以为空),
* }
*/
extern NSString * const kBBASMEventPageReady;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onHide;
*
* @ param NSDictionary,{@"wvID":(NSString,页面id)}
*/
extern NSString * const kBBASMEventOnHide;
/**
* @brief 小程序lifecycle事件,向master派发lcType:onUnload;
*
* @ param NSDictionary,{@"wvID":(NSString,页面id)}
*/
extern NSString * const kBBASMEventOnUnload;
/**
* @brief 向master、slave派发message事件;
*
* @ param NSDictionary,{@"message":(NSString,message)}
*/
extern NSString * const kBBASMEventMessage;
/**
* @brief 向master派发updateStatusChange事件;
*
* @ param NSDictionary,{@"eventType":(NSString,可以为空),
* @"data":(NSString,可选,可以为空),
* }
*/
extern NSString * const kBBASMEventUpdateStatusChange;
/**
* @brief 向master派发backtohome事件;
*
* @ param NSDictionary,{@"url":(NSString,可以为空),
* @"from":(NSString,可选,来源:menu),
* }
*/
extern NSString * const kBBASMEventBackToHome;
/**
* @brief 向master派发onForceRelaunch事件;
*
* @ param NSDictionary,{@"homePath":(NSString,首页路径),
* @"pagePath":(NSString,当前页面路径),
@“slaveId” :(NSString,当前页面的slaveId)
* }
*/
extern NSString * const kBBASMEventOnForceRelaunch;
/**
* @brief 向master派发onTabItemTap事件;
*
* @ param NSDictionary,{@"index":(NSString,可以为空),
* @"wvID":(NSString),
* @"pagePath":(NSString),
* @"text":(NSString),
* }
*/
extern NSString * const kBBASMEventOnTabItemTap;
/**
* @brief 向master派发onUserCaptureScreen事件(用户截屏);
*/
extern NSString * const kBBASMEventOnUserCaptureScreen;
/**
* @brief 向slave派发PullDownRefresh事件(下拉刷新);
*/
extern NSString * const kBBASMEventPullDownRefresh;
/**
* @brief 向master派发sharebtn事件(分享);
*
* @ param NSDictionary,{@"wvID":(NSString),
* @"webViewUrl":(NSString,可以为空),
* @"text":(NSString),
* }
*/
extern NSString * const kBBASMEventShareBtn;
/**
* @brief 向master派发route事件;
*
* @ param NSDictionary,{@"fromId":(NSString,可以为空),
* @"toId":(NSString,可以为空),
* @"routeType":(NSString,可以为空),
* @"toPage":(NSString,@"true"或@"false"),
* @"toTabIndex":(NSString,可以为空),
* }
*/
extern NSString * const kBBASMEventRoute;
/**
* @brief 向master和slave发送CollectTraceError事件,通知master和slaved向端上发送LaunchTrace和前端报错
*/
extern NSString * const kBBASMEventCollectTraceError;
/**
* @brief 向master派发预取事件,默认为preload,可配置支持预取时发prefetch;
*
* @ param NSDictionary,{@"state":(NSString),
* @"appPath":(NSString),
* @"appKey":(NSString),
* @"schema":(NSString),
* @"scene":(NSString,可以为空)
* }
*/
extern NSString * const kBBASMEventPreload;
/**
* @brief 向master派发预取事件,默认为preload,可配置支持预取时发prefetch;
*
* @ param NSDictionary,{@"state":(NSString),
* @"appPath":(NSString),
* @"appKey":(NSString),
* @"schema":(NSString),
* @"scene":(NSString,可以为空)
* }
*/
extern NSString * const kBBASMEventPrefetch;
/**
* @brief 向master派发favorStatusChange事件(关注状态发生改变时派发)
*
* @ param NSDictionary,{@"status":(NSString)}
*/
extern NSString * const kBBASMEventfavorStatusChange;
/**
* @brief 向master派发字体大小改变事件(用户设置或者新页面打开)
*
* @ param NSNumber,{@"level":(NSNumber)}
*/
extern NSString * const kBBASMEventFontSizeChange;
// 向master发送slaveReady事件,通知master某个slave页面已经ready了
extern NSString * const BBASMEventSlaveReady;
// SlaveDisposed事件,通知master某个slave页面已经销毁了
extern NSString * const BBASMEventSlaveDisposed;
// SlaveReady事件参数:slaveID
extern NSString * const BBASMEventParamSlaveID;
/// 二级 slave 预加载 topPages 资源事件
extern NSString *const BBASMSlaveEventTopPages;
/**
* @brief 向master派发FMP渲染完成事件
*
* @ param NSDictionary,{@"pageRoutePath":(NSString),
* @"wvID":(NSString)
* }
*/
extern NSString * const kBBASMEventFirstMeaningfulPainted;
// 将记录的稳定性数据传递给前端
extern NSString * const BBASMEventSendStabilityData;
/**
* @brief 向master派发点击胶囊关闭按钮事件;
*
* @ param NSDictionary,{@"wvID":(NSString)}
*/
extern NSString *const BBASMEventCloseBtn;
// 通知前端稳定性测试开关状态事件
extern NSString * const BBASMEventToggleStabilityTestStatus;
#pragma mark- 延迟派发的事件Key值
/**
* @brief 定义setTabBarStyle端能力的延迟调用的标识;
* 当调用setTabBarStyle端能力时,若tababrCVC还未加到小程序导航栈,该端能力调用失效,则延迟该端能力调用时机;
* 当tababrCVC入栈完成后则调用此键值对应的事件;
*/
extern NSString * const kBBASMPluginTabBarSetTabBarStyle;
/// PageReady事件中插件路径的关键字
extern NSString * const kBBASMPluginPath;
#pragma mark - Event参数key
extern NSString * const kBBASMEventParamKeyPageURL;
extern NSString * const kBBASMEventParamKeyPageRoutePath;
extern NSString * const kBBASMEventParamKeyWebviewID;
extern NSString * const kBBASMEventParamKeyNAUpScreenTime;
#pragma mark - 分发事件接口
@protocol BBASMEventInterface <NSObject>
@optional
/**
* @brief 向master或slave派发指定事件;
*
* @param jsCode NSString,js代码
* @param completionHandler block,js执行完成
*/
- (void)dispatchEventJS:(NSString *)jsCode
completionHandler:(void (^ _Nullable)(_Nullable id result,
NSError * _Nullable error))completionHandler;
/**
* @brief 向master或slave派发eventName事件;
*
* @param eventName NSString,事件名为以上声明kSwanEventXXX
* @param eventParam NSDictionary,派发事件传递的参数
* @param completionHandler block,js执行完成
*/
- (void)dispatchEventName:(NSString *)eventName
eventParam:(NSDictionary * _Nullable)eventParam
completionHandler:(void (^ _Nullable)(_Nullable id result,
NSError * _Nullable error))completionHandler;
/**
* @brief 向master派发相关小程序声明周期的事件;
*
* @param lifeCycleName NSString,事件名为:AppReady、onAppShow、onAppHide、onClose、onShow、onHide、OnUnload
* @param eventParam NSDictionary,派发事件传递的参数
* @param completionHandler block,js执行完成
*/
- (void)dispatchLifeCycleName:(NSString *)lifeCycleName
eventParam:(NSDictionary * _Nullable)eventParam
completionHandler:(void (^ _Nullable)(_Nullable id result,
NSError * _Nullable error))completionHandler;
@end
#pragma mark - 扩展NSObject实现BBASMEventInterface接口
@interface NSObject (BBASMDispatchEvent) <BBASMEventInterface>
@end
#pragma mark - BBASMDispatchEvent
/**
* @brief 延迟执行的事件block类型;
*
*/
typedef void(^EventBlock)(void);
@interface BBASMDispatchEvent : NSObject
/**
* @brief 存储延迟执行的事件;key:类名+方法名 value:要执行的代码块
*
*/
@property(nonatomic,strong)NSMutableDictionary *eventPools;
+ (instancetype)shareInstance;
/**
* @brief 向pool增加回调事件;
*
* @param eName NSString,类名_方法名 作为block的key
* @param block block,延迟执行的block
*/
- (void)addEventName:(NSString *)eName actionBlock:(EventBlock)block;
/**
* @brief 触发事件;
*
* @param eName NSString,类名_方法名 作为block的key
*/
- (void)excuteEventName:(NSString *)eName;
@end
NS_ASSUME_NONNULL_END