Android集成reCaptcha触发onClick无日志输出问题排查
问题场景
尝试获取reCaptcha验证码发送至Firebase服务器,参考官方开发文档在Activity中实现Executor接口,在onClick点击回调中编写如下代码:
override fun onClick(view: View?) { SafetyNet.getClient(this).verifyWithRecaptcha("Here i write my API Key") .addOnSuccessListener(this as Executor, OnSuccessListener { response -> val userResponseToken = response.tokenResult Log.d("TAG", userResponseToken.toString()) }) .addOnFailureListener(this as Executor, OnFailureListener { e -> if (e is ApiException) { Log.d("TAG", "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}") } else { Log.d("TAG", "Error: ${e.message}") })
点击按钮可正常触发onClick方法,但控制台无任何相关日志打印,代码存在以下两处核心错误:
1. 语法结构缺失,括号未闭合
代码存在明显的语法错误,少了3个关键的闭合大括号:
- else分支的代码块没有闭合
} - OnFailureListener的lambda闭包没有闭合
} - addOnFailureListener方法调用、onClick方法本身也缺少对应的闭合括号
这类语法错误正常会直接导致编译失败,如果你通过其他方式绕过编译检查运行,回调逻辑根本没有被正确注册,自然不会触发日志打印。
补全括号后的基础代码结构应该是:
override fun onClick(view: View?) { SafetyNet.getClient(this).verifyWithRecaptcha("Here i write my API Key") .addOnSuccessListener(this as Executor, OnSuccessListener { response -> val userResponseToken = response.tokenResult Log.d("TAG", userResponseToken.toString()) }) .addOnFailureListener(this as Executor, OnFailureListener { e -> if (e is ApiException) { Log.d("TAG", "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}") } else { Log.d("TAG", "Error: ${e.message}") } // 补else闭合 }) // 补OnFailureListener闭合、方法调用闭合 } // 补onClick方法闭合
2. Executor接口实现错误,回调无法执行
你把Activity强转为Executor传入监听器,但是大概率没有正确重写Executor的execute(Runnable)方法。
监听器的回调逻辑会被封装成Runnable任务,交给你传入的Executor调度执行:如果你重写execute方法时是空实现,或者没有把Runnable投递到可运行的线程队列,回调任务永远不会被执行,自然不会打印日志。
正确的Activity实现Executor的写法如下,把回调任务投递到主线程执行即可:
class YourActivity : AppCompatActivity(), Executor { // 其他业务代码省略 override fun execute(command: Runnable) { // 将待执行的回调任务post到主线程 Handler(Looper.getMainLooper()).post(command) } }
额外排查项
修正上述问题后如果仍无日志,检查两个配置项:
- 填入的API Key必须是reCaptcha安卓平台类型密钥,不能使用网页端、服务端密钥
- 确认AndroidManifest中已经声明网络权限:
<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者Keworker
相关产品推荐
相关产品推荐

