BBADispatcherBase.h 6.6 KB
//
//  BBADispatcherBase.h
//  BaiduBoxAppDemo
//
//  Created by zhangshuaibing on 2016/11/30.
//  Copyright © 2016年 zhangshuaibing. All rights reserved.
//

/******************************************************************************/
// 描述:调起模块Model基类,用于管理承载每个调起协议
// 场景:框内/框外调起协议自动解析成BBASchemeDispatcher实例;
// 用法:调起后自动生成BBASchemeDispatcher实例,BBASchemeDispatcher实例根据model中的参数分发处理
/******************************************************************************/

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

#define kBBASDCallBackSuccessStatus             @"0"
#define kBBASDCallBackSuccessMSG                @"调起成功"

#define kBBASDCallBackVersionErrorStatus        @"101"
#define kBBASDCallBackVersionErrorMSG           @"调起协议版本不支持"

#define kBBASDCallBackResolutionErrorStatus     @"201"
#define kBBASDCallBackResolutionErrorMSG        @"解析失败,请检查调起协议是否合法"
#define kBBASDCallBackParamsErrorStatus         @"202"
#define kBBASDCallBackParamsErrorMSG            @"解析失败,请检查参数是否正确"


#define kBBASDCallBackModuleErrorStatus         @"301"
#define kBBASDCallBackModuleErrorMSG            @"找不到调起协议对应端能力模块"
#define kBBASDCallBackMethodErrorStatus         @"302"
#define kBBASDCallBackMethodErrorMSG            @"找不到调起协议对应端能力方法"

#define kBBASDCallBackGuardErrorStatus          @"401"
#define kBBASDCallBackGuardErrorMSG             @"安全校验失败"

#define kBBASDCallBackAccessControlErrorStatus  @"402"
#define kBBASDCallBackAccessControlErrorMSG     @"访问控制校验失败"

/// 获取指定status获取对应的状态码自身对应的字符串信息
#define BBADispatchStatusInfo(status)   [BBADispatcherBase statusInfoWithStatus:status]

/// 获取指定status获取对应的状态码的详细描述
#define BBADispatchMessageInfo(status)   [BBADispatcherBase messageInfoWithStatus:status]

/**
 *  command执行结果状态码
 */
typedef NS_ENUM(NSInteger, BBADispatchResultStatus) {
    BBADispatchResultStatus_Unkown = 0,              //!< 未知
    BBADispatchResultStatus_Success = 1,             //!< 成功
    BBADispatchResultStatus_Error_Version = 2,       //!< 版本不支持
    BBADispatchResultStatus_Error_Resolution = 3,    //!< 调起协议不合法
    BBADispatchResultStatus_Error_Params = 4,        //!< 参数有误
    BBADispatchResultStatus_Error_Module = 5,        //!< 找不到对应的模块
    BBADispatchResultStatus_Error_Method = 6,        //!< 找不到对应的方法
    BBADispatchResultStatus_Error_Guard = 7,         //!< 安全校验失败
};

// 宏定义
typedef void(^SDCallbackBlock)(BOOL success, NSDictionary *response);


// @class - BBADispatcherBase
// @brief - 调起协议Model类
@interface BBADispatcherBase : NSObject

// 属性声明
@property (nonatomic, copy) NSURL *commandURL;      // 调起协议URL
// - 协议解析 ****
@property (nonatomic, copy) NSString *scheme;       // 调起协议scheme
@property (nonatomic, copy) NSString *module;       // 调起协议Module
@property (nonatomic, copy) NSString *action;       // 调起协议Action

@property (nonatomic, copy) NSString *next;         // 调起序列下级调起
@property (nonatomic, copy) NSString *delayTime;    // 调起序列下级调起的延迟时间
@property (nonatomic, copy) NSString *oauthType;    // 第三方申请鉴权入口type
@property (nonatomic, copy) NSString *backup;       // 调起序列主协议失败backup协议
@property (nonatomic, strong) BBADispatcherBase *backupDispatcher; // backup scheme 执行时实例的SchemeDispatcher  degrade

@property (nonatomic, assign) BOOL callFromOutter;  // 是否为外部调起
@property (nonatomic, copy) NSString *upgrade;      // 调起协议upgrade,是否强制升级

@property (nonatomic, readonly) BOOL needCheckGuard;  // 是否需要鉴权,默认 YES,注:性能优化,添加的属性。

// - 环境变量
@property (nonatomic, copy)   NSDictionary *userInfo;   // 调起附加信息
@property (nonatomic, copy)   NSString *sourceApplication;  // 调起来源应用
@property (nonatomic, weak)   id sourceObject;          // 调起来源对象,HSWebCore对象。!!!!DEPRECATED,废弃,禁止新增引用
@property (nonatomic, weak)   id sourceWebView;         //WKWebView对象
@property (nonatomic, weak)   UIViewController  *sourceViewController;         //发起调起协议的VC,一般为Web框架!!!!DEPRECATED,废弃,禁止新增引用
@property (nonatomic, copy)   NSString *sourceAppID;    // appid合成Appstore下载地址
@property (nonatomic, copy)   NSURL *sourceURL;     // 调起来源URL

@property (nonatomic, strong) NSDate *startDate;    // 端能力解析开始时间

// - 参数
@property (nonatomic, strong) NSDictionary *paramsDict;     // 调起协议跳转参数,所有query参数
@property (nonatomic, strong) NSDictionary *optionsDict;    // 调起协议二级参数字典 "params=?"

// Web JS 回调
@property (nonatomic, copy) NSString *callback;     // 调起协议callback,8.2版本新协议更新为此字段
@property (nonatomic, copy) NSString *successCallback;  // 废弃 请使用 callback实现js回调
@property (nonatomic, copy) NSString *failCallback;     // 废弃 请使用 callback实现js回调

// Native 回调,用于Native调起
@property (nonatomic, copy) SDCallbackBlock callbackBlock;
@property (nonatomic, copy) NSDictionary *callBackInfo;            // 调起日志


// 是否为新版本端能力 v8.2之后新增
// baiduboxapp://v5/browser/setSearchid?upgrade=0&searchid=0
// baiduboxapp://browser/setSearchid?upgrade=0&searchid=0
@property (nonatomic, assign, readonly) BOOL isStandardScheme;

/**
 @method initWithURL:sourceApplication:adjustAppStatus:callFromOutter:sourceObject:
 @abstract          调起分发器初始化.
 @param commandURL  调起协议URL.
 @result An initialized NSURLRequest.
 **/
- (instancetype)initWitheCommandURL:(NSURL *)commandURL;


/**
 分发器初始化方法(内部调用的initWitheCommandURL)
 当schema为非法string时,返回为nil
 
 @param schema 调起协议URL string
 @return Dispatcher实例(可能为nil)
 */
+ (instancetype)dispatcherWithString:(NSString *)schema;

/**
 *  根据指定status获取对应的状态码自身对应的字符串信息
 */
+ (NSString *)statusInfoWithStatus:(BBADispatchResultStatus)status;

/**
 *  根据指定status获取对应的状态码的详细描述
 */
+ (NSString *)messageInfoWithStatus:(BBADispatchResultStatus)status;


@end