前言
行为式验证码是新型的人机验证方式,能高效的拦截机器的行为,具有极高的安全性和极致的用户体验。目前行为式验证码具有多种类型,例如滑动拼图验证码、文字点选验证码、图标点选验证码、推理拼图验证码等。有很多厂家都出了相关的SDK(当然这都是要收费的),例如网易易盾、云天、极验,顶象等。
下面我介绍一个有关滑动拼图验证码的开源库。
滑动拼图行为验证码
首先我先贴上这个滑动拼图行为验证码的github链接:
GitHub - luozhanming/Captcha: Android滑块拼图验证码控件
大家可以自己去下载源码来分析、优化并且进行扩展。
首先我们可以看看这个demo的效果图
此开源库实现了两种滑动拼图行为验证码方式,一种是依靠滑动条来控制拼图的位置,另外一种则是依靠触摸缺块拼图来完成验证。
首先我们要在自己的项目中引入这个开源库,有两种引入方式,直接通过build.gradle引入依赖或者下载github上源码把源码中的library作为module引入项目:
在布局中配置Captcha控件
实列化Captcha类,设置滑动拼图的图片并且实现监听,滑动拼图的验证结果都会通过CaptchaListener回调,我们可以在onAccess、onFailed、onMaxFailed的回调方法中处理不同的操作。
以上就是它简单的使用方式,下面我们来看看开源库的源码。
源码中创建了CaptchaListener接口,此接口定义了三个方法,分别是onAccess、onFailed和onMaxFailed,代表的操作分别是验证成功,验证失败,失败次数已达上限。
在Captcha的构造函数中,自定义了几个属性,分别是:
drawableId:设置滑动拼图的背景图;
progressDrawableId:设置滑动条的样式图片;
thumbDrawableId:设置滑动块的样式图片;
mMode:设置控件验证模式,分别为MODE_BAR【有滑动条】和MODE_NONBAR【无滑动条】;
maxFailedCount:设置最大失败次数;
blockSize:设置拼图缺块的大小;
介绍完自定义属性后,我们看一下控件的初始化的方法
首先初始化控件,setMode是设置当前的模式,是有滑动条还是无滑动条,然后判断是否设置了drawableId,drawableId不为空的话,设置滑动拼图的图片,setBlockSize设置缺块的大小,然后vertifyView.callback是处理用户操作滑动拼图是否成功的回调,而setSeekBarStyle则是设置滑动条和滑动块的样式,seekbar.setOnSeekBarChangeListener则是监听滑动条的滑动状态,refreshView则是左上角的刷新图片,用来刷新拼图的缺块位置的。
这些都是附加配置,如果有不符合自己需要的话,其实也可以找到对应的地方,进行改造。
我们还可以自定义拼图样式,自己实现Captcha的策略,详情可以参考开源库中的DefaultCaptchaStrategy,并且自行改造。
而此库中最重要的就是PictureVertifyView这个自定义的图片控件,里面实现了阴影的绘制,缺块的绘制,滑动或者触摸时缺块的动画绘制,还有滑动后是否验证成功,触摸后是否验证成功的检测方法等。下面我截部分代码介绍一下实现方式,详情可以自己下载github中的demo继续研究研究。
在MODE_BAR的模式下,监听滑动条的事件,分别是:
onStartTrackingTouch:开始触摸滑动块事件;
onProgressChanged:移动触摸块事件;
onStopTrackingTouch:停止触摸滑动块事件;
PictureVertifyView中的down、move方法设置当前滑动拼图的状态并且计算对应的left值,然后重绘此控件,实现缺块滑动的动画,在停止滑动后,回调onStopTrackingTouch方法并且调用了loose方法去检测滑动拼图验证是否成功
checkAccess方法检测滑动拼图是否通过并且callback onSuccess和onFailed的方法,在该回调方法中,实现CaptchaListener接口中的onAccess、onFailed和onMaxFailed方法。
而在MODE_NONBAR的模式下,则是监听触摸事件来判断滑动拼图操作是否成功:
其实触摸的实现方式,类似于滑动的实现方式
只要理解了滑动模式的实现方式,无滑动模式的实现方式一定能理解,这里就不再重复介绍了!
Captcha的滑动拼图行为验证码的开源库就介绍到这里啦,下面顺便贴出库主的博客:
Android拼图滑块验证码控件_LawCoder的博客-CSDN博客_android 滑块验证
其实大家最好是自己阅读源码,训练阅读源码的能力并且还可以进行源码的改造,实现你自己自定义的滑动拼图行为验证码,如果觉得开源库中有什么实现不好的地方还可以自己优化,例如开源库中使用的网络加载图片的方法就非常的旧~可以自己封装一个新的网络框架去加载图片等。
2021年11月1日程序猿小钟带着【Android滑动拼图行为验证码】到此一游~