开发

帐号

1.1 协议名

BBASMAccountAdapterProtocol

1.2 功能说明

目前账号登录分:

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

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

1.3 接口列表

1.3.1 联盟账号方式

开源联盟宿主(非百度系宿主)仅需要实现这个接口,返回值为 YES 。

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

1.3.2 自有账号方式

登录接口
需要注意两点:

  1. 若宿主的登录页面是一个 View 视图会影响小程序页面周期,在登录前,需调用 [Pyramid.bba_smManager dispatchPageAndAppOnHiddenEvent] ,在登录完成后,调用 [Pyramid.bba_smManager dispatchAppAndPageOnShowEvent] ;
  2. 若宿主的登录页面是一个 ViewController ,页面消失,需要 loginCompletionBlock(里面 BOOL 值由登录成功决定);侧滑退出登录页面完成后要调用 loginCompletionBlock(NO) ,或者禁止当前登录页面侧滑手势。
1
2
3
4
5
6
/**
* @brief 调用登录接口
* 如果实现此接口,须同时实现 logout, getUserInfo 和 accountChangeNotificationName接口
* @param loginCompletionBlock 不能设置为nil 登录成功、失败(退出登录页面)的回调,参数YES:登录成功,NO:登录失败或者未登录直接退出登录页面;必须要调用,不然会导致再次登录无法调起
*/
+ (void)login:(void (^)(BOOL success))loginCompletionBlock;

退出登录

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

登录成功的用户信息

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @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
4
5
/**
* @brief 设置帐号变化的通知名,账户登录成功或退出登录需要发送此通知
* @return 宿主账号变化的通知名,必须要设置
*/
+ (NSString *)accountChangeNotificationName;

检查网页登录是否合法(联盟成员宿主不实现)

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

安全防御,百度内部宿主需要实现

1
2
3
4
5
6
/**
* @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 私有端能力(运营能力,百度内部宿主必须要接入)

queryQuickLoginInfo 、quickLogin ,具体实现参考 Demo BBASMAccountBridge 的实现。

1.5 调用联盟账号相关方法(自有账号忽略)

在调用的类中,#import “BBASMServiceProtocol.h” 。

退出联盟账号登录

1
[Pyramid.bba_MNP unionAccountLogOut];

获取联盟账号的登录标识

携带 OPENBDUSS 向小程序 SDK 侧服务端请求接口,获取用户相关信息。

1
[Pyramid.bba_MNP getUnionBduss];

1.6 示例

参考:BBASMAccountImplement 。