BBASMUtilitiesProtocol.h 19.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 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609
//
//  BBASMUtilitiesProtocol.h
//  SWAN
//
//  Created by baidu on 2018/10/29.
//  Copyright © 2018 baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <Pyramid/Pyramid.h>

NS_ASSUME_NONNULL_BEGIN

AliasService(BBASMUtilitiesProtocol, bba_MNPUtilities)

#define BBASMCheckStringParam(__varName__, __key__,__obj__)    \
BBASMCheckTypeParam(__varName__, __key__, NSString, CHECK_STRING_INVALID, __obj__)

#define BBASMCheckComponentIdParam(__varName__, __key__,__obj__)    \
BBASMCheckComponentId(__varName__, __key__, NSString, CHECK_STRING_INVALID, __obj__)

#define BBASMCheckDictionaryParam(__varName__, __key__, __obj__)    \
BBASMCheckTypeParam(__varName__, __key__, NSDictionary, CHECK_DICTIONARY_INVALID, __obj__)

#define BBASMCheckTypeParam(__varName__, __key__, __type__, __check_function__, __obj__)    \
__type__ *__varName__ = (__obj__)[__key__]; \
if (__check_function__(__varName__)) { \
    [dispatcher doCallbackWithStatus:kBBASDCallBackParamsErrorStatus \
                             message:kBBASDCallBackParamsErrorMSG \
                                data:nil]; \
    return; \
}

#define BBASMCheckComponentId(__varName__, __key__, __type__, __check_function__, __obj__)    \
__type__ *__varName__ = (__obj__)[@"componentId"];\
if (__check_function__(__varName__)) {\
    __varName__ = (__obj__)[__key__]; \
}\
if (__check_function__(__varName__)) { \
    [dispatcher doCallbackWithStatus:kBBASDCallBackParamsErrorStatus \
                             message:kBBASDCallBackParamsErrorMSG \
                                data:nil]; \
    return; \
}

#ifdef DEBUG
#define BBASMDebugLog(fmt, ...)        NSLog((fmt), ##__VA_ARGS__)
#else
#define BBASMDebugLog(...)
#endif

extern NSString * const kBBASMPageFavoriteModelCommand;
extern NSString * const kBBASMPageFavoriteModelIcon;
extern NSString * const kBBASMPageFavoriteModelAppName;
extern NSString * const kBBASMPageFavoriteModelURL;

extern NSString * const BBASM_VIDEO_LAUNCH_MONITOR_UBC;
extern NSString * const BBASM_VIDEO_PRE_INIT;
extern NSString * const BBASM_VIDEO_PRE_INIT_END;
extern NSString * const BBASM_VIDEO_OPEN;
extern NSString * const BBASM_VIDEO_NA_START;
extern NSString * const BBASM_VIDEO_INIT;
extern NSString * const BBASM_VIDEO_INIT_END;
extern NSString * const BBASM_VIDEO_WILL_PLAY;
extern NSString * const BBASM_VIDEO_PREPARE_TO_PLAY;
extern NSString * const BBASM_VIDEO_READY_TO_PLAY;
extern NSString * const BBASM_VIDEO_PLAY_SUCCESS;
extern NSString * const BBASM_VIDEO_PLAY_FAIL;
extern NSString * const BBASM_VIDEO_PLAY_CANCEL;
extern NSString * const BBASMWorkBoxID;
extern NSString * const BBASMSmartWidgetCenterID;

static NSString *const BBASMStableLogTypeAuth = @"cs_auth";
static NSString *const BBASMStableLogTypeCommon = @"cs_common";

@protocol BBASMRenderBaseViewControllerProtocol;
@protocol BBASMRenderBaseControllerUIProtocol;
@protocol BBASMComponentManagerProtocol;

typedef NS_ENUM(NSInteger, BBASMHistoryLableType) {
    BBASMHistoryLableTypeApp = 0,
    BBASMHistoryLableTypeGame
};

