开发

账号

1 公共账号协议

1.1 协议名

BBASMAccountAdapterProtocol

1.2 功能说明

目前账号登录分:

  • 联盟账号:SDK 内部建立联盟账号,打通授权、收货地址、账号登录信息等服务(推荐方式);
  • 自有账号:需要通过自有账号建立一套自己的授权体系、收货地址等服务(实现成本高)。

[注] 百度产品线的宿主采用自有账号方式,建议升级 passport 版本到:8.9.2.0.1 以上版本。

1.3 接口列表

1.3.1 联盟账号方式

2.34 版本后小程序框架会根据宿主是否集成了 SSDKLightLib 库来判断宿主是否使用的是联盟账号
2.34 版本前需要宿主实现 isUseUnionAccountLogin 接口

1
2
3
4
5
/// @brief 是否使用百度开源联盟登录 (百度系产品不需要实现此接口,外部宿主可选)
/// 外部宿主若选择实现并返回yes,则不需要实现下述登录相关接口;
/// 反之,需要实现login/logout/getUserInfo/accountChangeNotificationName接口
/// @return 默认为NO (YES 使用 NO 不使用)
+ (BOOL)isUseUnionAccountLogin;

  • 调用API:

    退出联盟账号登录:

    1
    2
    // 在调用的类中,#import "BBASMServiceProtocol.h" 。
    [Pyramid.bba_MNP unionAccountLogOut];

    获取联盟账号的登录标识:

    1
    [Pyramid.bba_MNP getUnionBduss];

1.3.2 自有账号方式

  • 登录接口
    需要注意两点:
  1. 若宿主的登录页面是一个 View 视图会影响小程序页面周期,在登录前,需调用 [Pyramid.bba_smManager dispatchPageAndAppOnHiddenEvent] ,在登录完成后,调用 [Pyramid.bba_smManager dispatchAppAndPageOnShowEvent] ;
  2. 若宿主的登录页面是一个 ViewController ,页面消失,需要 loginCompletionBlock(里面 BOOL 值由登录成功决定);侧滑退出登录页面完成后要调用 loginCompletionBlock(NO) ,或者禁止当前登录页面侧滑手势。
1
2
3
/// @brief 调用登录接口,如果实现此接口,须同时实现 logout, getUserInfo 和 accountChangeNotificationName接口
/// @param loginCompletionBlock 不能设置为nil 登录成功、失败(退出登录页面)的回调,参数YES:登录成功,NO:登录失败或者未登录直接退出登录页面;必须要调用,不然会导致再次登录无法调起
+ (void)login:(void (^)(BOOL success))loginCompletionBlock;
  • 退出登录
1
2
/// @brief private: 百度系产品可用,退出登录接口(主要用于登录失效时退出登录)
+ (void)logout;
  • 用户信息
1
2
3
4
5
6
7
8
9
10
11
/// @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;
  • 宿主账号变化的通知
1
2
3
/// @brief 设置账号变化的通知名,账户登录成功或退出登录需要发送此通知
/// @return 宿主账号变化的通知名,必须要设置
+ (NSString *)accountChangeNotificationName;
  • 检查网页登录是否合法
1
2
/// @brief private:百度系产品可用;用于WKWebView在处理网页登出时,有可能cookie不同步的问题,调用此api进行bduss校验,若失效,则logout
+ (void)checkWbviewAccountInvalid;
  • 安全防御,百度内部宿主需要实现
1
2
3
4
/// @brief private, 风控zid,用于安全防御;
/// 百度系产品线,必须实现这个接口;
/// @return 风控zid,在模拟器下为空字符串;
+ (nullable NSString *)userZid;
  • 半屏登录、一键登录功能
1
2
3
4
5
6
7
/// private:百度系产品可用;通过调起半屏登录页面登录后获取用户手机号权限
/// @param appId 小程序id
/// @param appName 小程序名称
/// @param resultHandler 是否授权成功的回调
+ (void)getTelAuthorizeByLoginWithAppId:(NSString *)appId
appName:(NSString *)appName
resultHandler:(void(^)(BOOL isAuthorizeSuccess))resultHandler;

通过手机号半屏登录 (参考 BBASMAccountImplement 中实现 getTelAuthorizeByLoginWithAppId 接口)
图片

一键登录(可选):接入中国移动、中国电信等运营商 SDK 自动获取手机号能力,一键登录参考文档
图片

一键登录集成步骤:

  1. 向 Passport 提交物料进行授权申请,获取各个运营商授权 key ;
  2. 集成运营商 SDK ;(移动 TYRZSDK.framework 、电信 EAccountApiSDK.framework 、联通 OAuth.framework )
  3. 项目中初始化运营商授权 key ,参考 Demo 中的 BBASMAccountHelper 类;
  4. BBASMAccountImplement 中实现 getTelAuthorizeByLoginWithAppId 接口,详情请参考参考 Demo 。

