提供自建账号体系能力,包括注册、登录、登出、获取账号、会话管理、人机校验、登录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; }
登录失效处理
参见身份认证SDK中API请求的认证错误处理章节。
OA语言及资源文件设置
集成以下依赖文件
pod 'IMSOpenAccountCustom', '1.1.11' pod 'AlicloudALBBOpenAccount', '3.7.4'
设置资源路径
将IMSOpenAccountCustom的IMSOpenAccountCustomResource.bundle下的xib放到主工程。
在调用oasdk 页面前设置资源路径。
[ALBBOpenAccountUIManager sharedInstance].loadNibBundle = [NSBundle mainBundle];
设置多语言
自定义方式(简单集成)
设置语言,只需要指定前缀即可。例如,中文设置为zh或ko等。
// 使用默认的翻译资源文件 [[IMSiLopOALanguageManage shareInstance] setOpenAccountModuleLanguageWithLanguagePrefix:@"ko"]; // 使用自己的资源文件 //拷贝IMSOpenAccountCustom下IMSOpenAccountCustomResource.bundle中的.lproj文件,整理一份相同key的多国语言翻译 [[IMSiLopOALanguageManage shareInstance] setOpenAccountModuleLanguageWithLanguagePrefix:@"ko" bundleName:@"xxxx"];
OA模块可设置的语言种类与SDK相同,详细请参见通用SDK。
高度自定义方式(自定义较高)
//一、设置云端语言,支持的语言种类请参见通用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初始化。
引入依赖的头文件
#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
实现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