BBASMAuthorizeProtocol.h
19.9 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
//
// BBASMAuthorizeProtocol.h
// SWAN
//
// Created by baidu on 2018/10/25.
// Copyright © 2018 baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <Pyramid/Pyramid.h>
#import "BBASMAuthorizeAdapterProtocol.h"
#import "BBASMPluginDef.h"
#define BBASMC_AuthorizeScopeDidChangeNotification BBASM_UNCONFUSED_STR_METHOD(@"U1dBTkF1dGhvcml6ZVNjb3BlRGlkQ2hhbmdlTm90aWZpY2F0aW9u") //BBASMAuthorizeScopeDidChangeNotification //用户权限状态修改
typedef NS_ENUM(NSUInteger, BBASMAuthorizeError) {
BBASMAuthorizeErrorUserDeny, //!< 用户拒绝
BBASMAuthorizeErrorNetwork, //!< 网络错误
BBASMAuthorizeErrorSystemDeny, //!< 系统拒绝
BBASMAuthorizeErrorInternal, //!< 内部错误,比如服务器参数错误异常等
BBASMAuthorizeErrorBduss, //!< 未登录错误
BBASMAuthorizeErrorNoData //!< 获取数据失败
};
/**
* 授权状态
*/
typedef NS_ENUM(NSUInteger, BBASMAuthorizeScopeStatus) {
BBASMAuthorizeScopeStatusAllow, //!< 成功
BBASMAuthorizeScopeStatusTryLoginSucceed, //!< 未登录状态,变更登录状态成功
BBASMAuthorizeScopeStatusTryLoginError, //!< 未登录状态,变更登录状态失败
BBASMAuthorizeScopeStatusUserDenyError, //!< 用户拒绝
BBASMAuthorizeScopeStatusNetworkError, //!< 网络错误
BBASMAuthorizeScopeStatusNoDataError, //!<获取数据失败
BBASMAuthorizeScopeStatusUnHandle, //!< 未处理:目前是在后台时需要弹框,不弹框返回该值
BBASMAuthorizeScopeStatusSystemDenyError, //!< 系统拒绝
BBASMAuthorizeScopeStatusInternalError //!< 内部错误
};
typedef NS_ENUM(NSUInteger, BBASMLoginSceneType) {
BBASMLoginSceneTypeLoginApi,
BBASMLoginSceneTypeLoginButton,
BBASMLoginSceneTypeCheckSession,
BBASMLoginSceneTypeGetLoginCode,
BBASMLoginSceneTypeGetPhoneNumberApi,
BBASMLoginSceneTypeGetPhoneNumberButton,
BBASMLoginSceneTypeGetUserInfoApi,
BBASMLoginSceneTypeGetUserInfoButton
};
typedef NS_ENUM(NSUInteger, BBASMAuthorizeProcessType) {
BBASMAuthorizeProcessTypeCreate, // 起点
BBASMAuthorizeProcessTypeLogin, // pass 登录
BBASMAuthorizeProcessTypeGetLoginCodeStart, // 获取loginCode起点
BBASMAuthorizeProcessTypeGetStoken, // 获取stoken
BBASMAuthorizeProcessTypeRequestLoginCode, // 请求loginCode
BBASMAuthorizeProcessTypeRequestModifyScope, // 请求更改授权
BBASMAuthorizeProcessTypePhoneNumberLogin, // 获取手机号触发手机号登录
BBASMAuthorizeProcessTypeRequestOpenData, // 请求openData
BBASMAuthorizeProcessTypeCheckScope, // 确认鉴权
BBASMAuthorizeProcessTypeRequestCheckSession, // 发checkSession请求
BBASMAuthorizeProcessTypeSuccess, // 终点(成功)
BBASMAuthorizeProcessTypeFail // 终点(失败)
};
typedef void(^BBASMAuthorizeMapCallback)(NSDictionary *dict);
typedef void(^BBASMAuthorizeDeterminatedCallback)(BOOL allow, NSDictionary *responseDictionary);
typedef void(^BBASMAuthorizeErrorCallback)(NSString *errorStatus, NSString *errorMessage, NSDictionary *responseDictionary); //返回错误类型,如果有服务器数据,则附加服务器数据
typedef void(^BBASMAuthorizeScopeCallback)(BBASMAuthorizeScopeStatus status, NSDictionary *dict); //直接修改授权scope失败返回回调,status表示错误类型,dict表示错误信息
/// 集中授权,成功回调
typedef void(^BBASMMultiAuthorizeSuccessCallback)(void);
///// 集中授权,失败回调
typedef void(^BBASMMultiAuthorizeErrorCallback)(NSString *errorCode, NSString * errorMessage);
/// 授权过程回调
typedef void(^BBASMAuthorizeProcessCallback)(BBASMAuthorizeProcessType processType, NSDictionary *processInfo);
extern NSString *const kBBASMAuthorizeScopeFaceVerify; // 人脸校验授权
extern NSString *const kBBASMAuthorizeScopeFaceImage; // 活体检测授权
extern NSString *const BBASMAuthorizeScopeChangeMenuAppearance; // 改变胶囊按钮样式权限
extern NSString *const BBASMAuthorizeScopeHideMenu; // 设置胶囊是否隐藏
extern NSString *const BBASMAuthorizeScopeGetOpenBDUSS; // 获取openBUDSS
extern NSString *const BBASMAuthorizeScopeGetUnionBDUSS; // 获取联盟账号的openBUDSS
extern NSString *const BBASMAuthorizeScopeQuickLogin; // 一键登录
extern NSString *const BBASMAuthorizeScopeSetAccountAvatar; // 设置百度账户头像
extern NSString *const BBASMAuthorizeScopeFavorBtn; // 关注button组件
extern NSString *const BBASMAuthorizeScopeBencharmark; // benchmark稳定性权限
extern NSString *const BBASMAuthorizeScopeWebViewExtraOperation; // 拦截webview组件url重定向及添加UA
extern NSString *const kBBASMAuthorizeScopeShowSMSPanel; // 打开编辑短信的鉴权
extern NSString *const BBASMAuthorizeScopeAddToDesktop; // 添加到桌面能力的鉴权
#define BBASMC_AuthorizeScopeBaseKey @"snsapi_base" //默认key
#define BBASMC_AuthorizeScopeUserInfoKey @"snsapi_userinfo" //用户信息
#define BBASMAuthorizeScopeUserInfoAPIKey @"scope_userinfo_api" //用户信息-api调用
#define BBASMC_AuthorizeScopeLoginAPIKey @"scope_login_api" //登录接口-api调用
#define BBASMC_AuthorizeScopeUserLocationKey @"mapp_location" //地理位置
#define BBASMC_AuthorizeScopeCamera @"mapp_camera" //相机
#define BBASMC_AuthorizeScopeMobile @"mobile" //手机号
#define BBASMAuthorizeScopeMobileAPIKey @"scope_mobile_api" //手机号-api调用
#define BBASMC_AuthorizeScopeWritePhotosAlbumKey @"mapp_images" //保存到相册
#define BBASMC_AuthorizeScopeGetBdussKey @"mapp_i_get_bduss" //获取bduss
#define BBASMC_AuthorizeScopePaymentKey @"mapp_i_polymepayment" //钱包支付
#define BBASMC_AuthorizeScopeGetHistory @"mapp_i_get_history" //获取历史
#define BBASMC_AuthorizeScopeGetFavor @"mapp_favorite" //小程序关注与取消
#define BBASMC_AuthorizeScopeDeleteHistory @"mapp_i_delete_history" //删除历史
#define BBASMC_AuthorizeScopeChooseAddress @"mapp_choose_address" //收货地址
#define BBASMC_AuthorizeScopeChooseInvoice @"mapp_choose_invoice" //获取发票
#define BBASMC_AuthorizeScopeBdSystemInfo @"mapp_i_get_common_sys_info" //获取系统信息
#define BBASMC_AuthorizeScopeRecord @"mapp_record" //获取系统麦克风权限
#define BBASMC_AuthorizeScopeLivePlayer @"mapp_i_live_player" //获取直播权限信息
#define BBASMC_AuthorizeScopePageTrans @"mapp_i_baiduapp_page_trans" //页面跳转
#define BBASMC_AuthorizeScopeAdWebPage @"mapp_i_open_adweb" //小程序打开广告落地页鉴权
#define BBASMC_AuthorizeScopeOpenApp @"scope_open_app" //打开App
#define BBASMC_AuthorizeScopeAdLoading @"mapp_i_open_adlanding" //打开需要鉴权的广告落地页,不同于AD 组件的调用
#define BBASMC_AuthorizeScopeThirdLogin @"mapp_i_login" //三方登录
#define BBASMC_AuthorizeScopeStoken @"mapp_i_get_stoken" //获取stoken
#define BBASMC_AuthorizeScopeReadContacts @"mapp_i_read_contacts" //获取手机通讯录
#define BBASMAuthorizeScopeCheckReadContactsAuthorize @"scope_phone_contact_authorize" // 检测是否有通讯录权限
#define BBASMC_AuthorizeScopeAppDownload @"mapp_i_app_download" //跳转appStore
#define BBASMC_AuthorizeScopeSendBroadCast @"mapp_i_send_broadcast" //小程序向宿主透传数据通道
#define BBASMC_AuthorizeScopeShareURLEditable @"mapp_i_share_update_linkurl" //分享URL是否可由小程序自定义
#define BBASMC_AuthorizeScopeGetRealNameInfo @"ppcert" //获取实名信息
#define BBASMC_AuthorizeScopeConfirmClose @"mapp_confirm_close" // 挽留弹窗授权
#define BBASMC_AuthorizeScopeCTSDebug @"mapp_cts_debug" //CTSDebug
#define BBASM_AuthorizeScopeGetChannelID @"scope_get_channel_id" // 获取宿主app渠道号
#define BBASMC_AuthorizeScopePredownload @"mapp_pre_download" // 预下载小程序/游戏包
#define BBASM_AuthorizeScopeMutiAuthorize @"scope_multi_authorize" // 集中授权端能力
#define BBASMC_AuthorizeScopeShareWebUrl @"mapp_i_share_update_weburl" // web化页面分享
#define BBASM_AuthorizeScopeGetUUAPInfo @"mapp_uuap_info" // 获取uuap cookie内容的能力
#define BBASMC_AuthorizeScopeSubscribe @"subscribe" // 订阅通知
#define BBASMC_AutherizeScopeStreamTTS @"scope_stream_tts" // TTS 播报能力
#define BBASMC_AuthorizeScopeMapCustomStyle @"mapp_i_map_custom_style" // 地图个性化能力
#define BBASMC_AuthorizeScopeWalletRiskControlData @"mapp_wallet_risk_control_info" // 获取钱包风控信息授权
#define BBASMC_AuthorizeScopeWallet @"mapp_request_duxiaoman" // 百度钱包直连支付端能力调起方式鉴权
#define BBASMC_AuthorizeScopeAliPay @"mapp_request_alipayment" // 支付宝直连支付端能力调起方式鉴权
#define BBASMC_AuthorizeScopeWeChatPay @"mapp_request_wechatpayment" // 微信直连支付端能力调起方式鉴权
#define BBASMC_AuthorizeScopeThirdPay @"scope_request_thirdpayment" // 新直连支付,微信/支付宝合并
#define BBASM_AuthorizeScopeSecuritySDK @"scope_call_securitysdk" // 安全组sdk的鉴权
#define BBASM_AuthorizeScopeDisableSwipeBack @"scope_disable_swipe_back" // 页面禁止全屏右滑鉴权
#define BBASM_AuthorizeScopeCalendar @"scope_calendar" // 添加/删除日历事件 (在系统日历中)
#define BBASM_AuthorizeScopeGetDeviceInfo @"scope_get_device_info" // 获取设备信息
#define BBASMAuthorizeScopeWebWindowPayProtected @"scope_web_window_pay_protected" // 半屏web容器保障类型鉴权
#define BBASMAuthorizeScopeCustomNavigationBar @"mapp_i_custom_navigation_bar" // 导航栏自定义不显示返回按钮鉴权
#define BBASMAuthorizeScopeCustomScreenshot @"mapp_custom_screenshot_image" // 获取截屏图片及屏蔽截屏分享鉴权
#define BBASMAuthorizeScopeRequestSubscribeMessage @"mapp_request_subscribe_message" // 去掉订阅消息API调起渠道限制鉴权
#define BBASMAuthorizeScopeEmitAppClose @"mapp_emit_app_close" // 发送appclose消息限制鉴权
#define BBASMAuthorizeScopeShowModalPage @"mapp_show_modal_page" // 展示全屏弹窗鉴权
//ERROR
#define kBBASMCallBackResultBaseCodeStatus @"10000"
#define kBBASMCallBackResultInternalErrorStatus @"10001"
#define kBBASMAuthorizeResultInternalErrorMSG @"internal error" //内部错误
#define kBBASMCallBackResultNetworkErrorStatus @"10002"
#define kBBASMAuthorizeResultNetworkErrorMSG @"network error" //网络请求失败
#define kBBASMCallBackResultDenyErrorStatus @"10003"
#define kBBASMAuthorizeResultDenyErrorMSG @"user deny" //用户拒绝
#define kBBASMCallBackResultBdussErrorStatus @"10004"
#define kBBASMAuthorizeResultBdussErrorMSG @"user not logged in" // 账号失效
#define kBBASMCallBackResultSystemDenyErrorStatus @"10005"
#define kBBASMAuthorizeResultSystemDenyErrorMSG @"system deny" //系统拒绝
#define kBBASMCallBackResultNoDataErrorStatus @"10006"
#define kBBASMAuthorizeResultNoDataErrorMSG @"no data" //请求server成功,数据为空
#define kBBASMCallBackBaiduAccountErrorStatus @"10007"
#define kBBASMCallBackBaiduAccountErrorMSG @"is not baidu account" // 当前是没有接入百度账号的宿主
#define kBBASMCallBackResultSessionKeyExpiredErrorStatus @"10009"
#define kBBASMAuthorizeResultSessionKeyExpiredErrorMSG @"session key expired" // session_key过期
#define kBBASMAuthorizeResultSucceedMSG @"authorize succeed"
#define kBBASMAuthorizeResultFailMSG @"authorize fail"
#define kBBASMAuthorizeResultErrorKey @"errno"
//ERROR END
/// 获取权限调起的来源key
extern NSString * const BBASMAuthorizeInvokeSource;
/// 获取权限调起的来源组件key
extern NSString * const BBASMAuthorizeFromSource;
/// Button调起获取权限
extern NSString * const BBASMAuthorizeInvokeSourceButton;
/// api调起获取权限, 同时这个也是默认的调起方式
extern NSString * const BBASMAuthorizeInvokeSourceApi;
/// scope 对应的key
extern NSString * const kBBASMAuthorizeScopeKey;
///需要区分授权错误类型的错误信息前缀
extern NSString *const BBASMAuthorizeFailLocationPrefix; //获取地位位置授权失败,错误信息前缀
extern NSString *const BBASMAuthorizeFailCameraPrefix; //相机授权失败,错误信息前缀
extern NSString *const BBASMAuthorizeFailRecorderPrefix; //录音授权失败,错误信息前缀
typedef enum : NSUInteger {
BBASMAuthorizeItemGradeAlways = 1,
BBASMAuthorizeItemGradeLocalUser = 2,
BBASMAuthorizeItemGradeNever = 3
} BBASMAuthorizeItemGrade;
@protocol BBASMUpdateModuleAdapterProtocol;
AliasService(BBASMAuthorizeProtocol, bba_MNPAuthorize)
@protocol BBASMAuthorizeProtocol <NSObject>
/**
* @brief 尝试触发登录用户
*
* @param appId 应用ID
* @param forceLogin 宿主平台未登录情况下,是否强制弹登录框
* @param succeedCallback 成功登陆执行的回调
* @param errorCallback 登陆失败执行的回调
*/
+ (void)checkAndTryLoginUserAppId:(NSString *)appId
force:(BOOL)forceLogin
succeed:(dispatch_block_t)succeedCallback
error:(dispatch_block_t)errorCallback;
/**
* @brief 尝试触发登录用户
*
* @param appId 应用ID
* @param forceLogin 宿主平台未登录情况下,是否强制弹登录框
* @param succeedCallback 成功登陆执行的回调
* @param errorCallback 登陆失败执行的回调
* @param processCallback 流程回调
*/
+ (void)checkAndTryLoginUserAppId:(NSString *)appId
force:(BOOL)forceLogin
succeed:(dispatch_block_t)succeedCallback
error:(dispatch_block_t)errorCallback
process:(BBASMAuthorizeProcessCallback)processCallback;
/**
* 请求alert信息,如果不需要弹框则直接返回. 本地权限bduss可以传nil
*
*/
+ (void)requestScope:(NSString *)scope
appID:(NSString *)appID
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback;
/**
* @brief 确认权限
*
* @param appID 应用ID
* @param scope 权限名
* @param succeedCallback 成功登陆执行的回调
* @param errorCallback 登陆失败执行的回调
* @param processCallback 流程回调
*/
+ (void)requestScope:(NSString *)scope
appID:(NSString *)appID
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback
process:(BBASMAuthorizeProcessCallback)processCallback;
/**
* @brief 请求scope权限信息
* @param scope scope
* @param appID appID
* @param source 点击的来源,目前两个button,或者api调用
* @param succeedCallback succeedCallback
* @param errorCallback errorCallback
*/
+ (void)requestScope:(NSString *)scope
appID:(NSString *)appID
invokeSource:(NSString *)source
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback;
/**
* 确认登录状态
*
*/
+ (void)checkLoginStateClient:(id<BBASMAppIdentifyInfoAdapterProtocol>)info
succeed:(BBASMAuthorizeMapCallback)succeedCallback error:(BBASMAuthorizeMapCallback)errorCallback;
/**
* 获取用户授权信息列表_使用缓存
*
*/
+ (void)getAppIDActionListClientEx:(NSString *)clientID
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback;
/**
* 获取用户授权信息列表_可配置是否使用缓存
*
*/
+ (void)getAppIDActionListClientEx:(NSString *)appKey
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback
useCache:(BOOL)useCache;
/**
* 修改权限
*
*/
+ (void)modifyAuthorizeScopeByAppID:(NSString *)appID
pluginID:(NSString *)pluginID
scopes:(NSArray *)scopes
operatorType:(BBASMAuthorizeOperatorType)opType
requestType:(BBASMAuthorizeRequestType)requestType
succeed:(BBASMAuthorizeDeterminatedCallback)succeedCallback
error:(BBASMAuthorizeScopeCallback)errorCallback;
/**
* 修改权限,带过程回调
*
*/
+ (void)modifyAuthorizeScopeByAppID:(NSString *)appID
pluginID:(NSString *)pluginID
scopes:(NSArray *)scopes
operatorType:(BBASMAuthorizeOperatorType)opType
requestType:(BBASMAuthorizeRequestType)requestType
succeed:(BBASMAuthorizeDeterminatedCallback)succeedCallback
error:(BBASMAuthorizeScopeCallback)errorCallback
process:(BBASMAuthorizeProcessCallback)processCallback;
/**
* 获取 swan id
*
*/
+ (void)getBBASMId:(NSString *)appID
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeMapCallback)errorCallback;
/**
* 获取开放数据, 成功的话,返回 相关的服务器透传数据。 失败的话,返回错误
*
* @params params NSDictionary key: scope
*
*/
+ (void)getOpenData:(NSString *)appId
appKey:(NSString *)appKey
pluginID:(NSString *)pluginID
params:(NSDictionary *)params
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback;
+ (void)getOpenData:(NSString *)appId
appKey:(NSString *)appKey
pluginID:(NSString *)pluginID
params:(NSDictionary *)params
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback
process:(BBASMAuthorizeProcessCallback)processCallback;
/// 请求账号信息
/// @param appID 小程序ID
/// @param scope opendata scope
/// @param succeedCallback 成功回调
/// @param errorCallback 失败回调回调
+ (void)requestOpenDataWithAppID:(NSString *)appID
scope:(NSString *)scope
succeed:(BBASMAuthorizeMapCallback)succeedCallback
error:(BBASMAuthorizeErrorCallback)errorCallback;
#pragma mark - ut
/**
* 数据请求结点,存储用于要请求的结点对应的模型数据,用于发起请求的参数获取key 为要请求的节点名,其中为 @"accredit":表示授权相关数据
* value 为遵守 BBASMUpdateModule 协议的模型对象
*/
+ (NSMutableDictionary<NSString *,id<BBASMUpdateModuleAdapterProtocol>> *)moduleMap:(NSString *)appID;
/**
* @brief 检查本地权限列表授权结果
* @param scopeKey 查询的授权key
* @param appID 小程序appId
* @return YES 已授权 | NO 未授权
*/
+ (BOOL)checkAuthorizeFromLocalCache:(NSString *)scopeKey
appID:(NSString *)appID;
/**
* @brief 授权里面的 ubc 打点
*
* @param appID appID
* @param errorCodeStr 错误码信息
* @param extInfo 打点信息
* @param isNeedVersionTime 是否要带上version 和 updatetime
*/
+ (void)stableMonitorWithAppID:(NSString *)appID
errorCodeStr:(NSString *)errorCodeStr
extInfo:(NSDictionary *)extInfo
isNeedVersionTime:(BOOL)isNeedVersionTime;
@end