Android应用中是否可以集成使用ReCaptcha v3?
Android 端非v2版本ReCaptcha实现方案
目前公开渠道能搜到的Android端ReCaptcha实现教程几乎全是v2版本的,也就是需要用户手动勾选、做识图验证的旧版本,v3及以上无感知版本的实现步骤整理如下:
前置准备
- 到ReCaptcha管理后台创建对应Android应用的密钥,创建时版本选择v3,不要选v2选项,填写的应用包名、签名SHA1值要和实际安装包一致,否则后续会报密钥匹配错误
- 在项目的
AndroidManifest.xml中添加网络权限,v3版本不需要额外申请其他权限:
<uses-permission android:name="android.permission.INTERNET" />
具体实现步骤
1. 引入官方SDK依赖
在app模块的build.gradle依赖块中添加v3版本的SDK依赖,注意不要引入v2版本对应的safetynet包,那个已经是废弃状态:
dependencies { implementation 'com.google.android.gms:play-services-recaptcha:17.0.1' }
2. 初始化验证客户端
在需要触发验证的页面(Activity/Fragment)或者对应业务的ViewModel中初始化客户端,传入的参数是你申请到的v3版本站点公钥(siteKey),不要传服务端用的私钥:
// 替换成你自己申请的站点公钥 private val recaptchaClient = Recaptcha.getClient(this, "你的v3站点公钥")
3. 获取验证token并传给服务端校验
v3版本是无感知验证,不需要用户做任何交互,在需要触发风控的节点调用execute方法即可拿到验证token:
// 比如登录场景触发验证 recaptchaClient.execute(RecaptchaAction.LOGIN) .addOnSuccessListener { token -> // 拿到token后立刻传给自有服务端 // 服务端调用ReCaptcha校验接口拿到风险评分,再根据业务阈值判断是否放行 apiService.verifyRecaptcha(token) } .addOnFailureListener { exception -> // 异常场景处理:常见原因包括设备未安装Google服务框架、网络异常、密钥不匹配 // 这里必须做业务降级,比如弹出自有滑块验证、走其他风控逻辑,不要直接拦截用户操作 Log.e("ReCaptcha", "验证流程异常", exception) showCustomSliderVerify() }
常见踩坑说明
- 不要继续用v2版本的
SafetyNet.getClient()相关API,这套接口已经逐步停止维护,后续会全量下线 - 站点公钥和包名、签名是强绑定关系,如果debug环境正常、release环境调用失败,优先检查申请key时填写的SHA1是否和release签名一致
- v3版本返回的token有效期只有2分钟,拿到后要立刻传给服务端,超时后会直接校验失败
- 国内发售的大部分安卓设备没有预装Google服务框架,会直接触发失败回调,绝对不能把ReCaptcha作为唯一的风控拦截手段,必须配置降级方案
补充说明:v3版本不会返回明确的“通过/失败”结果,只会返回0-1区间的风险评分,分数越接近0代表是机器人的概率越高,具体的拦截阈值需要根据自身业务场景在服务端配置,比如登录场景可以设0.5为阈值,低于0.5就要求用户完成短信验证。
内容的提问来源于stack exchange,提问作者Qarru
相关产品推荐
相关产品推荐

