You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter+Firebase手机OTP仅斯里兰卡可用其他国家无法接收问题咨询

问题排查方案

一、Firebase配置检查

Firebase电话认证默认支持全球发送OTP,无需单独开启全局开关,你可以优先核对以下配置项:

  • 进入Firebase控制台→身份验证→设置→用户注册板块,找到电话验证的国家/地区限制配置,确认是否设置了仅允许斯里兰卡号码发送,若有则添加德国等你需要覆盖的国家,或关闭地区限制。
  • 进入同项目的Google Cloud控制台,检查Cloud SMS API的配额和地区限制,确认没有对应区域的配额耗尽或发送封禁。
  • 检查是否开启了reCAPTCHA验证,跨国请求的reCAPTCHA拦截概率更高,你当前代码仅捕获了invalid-phone-number类型错误,建议在verificationFailed回调中打印完整的e.code和e.message,可以直接定位具体的失败原因。

二、代码问题修复

你当前的fetchotp函数存在硬编码错误,无论用户输入什么手机号,最终都会向固定的斯里兰卡号码+94769008291发送OTP,直接导致其他国家用户无法收到验证码:

// 错误写法
await auth.verifyPhoneNumber(
  phoneNumber: '+94769008291', // 硬编码了固定号码,没有读取用户输入
  // 其余参数省略
)

修改为读取用户输入的号码即可:

await auth.verifyPhoneNumber(
  phoneNumber: numController.text, // 读取号码输入框的内容,注意要引导用户输入带国家码的完整手机号
  // 其余参数保持不变
)

三、VPN测试场景说明

大部分VPN节点会被Firebase的反垃圾风控策略识别为风险请求,直接拦截OTP发送,因此VPN测试失败不代表当地真实用户在正常网络下也会失败,建议优先让德国客户在当地非VPN环境下测试,同时结合错误日志判断问题。

内容的提问来源于stack exchange,提问作者Guna Rakulan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:45:03