[注] 如果不集成运营商 SDK ,则会退化成手机号半屏登录,一键登录有任何问题可以参考文档

  • 强制绑定手机号

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

1.4 示例

参考:BBASMAccountImplement


2 百度系宿主私有账号协议

2.1 协议名

BBASMBDAccountAdapterProtocol

2.2 功能说明

从 SDK 2.27.0版本开始,新增这个私有账号协议,这个协议只在百度系宿主上使用,具体功能:

  • 获取bduss (必须要实现)
  • 获取openbduss
  • 获取stoken(必须要实现)
  • 调用三方登录
  • 一键登录(是否支持一键登录)
  • 设置百度登录头像
  • 人脸校验

2.3 接口列表

2.3.1 获取bduss(必须要实现)

前端在调用swan.baidu.getBDUSS端能力,需要实现这个接口:

1
2
/// 获取bduss
+ (NSString *)getBduss;

2.3.2 获取openbduss

前端在调用swan.baidu.getOpenBDUSS端能力,如果运行度小满钱包小程序需要使用到这个端能力,实现接口如下:

1
2
3
4
5
6
7
/// @brief 获取openbduss
/// @param clientID clientID
/// @param tplList xcxtpl列表
/// @parma 完成回调 (error == nil && info != nil 成功)
+ (void)getOpenBdussWithClientID:(NSString *)clientID
tplList:(NSArray *)tplList
completion:(void (^)(id<BBASMAccountOpenBdussInfoProtocol> info, NSError *error))completion;

2.3.3 获取stoken(必须要实现)

前端在调用swan.baidu.getStoken端能力,需要实现这个接口:

1
2
3
4
5
6
7
/// @brief 获取stoken
/// @param tpl 标识业务线,用于 stoken 的获取
/// @param successBlock 获取成功的回调
/// @param failureBlock 获取失败的回调
+ (void)getStokenWithString:(NSString *)tpl
success:(void (^)(NSString *stoken))successBlock
failure:(void (^)(NSError *error))failureBlock;

2.3.4 调用三方登录

前端在调用swan.baidu.thirdPartyLogin端能力,先判断三方登录的app是否已经安装,需要实现这个接口:

1
2
3
4
/// @brief 第三方登录,本地是否安装相关App
/// @parm loginType 登录类型
/// @return 是否安装
+ (BOOL)isAppInstalled:(BBASMAccountLoginType)loginType;

前端在调用swan.baidu.thirdPartyLogin端能力,调用三方登录的app,需要实现这个接口:

1
2
3
4
5
6
7
/// @brief 调用第三方登录
/// @param loginType 第三方登录类型 如:QQ,weibo,weixin
/// @param completionBlock completionBlock
/// @param viewController superVC
+ (void)thirdPartyLogin:(BBASMAccountLoginType)loginType
complete:(BBASMExternalSeviceCallback)completionBlock
superVC:(UIViewController *)viewController;

2.3.5 一键登录

前端在调用swan.baidu.quickLogin端能力,一键登录需要实现这个接口:
1
2
/// 一键登录
+ (void)quickLogin:(BBASMExternalSeviceCallback)completionBlock;
前端在调用swan.baidu.queryQuickLoginInfo端能力,是否支持一键登录需要实现这个接口:
1
2
/// 查询是否支持一键登录
+ (void)queryQuickLoginInfo:(void(^)(id<BBASMAccountCheckOneKeyResultProtocol> result, NSError *error))completionBlock;

2.3.6 设置百度登录头像

前端在调用swan.baidu.setAccountAvatar端能力,需要实现这个接口:

1
2
3
4
5
6
7
/// @brief 设置百度登录头像
/// @param portrait 待更新的头像
/// @param type 保存头像类型
/// @param completion 更新结果回调
+ (void)saveAccountPortrait:(UIImage *)portrait
portraitType:(BBASMAccountSetPortraitType)type
completion:(void(^)(BOOL success, NSString *errmsg))completion;

2.3.7 人脸校验

前端在调用swan.baidu.commonFaceVerify端能力,人脸校验需要实现这个接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
/// 姓名、身份证、人脸校验接口
/// @param realName 姓名
/// @param idNumber 身份证号
/// @param sourceVC 调起ViewController
/// @param appId appId
/// @param successBlock 成功回调
/// @param failureBlock 失败回调
+ (void)commonFaceVerifyWithRealName:(NSString *)realName
idNumber:(NSString *)idNumber
sourceVC:(UIViewController *)sourceVC
appId:(NSString *)appId
success:(void (^)(NSDictionary *))successBlock
failure:(void (^)(NSError *))failureBlock;

2.4 示例 (私有协议)

参考:BBASMBDAccountImplement