#define BBASMSlaveWebViewProtocols BBASMRenderBaseViewControllerProtocol, BBASMRenderBaseControllerUIProtocol, BBASMComponentManagerProtocol

@class BBASchemeDispatcher;
@protocol BBASMUtilitiesProtocol <NSObject>

+ (UIViewController<BBASMSlaveWebViewProtocols> *)getSlaveWebVCById:(NSString *)slaveId
                                                             appId:(NSString *)appId;
+ (UIViewController<BBASMSlaveWebViewProtocols> *)getAnySlaveWebVCWithSlaveID:(NSString *)slaveID
                                                                       appID:(NSString *)appID;
+ (UIViewController<BBASMSlaveWebViewProtocols> *)getSlaveWebVCByDispatcher:(BBASchemeDispatcher *)dispatcher;
///获取appid
+ (NSString *)currentAppID:(BBASchemeDispatcher *)dispatcher;
///获取name
+ (NSString *)currentAppName:(BBASchemeDispatcher *)dispatcher;
/// 获取当前的导航栈控制器
+ (UINavigationController *)getCurrentNavigationController;

//获取手百导航栈中在最上层的小程序的appKey
+ (NSString *)getTopBBASMAppKey;

/// 查找NavigationBar的shadowImageView
+ (nullable UIImageView *)findShadowImageViewForNavigationBar:(UIView *)view;

/// 获取Window上topVC的导航栈,如果是小程序,则是小程序所在的导航栈控制器,否则则是百度App的导航栈控制器
+ (UINavigationController *)getTopNavigationController;

///获取appKey
+ (nullable NSString *)currentAppKey:(BBASchemeDispatcher *)dispatcher;

///获取appKey
+ (nullable NSString *)appKeyByAppId:(NSString *)appId;

/**
 * kv数据库存储能力。
 * @param value 存储内容
 * @param key 存储内容的键值
 * @return 是否成功存储(非法value/key会return NO)
 */

+ (BOOL)saveValue:(NSData * _Nullable)value
           forKey:(NSString *_Nullable)key;
/**
 * kv数据库获取能力。
 * @param key 存储内容的键值
 * @return 存储内容(非法value会return nil)
 */
+ (NSData * _Nullable)getValueForKey:(NSString *_Nullable)key;

/**
 * kv数据库删除能力。
 * @param key 存储内容的键值
 * @return 存储内容(非法value会return NO)
 */
+ (BOOL)removeValueForKey:(NSString *_Nullable)key;

/*!
 * @brief 获取直播间监听对象
 *
 * @param     appId  小程序id
 * @param     castId  直播间id
 * @return    监听者
 */
+ (id)getMessageItemByAppId:(NSString *)appId castId:(NSString *)castId;

/*!
* @brief 添加直播间监听对象
*
* @param     item 监听者
* @param     appId  小程序id
* @param     castId  直播间id
*/
+ (void)addMessageItem:(id)item
                castId:(NSString *)castId
                 appId:(NSString *)appId;

/**
 判断字符串是否数字类型

 @param aString  aString
 @return YES 是数字
 */
+ (BOOL)isStringPureInt:(NSString *)aString;

/// 获取百度App的导航栈控制器
+ (UINavigationController *)getBDAppNavigationController;

/// 获取当前小程序所在的导航栈控制器
+ (UINavigationController *)getMNPNavigationController;

/// 获得导航栈中顶部的slaveWebVC或者gameVC
+ (UIViewController *)getNavigationTopViewController;

/// 获得导航栈中顶部的VC (包括slaveVC gameVC errorViewVC)
+ (UIViewController *)getUniversalTopViewControllerWithAppID:(NSString *)appId;

/*!
 *    @brief    判断当前的slaveid 对应的slaveViewController是否是首页
 *
 *    @param     slaveID slaveID
 *    @param     appID     appID
 *
 *    @return    YES 是首页
 */
