BBASMAccountAdapterProtocol.h 5.29 KB
//
//  BBASMAccountAdapterProtocol.h
//  SWAN
//
//  Created by baidu on 2018/9/9.
//  Copyright © 2018年 baidu. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BBASMAdapterBaseImplement.h"
#import <WebKit/WebKit.h>

NS_ASSUME_NONNULL_BEGIN

/*
 * 账号协议,该协议只在内部调用
 */
@protocol BBASMAccountAdapterProtocol <NSObject>

@optional

#pragma mark - 如果宿主需要用自己的账号体系登录,需要实现以下协议方法

/**
 * @brief 风控zid,用于安全防御;
 * 百度系产品线,必须实现这个接口;联盟成员如果使用自己的账号体系,可以实现;
 * @return 风控zid,在模拟器下为空字符串;
 */
+ (nullable NSString *)userZid;

/**
 * @brief 调用登录接口 (百度系产品必须实现,外部宿主可选)
 *        如果实现此接口,须同时实现 logout, getUserInfo 和 accountChangeNotificationName接口
 * @param loginCompletionBlock 不能设置为nil 登录成功、失败(退出登录页面)的回调,参数YES:登录成功,NO:登录失败或者未登录直接退出登录页面;必须要调用,不然会导致再次登录无法调起
 */
+ (void)login:(void (^)(BOOL success))loginCompletionBlock;

/**
 * @brief private: 百度系产品可用,退出登录接口(主要用于登录失效时退出登录)
 */
+ (void)logout;

/**
* @brief 是否是游客登录
*/
+ (BOOL)isGuest;

/**
 * @brief 获取用户信息,登录成功之后(百度系App在调用passport登录成功之后,需要主动发起获取用户信息的请求)
 * @return 用户信息
 *   @{
 *     @"userName":[NSString], // 用户名,可以为nil,登录情况下一定不能为nil
 *     @"nickName":[NSString], // 昵称,可以为nil,登录情况下一定不能为nil
 *     @"portrait":[NSString], // 用户图像,可以为nil
 *     @"gender":[NSNumber numberWithInteger:gender], // 用户性别 -1:未知 0:女 1:男
 *     @"userID":[NSString], // 用户ID,可以为nil,登录情况下一定不能为nil
 *     @"isLogin":[NSNumber numberWithBool:isLogin] 用户的登录状态,YES:登录成功,NO:登录失败
 *     };
 */
+ (nullable NSDictionary *)getUserInfo;

/**
 * @brief 设置帐号变化的通知名,账户登录成功或退出登录需要发送此通知
 * @return 宿主账号变化的通知名,必须要设置
 */
+ (NSString *)accountChangeNotificationName;

/**
 * @brief 帐号变化通知userInfo中标识切换账号的key值
 * @return userInfo的key值
 */
+ (NSString *)accountChangeNotificationSwitchKey;

/**
 * @brief private:百度系产品;用于WKWebView在处理网页登出时,有可能cookie不同步的问题,调用此api进行bduss校验,若失效,则logout
 */
+ (void)checkWbviewAccountInvalid;

/**
 * @brief private:百度系产品;增加 WKWebView H5登录态同步到 NA 处理。H5登录成功后,将根据策略同步H5与NA的登录态
 * @param controller WKUserContentController
 */
+ (void)webviewLoginInfoSync:(WKUserContentController *)controller;

/**
 * @brief private:百度系产品;可用登录状态如果用户没有手机号,强制绑定手机号,
 * @param completion 完成回调,success:是否绑定了手机号,finishBindAction:用户是否调起了绑定手机号界面,并且绑定手机号成功。
 * @description  如果宿主实现了这个方法,那么走宿主的方法,没有默认绑定了手机号
*/
+ (void)forceBindPhone:(void(^)(BOOL success, BOOL finishBindAction))completion;

/**
 * @brief 调起绑定手机号的页面
*/
+ (void)bindPhoneNum:(void (^)(BOOL success))completionBlock;

/**
 * @brief private:百度系产品;没有实名信息时引导进行实名和人脸校验
 *
 * @param appID 小程序appID
 */
+ (void)faceVerifyNoRealName:(NSString *)appID
              verifyCallback:(void(^)(NSString *key, BOOL haveJunior, BOOL haveSenior))callback __attribute__((deprecated("Use faceVerifyNoRealName:extraParams:verifyCallback: instead.")));

/// 账号实名认证(private:百度系产品)
/// @param appID appID
/// @param extraParams 额外参数,在pass调起实名认证的h5时会将字典中的内容拼入query,如果传nil则是默认的高级实名认证,传realname_level: @(YES)则是默认的初级实名认证,请视业务需要传入
/// @param callback key - 完成高级实名后的刷脸凭证  haveJunior - 是否完成了初级实名  haveSenior - 是否完成了高级实名
+ (void)faceVerifyNoRealName:(NSString *_Nonnull)appID
                 extraParams:(NSDictionary *_Nullable)extraParams
              verifyCallback:(void(^_Nonnull)(NSString * _Nullable key, BOOL haveJunior, BOOL haveSenior))callback;

/// private:百度系产品;通过调起半屏登录页面登录后获取用户手机号权限
/// @param appId 小程序id
/// @param appName 小程序名称
/// @param resultHandler 是否授权成功的回调
+ (void)getTelAuthorizeByLoginWithAppId:(NSString *)appId
                                appName:(NSString *)appName
                          resultHandler:(void(^)(BOOL isAuthorizeSuccess))resultHandler;

/// 可选实现,由开源宿主设置用户的唯一标识(限定256个字符)。如果一个用户有多个账号,则所有账号都绑定一个hostUniqueID。目前用于聚合收银台绑定用户订单信息
+ (NSString *)hostUniqueID;

@end

NS_ASSUME_NONNULL_END