账号功能
更新时间:2025-06-16 16:58:02
账号和用户SDK提供了账号能力,包括注册、登录、登出等功能。开发可先阅读用户账号开发指南
内置账号体系
内置账号为RTCX平台提供的账号能力,包括验证码登录、自动登录、退出登录、发送验证码、重置密码。您在客户端集成后即可使用。
-
国内支持手机号与邮箱注册用户
-
海外目前仅支持邮箱注册用户
注册邮箱用户版本要求:v1.4.1
object OpenAccount{
/**
* 内置帐号 注册
*
* @param userRegisterReq [UserRegisterReq]
* @param iotCallback
*/
fun register(userRegisterReq: UserRegisterReq, iotCallback: IoTCallback)
/**
* 发送验证码
*
* @param sendCodeReq [SendCodeReq]
* @param iotCallback
*/
fun sendCode(sendCodeReq: SendCodeReq, iotCallback: IoTCallback)
/**
* 内置帐号登录
*
* @param userLoginReq
* @param iotCallback
*/
fun login(userLoginReq: UserLoginReq, iotCallback: IoTCallback)
/**
* 用户注销登录
*
*/
fun logout()
/**
* 检查用户是否已经登录
*
* @return [Boolean] true: 已登录
*/
fun checkUserLogin()
/**
* 用户重置密码
*
* @param userResetPwdReq [UserModifyPwdReq]
* @param iotCallback [UserResetPwdRsp]
*/
fun resetPassword(userResetPwdReq: UserResetPwdReq, iotCallback: IoTCallback)
/**
* 设置登录失效监听
*
* @param callback
*/
fun setTokenInvalidCallback(callback: IoTTokenInvalidCallback)
/**
* 用户登录后使用旧密码修改新密码
*
* @param userModifyPwdReq [UserModifyPwdReq]
* @param iotCallback [UserCommonRsp]
*/
fun modifyPassword(userModifyPwdReq: UserModifyPwdReq, iotCallback: IoTCallback)
/**
* 更新用户昵称
*
* @param nickname
* @param callback
*/
fun updateUserNickname(nickname: String, callback: IoTCallback)
/**
* 更新用户头像
*
* @param bitmap 头像图片
* @param listener 回调 成功返回头像地址url
*/
fun updateUserHeadImg(bitmap: Bitmap, listener: OnResultListener<String?>)
}
发送验证码
import com.polaris.iot.appsdk.libaccount.model.SendCodeReq;
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
import com.polaris.iot.appsdk.libaccount.enums.VerifyCodeType;
import com.polaris.iot.appsdk.libaccount.OpenAccount;
OpenAccount.sendCode(new SendCodeReq(
account, VerifyCodeType.LOGIN.getType()
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "发送验证码失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show();
}
});
用户注册
import com.polaris.iot.appsdk.libaccount.model.UserLoginReq;
import com.polaris.iot.appsdk.libaccount.enums.AccountType;
import com.polaris.iot.appsdk.libaccount.enums.PasswordType;
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
import com.polaris.iot.appsdk.libaccount.enums.VerifyCodeType;
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libcommon.utils.EncryptUtils.getMD5String
String account = "";
OpenAccount.sendCode(new SendCodeReq(
account, VerifyCodeType.REGISTER.getType()
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "发送验证码失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show();
}
});
String accountType = account.contains("@") ? AccountType.EMAIL.getType() : AccountType.MOBILE.getType())
String passwordType = account.contains("@") ? PasswordType.EMAIL_CODE.getType() : PasswordType.MOBILE_CODE.getType())
String password = "";
String verifiCode = "";
OpenAccount.register(
UserRegisterReq(
accountType, account, passwordType, getMD5String(password), verifyCode, null, null
), object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
mViewModel.enableRegisterBtn.set(true)
showToast(getString(R.string.tip_login_failed) + ":" + exception.message)
}
override fun onResponse(request: IoTRequest, response: IoTResponse) {
mViewModel.enableRegisterBtn.set(true)
//记录注册帐号
SharedPreferenceAppUtil.putString(Constants.SP_LOGIN_ACCOUNT_KEY, account)
finish()
}
})
用户登录
验证码登录
import com.polaris.iot.appsdk.libaccount.model.UserLoginReq;
import com.polaris.iot.appsdk.libaccount.enums.AccountType;
import com.polaris.iot.appsdk.libaccount.enums.PasswordType;
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
import com.polaris.iot.appsdk.libaccount.enums.VerifyCodeType;
import com.polaris.iot.appsdk.libaccount.OpenAccount;
OpenAccount.sendCode(new SendCodeReq(
account, VerifyCodeType.LOGIN.getType()
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "发送验证码失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show();
}
});
String account = "";
String accountType = account.contains("@") ? AccountType.EMAIL.getType() : AccountType.MOBILE.getType())
String passwordType =account.contains("@") ? PasswordType.EMAIL_CODE.getType() : PasswordType.MOBILE_CODE.getType())
String verifiCode = "";
OpenAccount.login(new UserLoginReq(
accountType, account, passwordType, verifiCode, null, null
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "登录失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
onLoginSuccess();
}
});
密码登录
import com.polaris.iot.appsdk.libaccount.model.UserLoginReq;
import com.polaris.iot.appsdk.libaccount.enums.AccountType;
import com.polaris.iot.appsdk.libaccount.enums.PasswordType;
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
import com.polaris.iot.appsdk.libaccount.enums.VerifyCodeType;
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libcommon.utils.EncryptUtils.getMD5String
String account = "";
String accountType = account.contains("@") ? AccountType.EMAIL.getType() : AccountType.MOBILE.getType())
String passwordType =PasswordType.PASSWORD.getType();
String password = "";
OpenAccount.login(new UserLoginReq(
AccountType.MOBILE.getType(), account, passwordType, getMD5String(password), null, null
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "登录失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
onLoginSuccess();
}
});
用户信息
版本要求:v1.4.1
package com.polaris.iot.appsdk.libaccount
object OpenAccount{
/**
* 获取登录的用户信息(非缓存)
*
* @param listener
*/
fun getLoginUserInfo(listener: OnResultListener<UserBaseInfo>?)
/**
* 获取登录用户基本信息 (从缓存中取)
*
* @return
*/
fun getLoginUserInfo(): UserBaseInfo
}
用户信息 UserBaseInfo
/**
* User login resp
*
* @property userId 用户ID
* @property userAccount 帐号
* @property nickname 用户名
* @property regionId 用户所在数据中心id
* @property headImg 头像地址
* @constructor Create empty User login resp
*/
data class UserBaseInfo(
val userId: Long,
val userAccount: UserAccount,
val nickname: String?,
val regionId: Int,
val headImg: String?,
)
退出登录
import com.polaris.iot.appsdk.libaccount.OpenAccount;
OpenAccount.logout();
自动登录
用户已登录帐号,再次启动app时做登录状态检查
import com.polaris.iot.appsdk.libaccount.OpenAccount;
boolean loginResult = OpenAccount.checkUserLogin();
//loginResult: true 已登录 false 需要登录
重置密码
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libcommon.utils.EncryptUtils.getMD5String
OpenAccount.sendCode(new SendCodeReq(
account, VerifyCodeType.RESET_PWD.getType()
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "发送验证码失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show();
}
});
OpenAccount.resetPassword(new UserResetPwdReq(
account, getMD5String(password), verifyCode
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast("重置失败:" + exception.getMessage());
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
UserResetPwdRsp userResetPwdRsp = (UserResetPwdRsp) response.getData();
assert userResetPwdRsp != null;
if (!userResetPwdRsp.getRetBool()) {
onFailure(request, new IoTSDKError(-1, ""));
return;
}
showToast("重置成功,请前往登录界面使用密码登录");
}
});
登录失效监听
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libapiclient.callback.IoTTokenInvalidCallback;
OpenAccount.setTokenInvalidCallback(new IoTTokenInvalidCallback() {
@Override
public void onTokenInvalid(@Nullable IoTSDKError error) {
Toast.makeText(getApplicationContext(), "登录失效,请重新登录", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
修改密码
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libcommon.utils.EncryptUtils.getMD5String
OpenAccount.modifyPassword(
UserModifyPwdReq(
getMD5String(oldPassword), getMD5String(password)
), object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
showToast(getString(R.string.label_failed) + ":" + exception.message)
}
override fun onResponse(request: IoTRequest, response: IoTResponse) {
destroyLoginInvalidateReceiver()
showAlert(getString(R.string.label_success), object : ModalDialog.OnClickListener {
override fun onClick(dialog: ModalDialog, btn: Button): Boolean {
doLogout()
return true
}
})
}
})
注销用户
import com.polaris.iot.appsdk.libaccount.OpenAccount;
OpenAccount.sendCode(new SendCodeReq(
account, VerifyCodeType.UNREGISTER.getType()
), new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "发送验证码失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
Toast.makeText(MainActivity.this, "发送验证码成功", Toast.LENGTH_SHORT).show();
}
});
val verifyCode = ""
OpenAccount.userDelete(verifyCode, object : IoTCallback {
override fun onFailure(request: IoTRequest?, exception: IoTSDKError) {
showToast(R.string.label_failed)
}
override fun onResponse(request: IoTRequest, response: IoTResponse) {
doLogout()
}
})
修改昵称
import com.polaris.iot.appsdk.libaccount.OpenAccount;
String nickname = "123123"
OpenAccount.updateUserNickname(nickname, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
showToast("修改失败:[" + exception.getCode() + "]" + exception.getMessage());
runOnUiThread(() -> {
btnModify.setEnabled(true);
});
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
runOnUiThread(() -> {
btnModify.setEnabled(true);
});
UserCommonRsp rsp = (UserCommonRsp) response.getData();
assert rsp != null;
if (!rsp.getRetBool()) {
onFailure(request, new IoTSDKError(-1, ""));
return;
}
showToast("修改成功");
}
});
修改头像
用户拍照或选择本地图像,转为bitmap上传到服务器
import com.polaris.iot.appsdk.libaccount.OpenAccount;
private void saveHeadImg(Uri uri) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(requireContext().getContentResolver(), uri);
if (bitmap == null) {
Toast.makeText(requireContext(), "选择图片失败", Toast.LENGTH_SHORT).show();
return;
}
OpenAccount.updateUserHeadImg(bitmap, new OnResultListener<String>() {
@Override
public void onResult(String headImgUrl) {
if (TextUtils.isEmpty(headImgUrl)) {
onError(new IoTSDKError());
return;
}
showUserHeadImg(headImgUrl);
}
@Override
public void onError(@NonNull IoTSDKError error) {
IoTLogger.e(TAG, "updateUserHeadImg onError", error);
Toast.makeText(requireContext(), "修改头像失败", Toast.LENGTH_SHORT).show();
}
});
} catch (IOException e) {
}
}
自有账号体系
需要在控制台配置好OAuth2协议交互所需AK/SK及接口地址
登录
import com.polaris.iot.appsdk.libaccount.model.UserLoginReq;
import com.polaris.iot.appsdk.libaccount.enums.AccountType;
import com.polaris.iot.appsdk.libaccount.enums.PasswordType;
import com.polaris.iot.appsdk.libcommon.constants.IoTSDKError;
import com.polaris.iot.appsdk.libapiclient.request.IoTRequest;
import com.polaris.iot.appsdk.libaccount.enums.VerifyCodeType;
import com.polaris.iot.appsdk.libaccount.OpenAccount;
import com.polaris.iot.appsdk.libcommon.utils.MD5Utils;
/**
*自有账号登录后分配的code
*/
String authCode = "";
OpenAccount.login(authCode, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
Toast.makeText(MainActivity.this, "登录失败:" + exception.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
onLoginSuccess();
}
});
退出登录
import com.polaris.iot.appsdk.libaccount.OpenAccount;
OpenAccount.logout();
自动登录
用户已登录帐号,再次启动app时做登录状态检查
import com.polaris.iot.appsdk.libaccount.OpenAccount;
boolean loginResult = OpenAccount.checkUserLogin();
//loginResult: true 已登录 false 需要登录