+ (BOOL)isFirstSlaveViewController:(NSString *)slaveID
                             appid:(NSString *)appID;

///根据appID 获取调起场景值 appScene,互相调起时上一个来源小程序ID: pre_appId, 相互调起时上一个来源渠道码: pre_source 等信息
+ (NSDictionary *)appExtInfo:(NSString * _Nullable)appID;

///根据appID 获取appName
+ (NSString *)appName:(NSString *)appID;

/// 根据 url 获取小程序缓存图片数据
+ (UIImage *)findCachedImageWithURL:(NSString *)URL;

/**
 * @brief 协议头,小程序/小游戏端能力协议头,比如手百:baiduboxapp
 *        !!!:schemeName与hostName可能不同
 * @return NSString,协议头
 */
+ (NSString *)mnpScheme;

/**
 * @brief 判断当前APP是否是百度APP
 *
 * @return 返回是否是百度APP
 */
+ (BOOL)isBaiduBoxApp;

/// @brief 是否使用百度开源联盟登录
+ (BOOL)isUseUnionAccountLogin;

/**
 * @brief 增加打点数据给bbamnppyramid 使用
 *
 * @param actionID 打点的 id
 * @param dict 打点的数据结构
 * @param  appID 传 nil 取最上层的 appid
 */
+ (void)addEventWithActionID:(NSString *)actionID object:(NSDictionary *)dict appID:(NSString * _Nullable) appID;
/// 打点的公参
+ (NSMutableDictionary *)appStatisticsExtInfo:(NSString * _Nullable)appID;

/// ubc打点 小程序添加参数
+ (NSDictionary *)ubcStatisticsExtInfo:(NSString *)appID;

/**
 * @brief 获取当前页面信息,包括appKey,scheme 用于单页收藏和单页入历史
 *
 * @param from 打开的场景值(搜索,阅读)
 * @param appKey 当前页面所在的 appID
 * @return 单页收藏和入阅读历史所需 model 信息
 */
+ (NSDictionary *_Nullable)pageInfoModelWithScene:(NSString *)from appKey:(NSString * _Nullable)appKey URLPath:(NSString *_Nullable)URLPath;

/**
 * @brief 将一个网络urlstring转为url,其中做了一些编码和fix操作
 *        原来使用的urlfixer已经废弃,不建议调用,统一使用这个方法
 *
 * @param URLString urlString
 * @return url
 */
+ (NSURL *)URLWithURLString:(NSString *)URLString;

/**
 * @brief 获取宿主app的版本号,通过CFBundleVersion获取
 * @return 返回xxx.xxx.xxx.xxx格式的版本号
 */
+ (NSString *)hostVersion;

/**
 * @brief 获取宿主app的名字
 * @return 宿主app的名字
 */
+ (NSString *)hostName;

/**
 * @brief 检查APPID对应的小程序是否是活动状态
 *
 * @param appID 小程序ID
 * @return 是否是活动状态
 */
+ (BOOL) checkCurrentAppActiveStatus:(NSString *)appID;

// 公参接口
+ (NSString *)composeParameters;

// 服务端接口
+ (NSString *)rootServerHost;

/**
 * @brief 获取当前APP的的包名CFBundleIdentifier
 *
 * @return 返回包名
 */
+ (NSString *)packageName;

/**
 * @brief 获取当前小程序的的tmp路径
 *
 * @return 返回tmp路径
 */
+ (NSString *)curAppTmpPath;

/**
 * @brief 获取历史中所有小程序的appid数组
 *
 * @return 历史中所有小程序的appid数组
 */
+ (NSArray *)fetchAllHistoryAppIds;

/**
 * @brief block在主线程异步执行
 */
+ (void)excuteMainThreadBlock:(dispatch_block_t)block;

/**
 * @brief block在主线程同步执行
 */
+ (void)excuteSyncMainThreadBlock:(dispatch_block_t)block;

