提供自建账号体系能力,包括注册,登录,登出,获取账号,会话管理,人机校验,登录UI定制等功能。同时基于Oauth2.0协议,提供快速对接自有账号的能力,满足开发者在App开发中对接自有账号体系的需求。

初始化

SDK集成使用Pod集成,添加完依赖后需要将ALBBOpenAccountUI.framework中的xib放置到主工程目录下。账号和用户SDK的初始化依赖 API通道的初始化。在 API 通道初始化成功后,再参考下面的示例代码初始化账号和用户SDK。

// 引入头文件
#import <IMSApiClient/IMSConfiguration.h>
#import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>

ALBBOpenAccountSDK *accountSDK = [ALBBOpenAccountSDK sharedInstance];
// 设置安全图片authCode
IMSConfiguration *conf = [IMSConfiguration sharedInstance];
[accountSDK setSecGuardImagePostfix:conf.authCode];
// 设置账号服务器环境,默认为线上环境
[accountSDK setTaeSDKEnvironment:TaeSDKEnvironmentRelease];
// 设置账号服务器域名;如果是线上环境,可以不设置域名;
[accountSDK setGwHost:@"sdk.openaccount.aliyun.com"];
//如果需要切换到海外环境,请执行下面setDefaultOAHost方法,默认为大陆环境
//[accountSDK setGwHost:@"sgp-sdk.openaccount.aliyun.com"];
// 打开调试日志
//[accountSDK setDebugLogOpen:YES];

// 初始化
[accountSDK asyncInit:^{
  // 初始化成功
} failure:^(NSError *error) {
  // 初始化失败
}];

内置账号

  • 使用说明
    • 注册
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      #import <ALBBOpenAccountCloud/ALBBOpenAccountUser.h>
      
      // 获取账号UI服务
      id<ALBBOpenAccountUIService> uiService = ALBBService(ALBBOpenAccountUIService);
      
      // 显示手机注册窗口,presentingViewController将通过present方式展示登陆界面viewcontroller
      [uiService presentRegisterViewController:presentingViewController success:^(ALBBOpenAccountSession *currentSession) {
        // 注册成功,currentSession为当前会话信息
      } failure:^(NSError *error) {
          // 只有用户取消注册才会执行    
      }];    
      
      // 显示邮箱注册窗口,presentingViewController将通过present方式展示登陆界面viewcontroller
      [uiService presentEmailRegisterViewController:presentingViewController success:^(ALBBOpenAccountSession *currentSession) {
        // 注册成功,currentSession为当前会话信息
      } failure:^(NSError *error) {
          // 只有用户取消注册才会执行
      }];
    • 登录
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      #import <ALBBOpenAccountCloud/ALBBOpenAccountUser.h>
      
      // 获取账号UI服务
      id<ALBBOpenAccountUIService> uiService = ALBBService(ALBBOpenAccountUIService);
      // 显示登录窗口,presentingViewController将通过present方式展示登陆界面viewcontroller
      [uiService presentLoginViewController:presentingViewController success:^(ALBBOpenAccountSession *currentSession) {
        // 登录成功,currentSession为当前会话信息
        // 获取当前会话标识
        NSLog(@"sessionId:%@", currentSession.sessionID);
        // 获取当前用户信息
        ALBBOpenAccountUser *currentUser = [currentSession getUser];
        NSLog(@"mobile:%@", [currentUser mobile]);
        NSLog(@"avatarUrl:%@", [currentUser avatarUrl]);
        NSLog(@"accountId:%@", [currentUser accountId]);
        NSLog(@"displayName:%@", [currentUser displayName]);
      } failure:^(NSError *error) {
        // 登录失败对应的错误;取消登录同样会返回一个错误码
      }];      
    • 退出登录
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      
      // 退出登录
      [[ALBBOpenAccountSession sharedInstance] logout];       
    • 忘记密码

      调起登录页面之后,在登录页面内会出现注册和忘记密码的功能。

  • 修改个人信息
    • 修改昵称
      / 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      #import <ALBBOpenAccountCloud/ALBBOpenAccountService.h>
      
      [ALBBService(ALBBOpenAccountService) updateAccountProfile:@{@"displayName" : @"name1"} Callback:^(NSError *error) {            
          if (error == nil) {
              NSLog(@"modify nickname successfully ");
          } else {
              NSLog(@"fail to modify nickname");
          }
      }];           
    • 修改头像

      需要先将头像图片存储到云端,获取该图片的URL,再用如下方式更新。

      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      #import <ALBBOpenAccountCloud/ALBBOpenAccountService.h>
      
      [ALBBService(ALBBOpenAccountService) updateAccountProfile:@{@"avatarUrl" : url} Callback:^(NSError *error) {            
          if (error == nil) {
              NSLog(@"modify photo image successfully ");
          } else {
              NSLog(@"fail to set photo image");
          }
      }];          
    • 刷新会话
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      
      // 获取当前会话
      ALBBOpenAccountSession *session = [ALBBOpenAccountSession sharedInstance];
      // 刷新当前会话
      [session refreshSessionIDWithCallback:^(NSString *sid, NSError *err) {
        // 如果失败则返回error, 否则返回新的会话Id:sid
      }];    
    • 获取会话 ID
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      
      ALBBOpenAccountSession *session = [ALBBOpenAccountSession sharedInstance];
      NSString *sessionID = session.sessionID;        
    • 获取用户信息
      // 引入头文件
      #import <ALBBOpenAccountCloud/ALBBOpenAccountSDK.h>
      
      // 获取当前会话
      ALBBOpenAccountSession *session = [ALBBOpenAccountSession sharedInstance];
      if ([session isLogin]) {
          // 获取用户信息
          ALBBOpenAccountUser *user = session.getUser;
      }     
  • 注销账号

    注销账号时,会同时解除用户绑定的设备关系。参见注销账号

  • 登录失效处理

    参见身份认证SDKAPI请求的认证错误处理章节。

  • OA语言切换
    • 使用默认语言

      默认语言不需要进行任何语言设置,默认中文,只需要再xib自行调整UI即可。

    • 自定义方式(简单集成)
      • pod 'IMSOpenAccountCustom', '1.1.1'
      • 将IMSOpenAccountCustom的IMSOpenAccountCustomResource.bundle下的xib放到主工程,如果已经有了,可自行决定是否替换
      • 设置语言,只需要指定前缀即可。可设置OA模块语言有:zh、en、es、de、fr、ja、ko、ru、hi、it。
        设置语言
         // 使用默认的翻译资源文件
            [[IMSiLopOALanguageManage shareInstance]
            setOpenAccountModuleLanguageWithLanguagePrefix:@"ko"];
        
        // 想使用自己的资源文件(xxxx):将 IMSOpenAccountCustom的IMSOpenAccountCustomResource.bundle的.lproj文件中的内容拷贝,自行整理一份相同key的八国语言翻译
            [[IMSiLopOALanguageManage shareInstance] 
            setOpenAccountModuleLanguageWithLanguagePrefix:@"ko" bundleName:@"xxxx"];
    • 高度自定义方式(自定义较高)
      //一、设置云端语言:zh-CN、en-US、fr-FR、de-DE、ja-JP、ko-KR、es-ES、ru-RU、hi-IN、it-IT
      [[ALBBOpenAccountSDK sharedInstance] setRpcLocale:locale];
      
      //二、修改xib上显示语言,默认显示中文
      //1、将ALBBOpenAccountUI下拷贝ALBBOpenAccount.bundle中的.lproj文件中的内容拷贝,自行整理一份相同key的八国语言翻译
      //2、设置显示的国际化文件
      [[ALBBOpenAccountSDK sharedInstance] setLocale:@"zh.lproj"];
      //3、指定显示的国际化文件的具体路径
      NSString *bundlePath = [NSString stringWithFormat:@"%@/%@.bundle/zh.lproj",[NSBundle mainBundle].bundlePath, bundleName];
      [[ALBBOpenAccountSDK sharedInstance] setLocaleBundle:[NSBundle bundleWithPath:bundlePath]];
      //4、通过设置xib各个控制器的代理,自行在代理方法中对控件进行取多语言文案,实现赋值操作
      id<ALBBOpenAccountUIService> uiService = ALBBService(ALBBOpenAccountUIService);
      [uiService setLoginViewDelegate:self];
      
      - (void)loginViewDidLoad:(ALBBOpenAccountLoginViewController *)viewController {
          viewController.usernameField.placeholder = @"xxx";// 自行取资源赋值
          viewController.usernameLabel.text = @"xxx";// 自行取资源赋值
      }
      							
  • 自定义UI

    请参见 UI界面自定义完成。

