账号及用户SDK

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

初始化

初始化的操作请参见SDK初始化

说明

SDK使用Pod集成完成依赖添加后,还需要将ALBBOpenAccountUI.framework中的xib目录放置到主工程目录下(每次升级SDK后需要执行该操作)。

内置账号

  • 基础功能

    • 注册

      // 引入头文件
      #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 <IMSAccount/IMSAccountService.h>
      
      // 退出登录
      [[IMSAccountService sharedService] 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语言及资源文件设置

    • 集成以下依赖文件

    pod 'IMSOpenAccountCustom', '1.1.11'
    pod 'AlicloudALBBOpenAccount', '3.7.4'
    • 设置资源路径

      1. 将IMSOpenAccountCustom的IMSOpenAccountCustomResource.bundle下的xib放到主工程。

      2. 在调用oasdk 页面前设置资源路径。

      [ALBBOpenAccountUIManager sharedInstance].loadNibBundle 
      = [NSBundle mainBundle];
      
      
    • 设置多语言

      • 自定义方式(简单集成)

        1. 设置语言,只需要指定前缀即可。例如,中文设置为zh或ko等。

          // 使用默认的翻译资源文件
              [[IMSiLopOALanguageManage shareInstance]
              setOpenAccountModuleLanguageWithLanguagePrefix:@"ko"];
          
          
          // 使用自己的资源文件
          //拷贝IMSOpenAccountCustom下IMSOpenAccountCustomResource.bundle中的.lproj文件,整理一份相同key的多国语言翻译
              [[IMSiLopOALanguageManage shareInstance] 
              setOpenAccountModuleLanguageWithLanguagePrefix:@"ko" bundleName:@"xxxx"];
        2. OA模块可设置的语言种类与SDK相同,详细请参见通用SDKimage

      • 高度自定义方式(自定义较高)

        //一、设置云端语言,支持的语言种类请参见通用SDK
        [[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

    请参见定制iOS App的OA UI

三方自有账号

说明

在对接三方自有账号时,必须先完成SDK的初始化,SDK初始化请参见SDK初始化

  1. 引入依赖的头文件

    #import <ALBBOpenAccountSSO/ALBBOpenAccountSSOSDK.h>
    #import <IMSAccount/IMSAccountService.h>

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

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

    @implementation IMSAccountThirdViewController
    
    - (void)asyncLoginGetAuthCode:(void (^)(NSError * _Nullable error, NSString * _Nullable authCode))completionHandler {
        //自有账号登录并通过Oauth 2.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