这个项目是什么
登录、注册、找回密码都要收短信验证码,用户来回切换应用看短信再手动输入,体验很割裂。AutoVerifyCode 把这段流程包成一个库:监听短信、按规则过滤出验证码,自动填进指定的 EditText。运行时权限申请也内置了,不用在每个页面再写一遍短信权限逻辑。
核心实现
库的配置集中在 AutoVerifyCodeConfig,用 Builder 构造,可配置的项包括:
- 验证码长度
- 验证码类型:大写字母、小写字母、大小写字母、数字、数字字母
- 短信发送者号码,或发送者号码的前几位
- 短信正文的开头文字
- 短信正文包含的关键字
后两项用于区分场景。同一个应用里注册和重置密码的短信文案不同,发送号码也可能不同,用开头文字和包含文字过滤,能避免拿到不该拿的那条。比如验证码短信统一以「【守护APP】」开头,重置类短信正文含「重置」,两个条件一卡,基本不会误匹配。
除了自动填入,短信内容、发送者、解析出的验证码都通过 SmsCallBack 回调出来,可以自己做后续处理。权限走 PermissionCallBack,onFail() 返回 true 表示重试申请;README 的注释里也说明,可以自己手动去申请权限,申请完再返回 true。
使用方法
最简单的用法,适用于 4 到 6 位数字验证码:
AutoVerifyCode.getInstance()
.with(MainActivity.this)
.into((EditText) findViewById(R.id.et_code))
.start();
需要精细控制时,先建配置再链式设置回调:
AutoVerifyCodeConfig config = new AutoVerifyCodeConfig.Builder()
.codeLength(6)
.smsCodeType(AutoVerifyCodeConfig.CODE_TYPE_NUMBER)
.smsSenderStart("650")
.smsSender("6505551212")
.smsBodyStartWith("【守护APP】")
.smsBodyContains("重置")
.build();
AutoVerifyCode.getInstance()
.with(MainActivity.this)
.config(config)
.smsCallback(new MessageCallBack())
.permissionCallback(new PerCallBack())
.inputCompleteCallback(new OnInputCompleteListener() {
@Override
public void onInputComplete(String text) {
// 自动输入完毕,可以继续登录流程
}
})
.into((EditText) findViewById(R.id.et_code))
.start();
回调接口按 README 的写法实现即可:SmsCallBack 有 onGetCode、onGetMessage、onGetSender 三个方法,PermissionCallBack 有 onSuccess 和 onFail。
踩坑与思考
README 特意提了释放。这个库一般只用一次,所以页面销毁时要调用:
@Override
protected void onDestroy() {
super.onDestroy();
AutoVerifyCode.getInstance().release();
}
短信权限属于敏感权限,申请被拒后不建议在 onFail() 里无条件返回 true 死循环重试,给个提示、引导用户去设置页打开会更稳妥。
仓库地址:tpnet/AutoVerifyCode