/**
 * @brief 打开预取时,是否可以显示popup UI(匹配appID)
*/
+ (BOOL)shouldPopupInPrefetchPolicyWithID:(NSString *)appID;

/**
* @brief 设置小程序TTS的播放状态
*
* @param ttsStatus TTS播放状态
* @param appID appID
*/
+ (void)setSmartWidgetTTSStatus:(BOOL)ttsStatus withAppID:(NSString *)appID;

/**
 * @brief 个性化地图json所在目录
 */
+ (NSString *)rootForCustomMapStylePath;

/**
 * @brief 获取xcx相关ab实验开关
 *
 * @return xcx相关ab实验开关
 */
+ (NSDictionary *)abTestSwitches;

/**
 * @brief 根据appId获取BBASMApp中导航栈栈顶的slaveWebVC, 默认包含 通过 ShowModalPage 添加的 SlaveVC
 *
 * @param appId 小程序ID
 * @return 小程序导航栈顶的slaveVC
 */
+ (UIViewController<BBASMRenderBaseViewControllerProtocol> *)getTopSlaveWebViewControllerByAppId:(NSString *)appId;

/**
 * @brief 根据appId获取BBASMApp中导航栈栈顶的slaveWebVC
 *
 * @param appId 小程序ID
 * @param includeSpecialSlaveVC 是否包含特殊的 slaveVC (例如是否包含全屏弹窗slaveVC)
 * @return 小程序导航栈顶的slaveVC
 */
+ (UIViewController<BBASMRenderBaseViewControllerProtocol> *)getTopSlaveWebViewControllerByAppId:(NSString *)appId
                                                                           includeSpecialSlaveVC:(BOOL)includeSpecialSlaveVC;

/**
 * @brief 从字典生成json字符串
 *
 * @param dictionary dict
 * @return jsonString
 */
+ (NSString *)jsonStringFromDictionary:(NSDictionary *)dictionary;

/*
 * @brief 获取extensionJS版本号
 * @param appId 小程序appId
 * @return 返回版本号
 */
+ (nullable NSString *)extensionJSVersion:(NSString *)appId;

/**
 * @brief 获取coreJs版本号
 *
 * @param appId appId
 * @return 返回版本号
 */
+ (nullable NSString *)coreJsVersion:(NSString *)appId;

/*
* @brief 获取小程序加载协议页面
*
* @param title 页面标题
* @param url 页面url
*/
+ (UIViewController *)getMNPSimpleWebVCWithTitle:(NSString *)title url:(NSString *)url;

/**
 * @brief master指针地址,logfile小程序标识
 *
 * @return 取master指针地址
 */
+ (NSString *)masterAddressWithAppId:(NSString *)appID;

/// 设置状态栏夜间模式
+ (void)setStatusbarDarkContent;

/// 设置VC夜间模式
+ (void)setViewControllerLightMode:(UIViewController *)viewController;

/// 获取小程序包的metaInfo信息
/// @param appID appID
+ (id)getPackageMetaInfo:(NSString *)appID;

/**
 * @brief 根据协议名字创建类
 * @param protocol 协议名字
 * @return 根据协议名字创建的类
 */
+ (Class)adapterServiceProtocol:(Protocol *)protocol;

/**
 * @brief 添加视频时长打点(1641)
 *
 * @param actionID 流式打点id
 * @param appID appID
 */
+ (void)addVideoEventWithActionID:(NSString *)actionID appID:(NSString *)appID;

/**
 * @brief 添加视频时长打点参数
 *
 * @param errCode 错误码
 * @param errMsg 错误信息
 * @param appID appID
 */
+ (void)addVideoEventErrCode:(NSString *)errCode errMsg:(NSString *)errMsg appID:(NSString *)appID;

/**
 * @brief appID 小程序appID
 *
 * @return 顶层slave页面的pageUrl
 */
+ (NSString *)getTopSlavePagePathWithAppID:(NSString *)appID;

