账号管理

iOS SDK提供了账号系统相关SDK, 支持普通账号注册登录以及使用第三方账号登录两种模式, 账号系统需要使用ACAccountmanager类, 所以需要在项目相关的类的头部添加如下代码:

#import "ACAccountManager.h"

普通账号注册

建议的开发流程如下:

检查手机号是否注册

例如, 查询手机号 13012345678 是否已经注册

    [ACAccountManager checkExist:@"13012345678" callback:^(BOOL exist, NSError *error) {
        if (!error) {
            if (exist) {
                //TODO...
            }
        }
    }];

相关注意事项如下:

  1. 开发者应在调用该接口前检查用户输入的用户名是否合法. 简单的检查如: 检查手机号长度是否是11位等. 标准的检查方法: 使用正则表达式去检查用户输入的手机号/邮箱是否合法.
  2. 开发者在调用该方法前要检查参数是否为空值, 避免出现传入空值的现象.
  3. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确等.

发送验证码

在检查到手机号未被注册之后, 要给该手机号发送验证码, 以完成后续的注册

    [ACAccountManager sendVerifyCodeWithAccount:@"13012345678" template:1 callback:^(NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

相关注意事项如下:

  1. template字段为发送给用户的手机验证码模板类型, 使用之前需要先到- Domain、DomainID等概念详见控制台/短信管理中进行相关的操作, 提交短信模板的审核.
  2. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确等.
  3. 如果一分钟之类连续请求N次(N>=2)验证码, 则会出现不能重复请求的错误, 建议开发者在UI中的发送验证码按钮点击后开启定时器做一分钟倒计时, 同时禁用该按钮.
  4. 当发送手机号为国际号码时候,请将手机号前的“+”转换为“00”。

检查验证码正确性

在用户手机收到验证码, 并将其填写到UI对应位置时, 需要开发者检查用户输入的验证码是否正确, 调用如下接口(例如验证码是223344):

    [ACAccountManager checkVerifyCodeWithAccount:@"13012345678" verifyCode:@"223344" callback:^(BOOL valid, NSError *error) {
        if (!error) {
            if (valid) {
                //TODO...
            }
        }
    }];

相关注意事项如下:

  1. 调用该接口前, 开发者应检查验证码的位数是否正确, 验证码为6位数字.
  2. 验证码有效期是10分钟, 如果超出有效期, 会导致注册失败.
  3. 建议在输入验证码的时候弹出数组键盘, 杜绝用户输入英文字母等情况
  4. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确, 以及验证码是否以及过期, 以及注册手机号是否欠费停机等.

用户名和密码注册

采用「用户名 + 密码」注册时需要注意:密码是以明文方式通过 HTTPS 加密传输给云端, 云端会以密文存储密码,云端的加密算法采用sha1加盐算法.

换言之,用户的密码只可能用户本人知道,开发者不论是通过控制台还是 API 都是无法获取的.

SDK中提供了2个接口都可以完成注册, 开发者可根据实际需求自己选择.

例如, 注册一个用户的示例代码如下(用户名:13012345678, 密码:12345678, 昵称:Tom):

不带昵称注册:

    [ACAccountManager registerWithPhone:@"13012345678" email:nil password:@"12345678" verifyCode:@"223344" callback:^(NSString *uid, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

带昵称注册:

    [ACAccountManager registerWithNickName:@"tom" phone:@"13012345678" email:nil password:@"12345678" verifyCode:@"223344" callback:^(ACUserInfo *user, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

相关注意事项如下:

  1. 邮箱注册和手机号注册的流程是一样的, 使用其中一个注册, 只需要将另一个的参数设置为nil即可
  2. 如果注册的时候同时填写了手机号和邮箱, 那么默认都绑定到同一个账号上.
  3. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确, 以及验证码是否以及过期, 以及注册手机号是否欠费停机等.

普通账号登录

根据返回值的不同, 我们提供了两种登录方式,以满足不同场景的应用。

登陆成功之返回用户ID

对于不关心用户属性, 或者一个账号下有多个用户(例如智能秤)等情况, 可以使用如下接口, 登陆之后只返回用户id用来表示当前用户:

    [ACAccountManager loginWithAccount:@"13012345678" password:@"12345678" callback:^(NSString *uid, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

相关注意事项如下:

  1. 开发者应在调用该接口前检查用户输入的用户名是否合法. 简单的检查如: 检查手机号长度是否是11位等. 标准的检查方法: 使用正则表达式去检查用户输入的手机号/邮箱是否合法.
  2. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确, 以及用户名密码是否正确等.

单点登录

若有单点登录相关的业务需求可以通过调用一下接口强制将除本机以外所有客户端上的登录状态过期:

AC.accountManager.forceUpdateRefreshToken(new PayloadCallback<ACUserInfo>() {
    @Override
    public void success(ACUserInfo userInfo) {
        //获得用户userId和nickName     
    }

    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
})

相关注意事项如下:

  1. 此接口调用后无需再次进行登陆操作,内部自动更新重新生成的用户令牌及用户相关信息。

在其他被强制过期RefreshToken的客户端上可以使用如下回调方法做相应登出操作:

AC.accountMgr().setRefreshTokenInvalidCallback(new BaseCallback() {
    @Override
    public void error(ACException e) {
        //RefreshToken过期失效
    }
}

设置帐号附加属性

使用账号附加属性需要先到AbleCloud管理控制平台上的用户管理添加附加属性

步骤:登录AbleCloud平台-->用户管理-->附加属性-->新建

设置/更新用户附加属性

设置用户头像(设置头像不需要在AbleCloud控制台上新建附加属性字段)

    UIImage *image = [UIImage imageNamed:@{imageName}];
    [ACAccountManager setAvatar:image callback:^(NSString *avatarUrl, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

设置除用户头像外的其他属性;例如, 为当前用户添加年龄属性:

    ACObject *obj = [[ACObject alloc] init];
    [obj put:@"age" value:@15];
    [ACAccountManager setUserProfile:obj callback:^(NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

获取用户附加属性

    [ACAccountManager getUserProfile:^(ACObject *profile, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

第三方账号登陆

云平台支持使用第三方账号登陆, 开发者需要自行调用各个第三方平台的SDK, 将第三方平台返回的openID和token传入云平台即可.建议开发者在用户调用第三方账号登陆以后, 将第三方账号和云端账号进行绑定.目前云端支持如下平台:

  • 手机QQ
  • 新浪微博
  • 微信
  • 京东
  • Facebook
  • Twitter
  • Instagram

使用验证码登陆

    [ACAccountManager loginWithAccount:@"18811889988"
                            verifyCode:@"123456"
                              callback:^(ACUserInfo *user, NSError *error) {
                                  if (!error) {
                                                //TODO...
                                            }
                              }];

相关注意事项如下:

  1. 开发者应在调用该接口前检查用户输入的用户名是否合法. 简单的检查如: 检查手机号长度是否是11位等. 标准的检查方法: 使用正则表达式去检查用户输入的手机号/邮箱是否合法.
  2. 若登陆的账户尚未注册,此接口会自动注册此账户并返回账户信息。
  3. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确等.

使用第三方账号登陆

    [ACAccountManager loginWithOpenId:@"<Weibo-OpenId>" provider:ACAccountManagerLoginProviderWeibo accessToken:@"<Weibo-Token>" callback:^(ACUserInfo *user, NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

相关注意事项如下:

  1. 使用第三方登陆之前要分别取第三方平台注册APP信息.
  2. 使用第三方账号登陆时, 一定要检查第三方APP是否已安装, 在UI中隐藏掉未安装的APP, 否则可能会影响上架. 隐藏的方法对应的第三方平台SDK都会有提供
  3. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确等.

第三方账号与普通账号绑定

建议开发者在用户使用第三方账号登陆之后, UI弹窗提示绑定平台账号. 绑定成功后下次登陆即可以使用绑定的手机号/邮箱进行登陆

将账号与手机号进行绑定. 例如(要绑定手机号:13012345678, 密码:12345678, 验证码:223344):

[ACAccountManager bindAccountWithEmail:nil
                                 phone:@"13012345678"
                              password:@"12345678"
                              nickName:@"John"
                            verifyCode:@"223344"
                              callback:^(NSError *error) {
                                  if (!error) {
                                      //TODO...
                                             }
                              }];

相关注意事项如下:

  1. 建议开发者在调用该接口的时候,将填写手机号/邮箱, 输入验证码, 输入密码分成三个界面去做, 每一个页面只完成一项功能, 防止用户由于单个页面填写太多文字而造成厌烦心理。
  2. 绑定后的账号既可以用第三方账号登陆, 也可使用手机号/邮箱登陆。
  3. 如果绑定失败, 请根据错误信息自行检查,包括网络是否通畅, 手机号/邮箱是否已经存在等。
  4. 邮箱和电话二者选其一或者两者同时填入均可。

普通账号绑定第三方账号

如果开发者在使用普通注册账号进行登陆之后, 需要添加第三方账号信息, 可调用如下接口, 以添加微博为例:

    [ACAccountManager bindWithOpenId:@"<Weibo-OpenId>" provider:ACAccountManagerLoginProviderWeibo accessToken:@"<Weibo-Token>" callback:^(NSError *error) {
        if (!error) {
            //TODO...
        }
    }];

相关注意事项如下:

  1. 使用第三方登陆之前要分别取第三方平台注册APP信息.
  2. 使用第三方账号登陆时, 一定要检查第三方APP是否已安装, 在UI中隐藏掉未安装的APP, 否则可能会影响上架. 隐藏的方法对应的第三方平台SDK都会有提供
  3. 如果该接口返回错误, 请根据错误信息自行检查,包括网络是否通畅, 参数是否正确等.