BBADispatcherBase.h
6.6 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
//
// 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