/// 当前设备是否是横屏
+ (BOOL)isDeviceLandscape;

/**
 * @brief 统计前端打点信息
 * @param appId appId
 * @param data 通过ubcStatisticEvent传递的数据
 */
+ (void)updateStatistic:(NSString *)appId withData:(NSDictionary *)data;

/// 打开权限设置页面
/// @param appID 小*程*序ID
+ (void)openAuthSettingPage:(NSString *)appID;

/// 菜单点击事件打点
/// @param value 添加value日志
/// @param extDic 添加ext字段下的extDic
+ (void)pannelItemClickLogWithValue:(NSString *)value
                             extDic:(nullable NSDictionary *)extDic;

/// 菜单show事件打点
/// @param value 添加value日志
/// @param contentExtDic 打点的content字段中添加扩展字段和值
/// @param extDic 添加ext字段下的extDic
+ (void)pannelItemShowLogWithValue:(NSString *)value
                     contentExtDic:(nullable NSDictionary *)contentExtDic
                            extDic:(nullable NSDictionary *)extDic;

/**
 * @brief 自定义浏览量数据统计
 * @param statisticsParams 用于自定义统计的参数
 * @param isRecordTrace 是否记录到 tracelog
 */
+ (void)customPVStatistics:(NSDictionary *)statisticsParams
             isRecordTrace:(BOOL)isRecordTrace;

/// @brief 自定义统计打点
/// @param eventId 统计点号
/// @param statisticsParams 统计数据
+ (void)customPVStatisticsID:(NSString *)eventId
            statisticsParams:(NSDictionary *)statisticsParams;

/// @brief 当前xcx是否添加cookie
/// @param appId xcx标识
/// @return 返回当前xcx是否应该添加cookie
+ (BOOL)shouldUseCookieStorageWithAppId:(NSString *)appId;

/// @brief 获取当前xcxurl下的cookie信息
/// @param url 链接url
/// @param appId xcx标识
/// @return 返回cookie
+ (NSString *)cookieForUrl:(NSString *)url withAppId:(NSString *)appId;

/// 磁盘等级发生变化通知,当磁盘状态为相对不足或严重不足时,会触发进入后台强制清理包缓存逻辑
/// level 0 正常, 1 相对不足, 2 严重不足;
/// @param diskUsageLevel 磁盘状态变化后的level, 磁盘等级会影响包缓存清理策略;
+ (void)diskUsageLevelDidChanged:(NSInteger)diskUsageLevel;

/**
 * @brief 获取指定小程序的appInfo
 *
 * @param appID 小程序appID
 */
+ (nullable NSDictionary *)getAppInfo:(NSString *)appID;

/// 获取当前的key window
+ (UIWindow *)applicationWindow;

/// 获取paginfo xcx 的小程序名称、小程序logo,页面title、页面描述、页面路径
/// paramDic = {"appName" : "tieba","iconUrl" : "http://xxxx",appDesc:"xcx",title:"title",pageUrl:"pageUrl"}
/// @param complete 结果回调
+ (void)getPageInfoWithComplete:(void(^)(NSDictionary *paramDic))complete;

///  获取最上面的vc 上面的renderview
/// @param appID appID
+ (UIView *)getTopSlaveRenderViewByAppID:(NSString *)appID;

/**
 * @brief 统计sla稳定性数据
 * @param requestUrl 接口
 * @param isPVLog 是否是调起总量PV(分母)
 * @param response 接口返回值
 * @param reponseStausCode code值
 * @param error 接口错误
 * @param appId appId
 * @param type 接口对应打点日志中的type
 */
+ (void)recordStableLogWithRequestUrl:(nullable NSString *)requestUrl
                              isPVLog:(BOOL)isPVLog
                             response:(nullable NSDictionary *)response
                     reponseStausCode:(NSInteger)reponseStausCode
                                error:(nullable NSError *)error
                                appId:(nullable NSString *)appId
                                 type:(nullable NSString *)type;

