BBASchemeDispatcher.h 9.1 KB
//
//  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