帐号管理

普通帐号注册

account_register

1、获取账号管理器

//账号管理器SDK内部的实现为单例模式
ACAccountMgr accountMgr = AC.accountMgr();

2、检查手机号是否已注册

accountMgr.checkExist(phone, new PayloadCallback<Boolean>() {
    @Override
    public void success(Boolean isExist) {
        if (!isExist) {
            //发送验证码
        } else {
            //提示手机号已被注册 
        }
    }
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

3、发送验证码

//1代表AbleCloud短信内容模板,具体开发需要先把短信模板提交到AbleCloud管理控制台再获取对应的参数
accountMgr.sendVerifyCode(phone, 1, new VoidCallback() {
    @Override
    public void success() {
        //检测验证码
    }
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

注意:
1.由于第三方短信服务限制,每个手机账号每天最多只能发送10条短信验证码,请不要做重复发送验证码测试。 2.当发送手机号为国际号码时候,请将手机号前的“+”转换为“00”。

4、检测验证码正确性

accountMgr.checkVerifyCode(phone,verifyCode, new PayloadCallback<Boolean>() {
    @Override
    public void success(Boolean result) {
        if (result) {
            //注册
        } else {
            //提示验证码错误 
        }
    }
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

5、注册

//emai和phone可以任选其一;nickName为可选项,没有时传空字符串
accountMgr.register(email, phone, password, nickName, verifyCode, new PayloadCallback<ACUserInfo>() {
    @Override
    public void success(ACUserInfo userInfo) {
        //获得用户userId和nickName,由此进入主页或设备管理
    }   
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

普通账号登录

用户调用登录接口成功之后,会在app本地存储一个token,下次启动app时即默认app已经登录,无需再进行登录,从v1.09版本之后,这个token具有有效期,在长期未使用app的情况下会过期,这个时候需要进行重新登录处理,所以建议在App启动时通过账号管理的isLogin()接口判断是否已登录。

ACAccountMgr accountMgr = AC.accountMgr();
if(accountMgr.isLogin()){
    //由此进入主页
    return;
} else{
    //提示让用户输入用户名及密码
}

点击登录按钮后,调用登录接口

//account为手机号/邮箱
accountMgr.login(account, password, new PayloadCallback<ACUserInfo>() {
    @Override
    public void success(ACUserInfo userInfo) {
        //获得用户userId和nickName,由此进入主页             
    }

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

验证码登录

//account为手机号/邮箱
AC.accountMgr().loginWithVerifyCode(account, verifyCode, new PayloadCallback<ACUserInfo> callback) {
    @Override
    public void success(ACUserInfo userInfo) {
        //获得用户userId和nickName,由此进入主页             
    }

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

相关注意事项如下:

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

单点登录

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

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平台–>用户管理–>附加属性–>新建

1、设置/更新用户附加属性

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

//picture为图片的二进制流,请自行为其初始化
byte[] picture;
AC.accountMgr().setAvatar(picture, new PayloadCallback<String>() {
    @Override
    public void success(String url) {
        //头像设置成功,返回url,同时也可通过调用getUserProfile接口获取头像url
    }

    @Override
    public void error(ACException e) {
        //上传失败,检查网络问题
    }
});

设置除用户头像外的其他属性

ACObject userProfile = new ACObject();
//注意此处put进去的key与value类型对应新建附加属性时填写的属性标识与属性类型
userProfile.put("city", "北京")
userProfile.put("birthday", "1989-10-13")
AC.accountMgr().setUserProfile(userProfile, new VoidCallback() {
    @Override
    public void success() {
        //附加属性设置成功
    }

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

2、获取用户自定义附加属性

AC.accountMgr().getUserProfile(new PayloadCallback<ACObject>() {
     @Override
     public void success(ACObject object) {
         //可通过object.toString()查看附加属性信息
         String city = object.get("city");
         String birthday= object.get("birthday");
     }

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

第三方登录

account_Oauth

1、直接使用第三方登录

//APP端在完成OAuth认证登录之后可以获取到openId和accessToken
AC.accountMgr().loginWithOpenId(ACThirdPlatform.QQ, openId, accessToken, new PayloadCallback<ACUserInfo>() {
    @Override
    public void success(ACUserInfo userInfo) {
        //获得用户userId和nickName,进入主页或设备管理
    }   
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});
//绑定一个未被注册的普通帐号;emai和phone可以任选其一;nickName为可选项,没有时传空字符串
AC.accountMgr().bindWithAccount(email, phone, password, nickName, verifyCode, new VoidCallback() {
    @Override
    public void success() {
        //绑定账号成功
    }
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

2、在已有普通账号登录时绑定第三方账号

AC.accountMgr().bindWithOpenId(ACThirdPlatform.QQ, openId, accessToken, new VoidCallback() {
    @Override
    public void success() {
        //成功绑定第三方账号
    }
    @Override
    public void error(ACException e) {
        //网络错误或其他,根据e.getErrorCode()做不同的提示或处理
    }
});

:该接口需要在使用普通账户登录之后才可以调用