/// @brief 根据 appID 获取当前内存中小程序的 launchid(调起时生成的唯一标识)
/// @param appID appID
/// @return launchID 调起时生成的唯一标识
+ (nullable NSString *)launchIDWithAppID:(NSString *)appID;

/// @brief 根据 appID 获取当前内存中小程序的 launchid(调起时生成的唯一标识),并作为url参数拼接到srcUrl中,用于日志串联
/// @param appID appID
/// @return srcUrl 请求的 url
+ (NSString *)appendUrlParamLaunchIDWithAppID:(NSString *)appID forSrcUrl:(NSString *)srcUrl;

/**
 * Get int value from a version string. Only support 3-digit(or less than 3-digit) of every version.
 *
 * @example "1.21.3" -> 1021003
 *          "0.2.4" -> 2004
 *
 * @param version A string of version.
 * @return A NSNumber value that represent the version.
 */
+ (NSNumber *)getIntValueOfVerion:(NSString *)version;

/**
 * @brief cloudUrl批量转HttpUrl
 *
 * @param cloudUrls cloudUrl数组
 * @param appID appID
 * @param complete 转换成功后回调HttpUrl数组(顺序不变)
 */
+ (void)cloudUrlsToHttpUrls:(NSArray *)cloudUrls
                      appID:(NSString *)appID
                   complete:(void (^)(NSArray * _Nullable httpUrls))complete;

/**
 * @brief 当前页面是否被收藏
 *
 * @param appID appID
 * @return 是否被收藏
 */
+ (BOOL)isCurrentPageFavoredWithAppID:(NSString *)appID;

/// @brief 获取 appID 对应 xcx 最近一次 onPrefetch 事件的 pageUrl
/// @param appID appID
/// @return refetch event referer PageUrl
+ (nullable NSString *)getOnPrefetchPageUrlWithAppID:(NSString *)appID;

/// @brief 更新appID 对应 xcx 的onPrefetch 事件的 pageUrl
/// @param pageUrl 事件的 pageUrl (可为nil,若为 nil 则是清空该字段)
/// @param appID appID
+ (void)updateOnPrefetchPageUrl:(nullable NSString *)pageUrl withAppID:(NSString *)appID;

/// 增加小程序级别的管理对象
/// @param appID 小程序ID
/// @param managerObj 管理对象
+ (void)bindManagerToAppExtension:(NSObject *)managerObj withAppID:(NSString *)appID;

/// 查找绑定在该小程序上的管理对象
/// @param className 管理对象类型
/// @param appID 小程序ID
/// @return 查找到的绑定在该小*程*序上的管理对象,没查到时返回nil
+ (nullable NSObject *)findManagerFromAppExtension:(NSString *)className withAppID:(NSString *)appID;

/// @brief 向master派发eventName事件
/// @param appID 小程序ID
/// @param eventName NSString,事件名为以上声明kSwanEventXXX
/// @param eventParam NSDictionary,派发事件传递的参数
/// @param completionHandler block,js执行完成
+ (void)dispatchToMasterAppID:(NSString *)appID
                    eventName:(NSString *)eventName
                   eventParam:(NSDictionary * _Nullable)eventParam
            completionHandler:(void (^ _Nullable)(_Nullable id result, NSError * _Nullable error))completionHandler;

/// 获取宿主当前隐私授权的状态 0:用户尚未作出选择 1:用户已授权隐私协议 2:仅浏览模式
+ (NSString *)getCurrentPrivacyMode;

/// ubc和ceres双打函数
/// @param appID appid
/// @param ceresID ceresID
/// @param ubcID ubcID
/// @param params 打点参数
+ (void)addEventToCeresAndUBCWithAppID:(NSString *)appID
                               ceresID:(NSString *)ceresID
                                 ubcID:(NSString *)ubcID
                                params:(NSDictionary *)params;

@end

NS_ASSUME_NONNULL_END