短信登录
# 文档说明
本文为您介绍Android客户端如何接入短信登录功能。短信登录功能,即向用户手机号发送短信验证码,用户凭借手机号和短信验证码到IDaaS服务端认证。
# 流程说明
短信登录使用场景:用户输入手机号,点击获取短信验证码按钮,拉起滑块校验,校验成功后,IDaaS后台发送短信验证码到此手机号。用户输入验证码,点击登录后,IDaaS后台认证,返回票据。最终认证结果返回给App。
# 短信登录流程
集成流程说明
用户输入手机号,App客户端检查手机号是否符合格式规则。用户点击获取验证码。
App客户端调用滑块验证方法,IDaaS SDK请求IDaaS后端滑块校验初始化信息,在页面展示滑块校验窗口。
用户拖动滑块,完成滑块校验,IDaaS SDK完成采集滑块校验信息,请求IDaaS服务端进行校验。
IDaaS服务端完成滑块校验成功,返回token给IDaaS SDK。
IDaaS SDK拿到token,用token请求IDaaS服务端发送短信。
用户接收到短信,填入验证码,点击登录。
App客户端用手机号和验证码,调用IDaaS SDK的短信登录方法。
IDaaS SDK 请求短信登录,IDaaS 服务端发起认证流程,认证成功返回Session token给IDaaS SDK;认证不成功返回错误码和信息给IDaaS SDK。
IDaaS SDK拿到登录结果,返回给App客户端,App客户端通过结果进入app自己的流程。
# 环境搭建
# 引入依赖包
AuthnCenter_Common-1.5.3.aar //Common 包
AuthnCenter_SMSLogin-1.5.3.aar //短信登录 sdk
2
# 配置build.gradle
将arr包放在App工程下的libs目录下,在bulid.gradle中写入以下代码。
/*begin*/
/* rxjava2 + okhttp + retrofit2 */
api 'io.reactivex.rxjava2:rxjava:2.2.10'
api 'io.reactivex.rxjava2:rxandroid:2.1.1'
api 'com.squareup.retrofit2:retrofit:2.6.0'
api 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'
api 'com.squareup.retrofit2:converter-gson:2.6.0'
api 'com.squareup.okhttp3:okhttp:4.3.1'
api 'com.squareup.okhttp3:logging-interceptor:3.6.0'
api 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
api 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
/*end*/
/*begin*/
/* fastjson */
api 'com.alibaba:fastjson:1.2.61'
/*end*/
/*begin*/
/* AuthnCenter_Common+ AuthnCenter_SMSLogin */
implementation(name: 'AuthnCenter_Common-1.5.3', ext: 'aar')
implementation(name: 'AuthnCenter_SMSLogin-1.5.3.aar', ext: 'aar')
/*end*/
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 配置AndroidManifest
此模块SDK 无特殊声明与注册。
# 开发集成
# SDK初始化
AuthnCenterSDK.Builder()
.init(this)
.setBaseUrl("https://xxx.xxx.com") //租户域名
.setClientId("xxxx") //租户后台应用client-id
.isCheckSSL(false) //是否检测SSL证书
.logEnable(false).build(); //是否打开http请求log
2
3
4
5
6
基本配置初始化主类AuthnCenterSMSLogin方法简介:
/**
* 短信验证码 -- 发送短信
*/
public void smsSend(Context context, SendSmsReq req, RequestListener listener)
/**
* 获取国家区号 注意 如果配置了国家区号需要调用此接口获取国家区号
*/
public void getCountryCode(Context context, RequestListener listener)
2
3
4
5
6
7
8
9
10
11
内置滑动校验:
BlockPuzzleDialog mBlockPuzzleDialog = new BlockPuzzleDialog(mContext);
mBlockPuzzleDialog.setOnResultsListener(new OnResultsListener() {
@Override
public void onResultsClick(String result) {
LogUtil.getInstance().d("二次校验回调结果 mCaptchaToken:" + result);
//这个回调结果就是短信校验的captchaToken参数
}
@Override
public void onError(String code, String msg) {
ToastUtils.ShowToast(mContext, String.format("错误码 : %s 错误信息 : %s", code, msg));
}
});
}
2
3
4
5
6
7
8
9
10
11
12
13
14
调用顺序:
(1)如果开启了国际号码支持 请自行先行调用国际区号获取接口,进行界面绑定与展示并在需要传入手机号的方法上,自行组装国际区号(例如:+86-13800000000)传入即可 ,如未开启支持 则忽略此接口。
(2)调用滑块校验 (BlockPuzzleDialog ) 传入手机号
(3)调用发送短信验证码(smsSend) 传入手机号 滑动校验结果
(4)调用短信登录方法(smsLogin) 传入手机号 短信验证码
2
3
4
# 发送短信验证
App客户端需要有自己的UI界面,界面包含几个必要组件:手机号输入框,验证码输入框,触发获取验证码的按钮(或者事件),登录的按钮(或者事件)。
在用户填入手机号码后,点击(触发)发送验证码事件之前,App客户端做手机号格式检查。
点击(触发)发送验证码事件,App客户端调用IDaaS SDK的发送验证码方法,示例如下:
//发送验证码
SendSmsReq sendSmsReq = new SendSmsReq();
sendSmsReq.setMobile(getPhoneNum());
sendSmsReq.setType(SendSmsType.login);
sendSmsReq.setCaptcha_token(“滑动验证码成功之后返回结果”);
AuthnCenterAPI.Builder().smsSend(mContext, sendSmsReq
, new RequestListener<BaseResponse>() {
@Override
public void success(BaseResponse rsp) {
}
@Override
public void error(String code, String errorMessage) {
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
# 手机号和短信验证码登录
完成上一个验证码发送,用户收到短信验证码,填入验证码框,触发登录事件,此时App客户端调起短信登录流程,示例代码如下:
AuthnCenterSMSLogin.Builder().smsLogin(mContext, moblie, verifyCode, new LoginListener() {
@Override
public void success(String code, String data) {
ToastUtils.ShowToast(mContext, "短信登录成功,返回数据为:" + data);
}
@Override
public void error(String code, String msg) {
ToastUtils.ShowToast(mContext, msg);
}
});
2
3
4
5
6
7
8
9
10
11
# 返回码
状态码 | 错误码 (error_code) | 错误说明 (error_msg) | 处理措施 |
---|---|---|---|
400 | IDAAS.SDK.COMMON.1001 | Parameter {0} cannot be left blank | |
参数 {0} 不能为空 | |||
400 | IDAAS.SDK.COMMON.1002 | The {0} parameter format is incorrect | |
参数 {0} 格式错误 | |||
400 | IDAAS.SDK.COMMON.1003 | Device information is incomplete | |
设备信息不完整 | |||
400 | IDAAS.SDK.COMMON.1004 | Signature decryption error | |
签名解密错误 | |||
400 | IDAAS.SDK.COMMON.1005 | The {0} has failed | |
{0} 已失效 | |||
400 | IDAAS.SDK.COMMON.1006 | The {0} parameter error | |
{0} 参数错误 | |||
400 | IDAAS.SDK.COMMON.1007 | The {0} parameter type error | |
{0}参数类型错误 | |||
500 | IDAAS.SDK.COMMON.1008 | The system is busy. Try again later | |
系统繁忙。稍后再试 | |||
400 | IDAAS.SDK.COMMON.1009 | Unknown authentication configuration | |
未知的认证配置 | |||
400 | IDAAS.SDK.COMMON.1010 | Failed to obtain the enterprise center global configuration | |
获取企业中心全局配置失败 | |||
400 | IDAAS.SDK.COMMON.1011 | Failed to obtain the international area code configuration | |
获取国际区号配置失败 | |||
400 | IDAAS.SDK.COMMON.1012 | The x-client-ID is incorrect and the corresponding application cannot be found | |
X-client-id错误,找不到对应的应用 | |||
400 | IDAAS.SDK.COMMON.1013 | The corresponding user is not found | |
未找到对应的用户 | |||
400 | IDAAS.SDK.COMMON.1014 | Application private key not found | |
未找到应用私钥 | |||
400 | IDAAS.SDK.LOGIN.1001 | Error calling interface {0} | |
调用 {0} 接口出错 | |||
400 | IDAAS.SDK.LOGIN.1002 | User not bound | |
用户未绑定 | |||
400 | IDAAS.SDK.LOGIN.1003 | The user has been locked due to too many unsuccessful login attempts. It will be unlocked in {0} minutes and {1} seconds | |
由于多次登录失败,用户已被锁定。 它将在 {0} 分钟和 {1} 秒内解锁 | |||
400 | IDAAS.SDK.LOGIN.1004 | Failed to obtain the password policy | |
获取密码策略错误 | |||
400 | IDAAS.SDK.LOGIN.1005 | Invalid username or password. Remaining login attempts: {0} | |
无效的用户名或密码。 其余登录尝试次数:{0} | |||
400 | IDAAS.SDK.LOGIN.1006 | Configuration error, unable to find wechat authentication source | |
配置错误,找不到微信认证源 | |||
400 | IDAAS.SDK.LOGIN.1007 | Configuration error, unable to find alipay authentication source | |
配置错误,找不到支付宝认证源 | |||
400 | IDAAS.SDK.LOGIN.1008 | The configuration is incorrect. The one-click login authentication source cannot be found | |
配置错误,无法找到一键登录认证源 | |||
400 | IDAAS.SDK.SMS.1001 | {0} slide base map is not initialized successfully, please check the path | |
{0} 滑动底图未初始化成功,请检查路径 | |||
400 | IDAAS.SDK.SMS.1002 | {0} verification code coordinate resolution failed | |
{0} 验证码坐标解析失败 | |||
400 | IDAAS.SDK.SMS.1003 | {0} verification code coordinate verification fails | |
{0} 验证码坐标校验失败 | |||
400 | IDAAS.SDK.SMS.1004 | The graphic verification code is incorrect | |
图形验证码校验错误 | |||
400 | IDAAS.SDK.SMS.1005 | SMS verification code verification is incorrect | |
短信验证码验证错误 | |||
400 | IDAAS.SDK.SMS.1006 | The email verification code is incorrect | |
邮件验证码验证错误 | |||
400 | IDAAS.SDK.SMS.1007 | Sending scenario does not exist | |
发送场景不存在 | |||
400 | IDAAS.SDK.SMS.1008 | Failed to send the verification code | |
发送验证码失败 | |||
400 | IDAAS.SDK.SOCIAL.1001 | The social account is unbound incorrectly | |
社交账号解绑错误 | |||
400 | IDAAS.SDK.SOCIAL.1002 | The social account has been bound, please unbind it first | |
社交账号已绑定,请先解绑 | |||
400 | IDAAS.SDK.PWD.1001 | The password length is incorrect | |
密码长度错误 | |||
400 | IDAAS.SDK.PWD.1002 | The password cannot be the username | |
密码不能为用户名 | |||
400 | IDAAS.SDK.PWD.1003 | Your password complexity is low | |
你的密码复杂度过低 | |||
400 | IDAAS.SDK.PWD.1004 | The password is weak | |
密码很弱 | |||
400 | IDAAS.SDK.PWD.1005 | The password is used before, cannot be used again | |
该密码已被使用过,不能再次使用 | |||
400 | IDAAS.SDK.PWD.1006 | Password cannot username in reverse order | |
密码不能是用户名的倒序 | |||
400 | IDAAS.SDK.PWD.1007 | The number of repeated password characters exceeded the upper limit | |
密码重复字符数超过限制 | |||
400 | IDAAS.SDK.PWD.1008 | Password cannot contain :username, phone number, email prefix, name in PinYing | |
密码不能包含:用户名、电话号码、邮件前缀、拼音名 | |||
400 | IDAAS.SDK.MFA.1001 | The mobile doesn't match the user | |
手机号和用户不匹配 | |||
400 | IDAAS.SDK.MFA.1002 | The access control policy is incorrect | |
访问控制策略配置错误 | |||
400 | IDAAS.SDK.MFA.1003 | Access control authentication source type conversion error | |
访问控制身份验证源类型转换错误 |