自有账号

说明 在对接三方自有账号时,必须先完成SDK的初始化。
  1. 引入依赖的头文件
    #import <ALBBOpenAccountSSO/ALBBOpenAccountSSOSDK.h>
    #import <IMSAccount/IMSAccountService.h>

    实现自有账号自定义登录,获取 Oauth2.0 的 AuthCode,并调用 ALBBOpenAccountSSOService 进行 Oauth 授权登录。

    如何实现asyncLoginGetAuthCode,请参见用户账号开发指南

    @implementation IMSAccountThirdViewController
    
    - (void)asyncLoginGetAuthCode:(void (^)(NSError * _Nullable error, NSString * _Nullable authCode))completionHandler {
        //自有账号登录并通过 OAuth2.0 服务获取 AuthCode
    }
    
    - (IBAction)onClickLogin:(id)sender {
        [self asyncLoginGetAuthCode:^(NSError * _Nullable error, NSString * _Nullable authCode) {
            if (error) {
                // 错误处理
                return;
            } else {
                id<ALBBOpenAccountSSOService> ssoService = ALBBService(ALBBOpenAccountSSOService);
                [ssoService oauthWithThirdParty:authCode delegate:self];
            }
        }];
    }
    @end
  2. 实现Oauth授权登录回调
    @interface IMSAccountThirdViewController () <SSODelegate>
    @end
    
    @implementation IMSAccountThirdViewController
    
    - (void)openAccountOAuthError:(NSError *)error Session:(ALBBOpenAccountSession *)session {
        if (!error) {
            //登录成功,发送登录成功通知,身份认证 SDK 会监听该通知进行用户身份凭证创建和管理
            NSString *loginNotificationName = [[IMSAccountService sharedService].sessionProvider accountDidLoginSuccessNotificationName];
            [[NSNotificationCenter defaultCenter] postNotificationName:loginNotificationName object:nil];
        } else {
            //处理登录失败
        }
    }
    @end