Android与iOS端Google Recaptcha触发INTERNAL_ERROR及超时问题求助
Google Recaptcha初始化错误(INTERNAL_ERROR/超时)原因及解决方案
一、INTERNAL_ERROR 常见原因与修复
- API密钥配置错误
必须使用Google Cloud控制台为Android应用单独创建的密钥,绑定正确的包名和SHA-1指纹,不能混用iOS或通用密钥。同时确认Recaptcha Tasks API已在控制台启用。 - 网络访问限制
设备无法连接Recaptcha服务域名(如recaptcha.net),国内环境需确认网络能正常访问这些域名,企业内网要检查防火墙是否放行HTTPS 443端口的相关域名。 - SDK版本问题
依赖的Recaptcha SDK版本过旧可能存在bug,建议升级到Maven仓库的最新稳定版,比如com.google.android.recaptcha:recaptcha:1.2.0(以实际最新版为准)。
二、Timed out waiting for 10000 ms 常见原因与修复
- 初始化时机过早
Application.onCreate()阶段网络服务可能未完全就绪,建议延迟初始化,比如在首个Activity的onResume()中调用,或监听网络连接状态,待网络可用后再执行。 - 超时时间设置过短
默认10秒超时在弱网环境下不够,可通过RecaptchaSettings自定义超时:RecaptchaSettings settings = new RecaptchaSettings.Builder() .setTimeoutMs(15000) // 设为15秒 .build(); Recaptcha.getTasksClient(context, BuildConfig.RECAPTCHA_API_KEY, settings); - 主线程阻塞
如果Application.onCreate()里有大量耗时操作(如IO、其他SDK初始化),会阻塞主线程导致Recaptcha请求超时,把这些耗时操作移到子线程执行。
三、通用排查与代码优化
- 开启调试日志定位问题:
Recaptcha.setLoggingEnabled(true); - 检查设备系统时间是否准确,时间偏差过大可能导致SSL验证失败。
- 原代码中
new Handler().post()是多余的,getTasksClient本身就是异步操作,优化后的代码:private void init(Context context) { RecaptchaSettings settings = new RecaptchaSettings.Builder() .setTimeoutMs(15000) .build(); Recaptcha.getTasksClient(context.getApplicationContext(), BuildConfig.RECAPTCHA_API_KEY, settings) .addOnSuccessListener(client -> recaptchaTasksClient = client) .addOnFailureListener(e -> { e.printStackTrace(); Log.d("RECAPTCHA", e.getMessage()); }); }
内容的提问来源于stack exchange,提问作者ajaymodi
相关产品推荐
相关产品推荐

