{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508912813,"data":{"id":71712272,"title":"9.2.3 基础账号操作","slug":"fpb184","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

一、获取验证码

验证码的使用场景有注册、登录、注销等,每次获取到的验证码有效时间为30分钟,使用后立即失效。相邻两次验证码的请求间隔不得低于1分钟。

时序图

关键参数


核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(VerificationCodeRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, VerificationCodeResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 请求获取验证码\nVerificationCodeRequest loginVerifyReq = new VerificationCodeRequest();\nloginVerifyReq.targetValue = mobileInput;\nloginVerifyReq.targetType = VerificationTargetType.VerificationTargetTypeSms;\nloginVerifyReq.codeType = VerificationCodeType.VerificationCodeTypeMobileLogin; // 手机号登录\nloginVerifyReq.bindMode = true;\nloginVerifyReq.skipNew = true;\nint res = accountPresenter.executeRequest(loginVerifyReq);\n\n// 异步回调结果处理\npublic void notify(int errCode, int taskId, VerificationCodeResult result) {\n    int resultCode = result == null ? AutoConstant.DEFAULT_ERR_CODE : result.code;\n    boolean sendSuccess = errCode == ErrorCode.ErrorCodeOK && resultCode == 1;\n    String msg = "发送验证码:" + (sendSuccess ? "成功" : "失败") + " " + errCode + "\\n" + CommonUtil.toPrettyJson(result);\n    LoggerUtil.w(TAG, msg);\n    tv_msg.setText(msg);\n}

二、检测账户是否存在

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AccountCheckRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AccountCheckResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 检查账号是否存在\nAccountCheckRequest checkReq = new AccountCheckRequest();\nint res = accountPresenter.executeRequest(checkReq);\n\n// 检查账号是否存在请求异步回调处理\npublic void notify(int errCode, int taskId, AccountCheckResult result) {\n    // 回调结果处理\n}

三、账号注册

账号注册功能实现涉及两个接口调用,首先调用获取验证码接口请求注册验证码,其次将手机端收到的验证和对应的手机号作为参数调用注册接口完成账号注册,账号注册成功后,设备并没有登录,需要再次调用登录相关接口实现设备登录。

场景图

时序图

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AccountRegisterRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AccountRegisterResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 注册请求\nAccountRegisterRequest registerReq = new AccountRegisterRequest();\nregisterReq.code = codeInput;\nregisterReq.mobileNum = mobileInput;\nint res = accountPresenter.executeRequest(registerReq);\nLoggerUtil.d(TAG, "call register result: " + res);\n\n// 异步注册结果处理\npublic void notify(int errCode, int taskId, AccountRegisterResult result) {\n    if (result != null && result.code == 1) {\n        LoggerUtil.i(TAG, "AccountRegisterResult notify: res=" + result.code + "; taskId=" + taskId);\n        tv_msg.setText("注册成功,状态: " + result.profile.username + "已登录");\n    } else {\n        tv_msg.setText("注册失败");\n    }\n}

四、账号登陆

4.1 手机验证码登录

手机验证码登录账号注册功能实现涉及两个接口调用,首先调用获取验证码接口请求登录验证码,其次将手机端收到的验证和对应的手机号作为参数调用验证码登录接口完成账号登录。

PS: 若手机号没有注册,系统直接用该手机号码注册一个账号并完成登陆。

场景图

时序图

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(MobileLoginRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, MobileLoginResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 登录请求\nMobileLoginRequest loginReq = new MobileLoginRequest();\nloginReq.code = codeInput;  // 验证码\nloginReq.mobileNum = mobileInput; // 手机号\nint res = accountPresenter.executeRequest(loginReq);\n\n// 异步登录结果处理\npublic void notify(int errCode, int taskId, MobileLoginResult result) {\n    if (result != null && result.code == 1) {\n        LoggerUtil.i(TAG, "MobileLoginResult notify: res=" + result.code + "; taskId=" + taskId);\n        LoggerUtil.i(TAG, "userId=" + result.profile.uid);\n        tv_msg.setText("状态:" + result.profile.username + "已登录," + "id = " + result.profile.uid);\n        AutoConstant.userId = result.profile.uid;\n        AosManager.getInstance().setUid(AutoConstant.userId);\n    } else {\n        LoggerUtil.w(TAG, "登录失败:" + errCode);\n        tv_msg.setText("登录失败:" + errCode);\n    }\n}

4.2 Amap扫描二维码登录

二维码扫码登录功能实现涉及两个接口调用,首先调用二维码获取接口请求登录二维码,成功回调后将收到二维码的图片数据用于显示和二维码对应的id,二维码的有效时间为5分钟;其次将二维码id作为参数调用二维码轮询接口,每个二维码只需要发起一次轮询请求。轮询期间会多次回调通知轮询状态,只需要关注 是否扫码登陆 以及 二位码是否超时失效 这两个状态即可。

场景图

时序图

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(QRCodeLoginRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(ErrorCode, int, QRCodeLoginResult)

int com.autonavi.gbl.user.account.AccountService.executeRequest(QRCodeLoginConfirmRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, QRCodeLoginConfirmResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 获取登录二维码\nQRCodeLoginRequest qrReq = new QRCodeLoginRequest();\nint res = accountPresenter.executeRequest(qrReq);\n\n// 异步获取二维码回调处理\npublic void notify(@ErrorCode.ErrorCode1 int errCode, int taskId, QRCodeLoginResult result) {\n    LoggerUtil.i(TAG, "QRCodeLoginResult notify: res=" + (result == null ? -9527 : result.code) + "; taskId=" + taskId);\n\n    int resultCde = result == null ? 0 : result.code;\n    QRCodeInfo qrcode = result == null ? null : result.qrcode;\n    BinaryStream data = qrcode == null ? null : qrcode.data;\n    byte[] buffer = data == null ? null : data.buffer;\n\n    if (resultCde == 1 && buffer != null) {\n        //将字节数组转换为ImageView可调用的Bitmap对象\n        Bitmap myBitmap = getPicFromBytes(buffer, null);\n        tv_msg.setText("生成了二维码" + qrcode.id);\n        iv_qrcode.setImageBitmap(myBitmap);\n    } else {\n        LoggerUtil.i(TAG, "生成二维码失败");\n        tv_msg.setText("生成二维码失败");\n    }\n}\n\n// 长轮询是否扫码\nQRCodeLoginConfirmRequest req = new QRCodeLoginConfirmRequest();\nreq.qrcodeId = qrCodeId;\nint reqResult = AccountPresenter.getInstance().executeRequest(req);\n\n// 异步长轮询是否扫码回调处理\npublic void notify(int errCode, int taskId, QRCodeLoginConfirmResult result) {\n    if (result != null) {\n        LoggerUtil.i(TAG, "QRCodeLoginResult notify: res=" + result.code + "; taskId=" + taskId);\n        if (errCode == com.autonavi.gbl.util.errorcode.Common.Service.ErrorCodeOK) {\n            LoggerUtil.i(TAG, "QRCodeLoginConfirmResult notify: res=" + result.code + "; taskId=" + taskId);\n            if (result.code == 7) {\n                tv_msg.setText("二维码超时失效了...");\n            }\n        } else if (errCode == com.autonavi.gbl.util.errorcode.User.Account.ErrorCodeLoginSuccess) {\n            LoggerUtil.i(TAG, "QRCodeLoginConfirmResult notify: res=" + result.code + "; taskId=" + taskId);\n            tv_msg.setText("二维码登录成功了");\n        } \n    } else {\n        tv_msg.setText("长轮询是否扫码登录回调通知返回null");\n    }\n}

PS: 轮询扫码回调只需要关注 是否扫码登陆 以及 二维码是否超时失效 这两个状态即可

五、账号信息获取

5.1 获取账号信息

通过调用账号服务在线接口获取账号信息,获取的信息最准确,会更新登陆Cookie有效期,同时该接口也可以用来检测端上的登陆信息是否有效。

时序图

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AccountProfileRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AccountProfileResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 获取账户信息\nAccountProfileRequest profileReq = new AccountProfileRequest();\nprofileReq.mode = 0; //获取用户基本信息\nint res = accountPresenter.executeRequest(profileReq);\n\n// 异步注册结果处理\npublic void notify(int errCode, int taskId, AccountProfileResult result) {\n    LoggerUtil.i(TAG, "获取用户信息回调通知: " + errCode + "," + taskId);\n    if (result != null && result.code == 1) {\n        LoggerUtil.i(TAG, "AccountProfileResult notify: res=" + result.code + "; taskId=" + taskId);\n        tv_msg.setText("信息: 用户名=" + result.profile.username \n                       + "; ID=" + result.profile.uid \n                       + "; 昵称=" + result.profile.nickname\n                       + "; 头像URL" + result.profile.avatar\n                      );\n\n        AutoConstant.userId = result.profile.uid; // 保存\n        AosManager.getInstance().setUid(AutoConstant.userId);\n    } else {\n        tv_msg.setText("获取用户信息失败");\n    }\n}

5.2 获取用户头像

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AvatarRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AvatarResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

AvatarRequest avatarReq = new AvatarRequest();\nint res = accountPresenter.executeRequest(avatarReq);\n\n// 头像获取请求异步回调处理\npublic void notify(int errCode, int taskId, AvatarResult result) {\n    // 回调结果处理\n}

六、退出登录

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AccountLogoutRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AccountLogoutResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 退出登录请求\nAccountLogoutRequest logoutReq = new AccountLogoutRequest();\nint res = accountPresenter.executeRequest(logoutReq);\n\n// 退出登录请求异步回调处理\npublic void notify(int errCode, int taskId, AccountLogoutResult result) {\n    if (result != null && result.code == 1) {\n        AutoConstant.userId = "";\n        LoggerUtil.i(TAG, "AccountLogoutResult notify: res=" + result.code + "; taskId=" + taskId);\n        tv_msg.setText("状态: 已登出");\n    } else {\n        tv_msg.setText("登出失败");\n    }\n}

九、账号注销

场景图

\"image.png\"

时序图

关键参数

核心接口

int com.autonavi.gbl.user.account.AccountService.executeRequest(AccountUnRegisterRequest)

void com.autonavi.gbl.user.account.observer.IAccountServiceObserver.notify(int, int, AccountUnRegisterResult)


说明:函数详情,请复制函数名称到在线API搜索

调用示例

// 请求注销账号\nAccountUnRegisterRequest request = new AccountUnRegisterRequest();\nint res = accountPresenter.executeRequest(request);\n\n// 检查账号是否存在请求异步回调处理\npublic void notify(int errCode, int taskId, AccountUnRegisterResult result) {\n    // 回调结果处理\n    // 删除对应同步库数据\n    if (result.code == 0) {\n    \tmUserTrackService.deleteLocalSyncData(userId)\n    }\n    \n}


","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:05:43","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":253,"collectCount":0,"estimateDate":25,"docStatus":0,"permissions":true,"overView":false}}