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

Firebase iOS端手机号认证在沙特阿拉伯地区无法发送验证短信

Firebase iOS 手机号认证沙特地区无法下发验证短信排查方案

你当前的核心调用逻辑符合Firebase Phone Auth的基础实现要求,对应loginVC的实现代码如下:

PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumberWithCode, uiDelegate: nil) { [unowned self] verificationID, error in
  if let error = error {
      IndicatorManager.indicatorShared.stopIndecator()
      Crashlytics.crashlytics().record(error: error)
      print(error.localizedDescription)
      print(error)
    return
  }
IndicatorManager.indicatorShared.stopIndecator()
UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
UserDefaults.standard.set(phoneNumberWithCode, forKey: "userPhoneNumber")

self.errorMessageLbl.text = ""
let vc = SharedViewControllers().verificationCodeVC
vc.phoneNumber = phoneNumberWithCode
vc.phoneNumberWithoutCode = phoneNumber
UserDefaultsConfig.phoneNumberWithoutCode =  phoneNumber
var codeNum = codeNuber.text!
if let pluse = codeNum.firstIndex(of: "+") {
    codeNum.remove(at: pluse)
}
UserDefaultsConfig.countryCode =  codeNum
vc.countryCode = codeNuber.text!
self.navigationController?.pushViewController(vc, animated: true)
}
}

按以下优先级逐一排查即可定位问题:

  • 区域权限与计费配置核查
    • Firebase手机号认证对未绑定付费方式的免费项目,默认仅开放北美、西欧等主流区域的短信下发权限,沙特(国家码+966)属于需要手动开通的区域,需进入Firebase控制台「Authentication-登录方式-手机号」页面,确认已勾选沙特地区的发送权限,且项目已绑定有效付费方式,否则所有发往沙特的请求会被静默拦截,不会返回明确错误。
    • 核查项目短信配额:免费配额默认单号码每小时最多发送5条、单日最多发送10条,若沙特区域用户集中触发验证极易触发限流,限流后同样不会返回错误提示。
  • 号码格式校验
    传入verifyPhoneNumber方法的号码必须严格符合E.164格式规范:
    • 格式为+[国家码][去掉本地前缀0的手机号],例如沙特本地号码0512345678对应的正确格式是+966512345678,号码中不能包含空格、短横线等特殊字符,也不能保留本地号码开头的0。
    • 沙特本地虚拟运营商号段、物联网卡号段(多为057、058开头)不在Firebase支持的下发范围内,会被运营商侧直接拦截。
  • 客户端配置核查
    • 你当前代码中使用[unowned self]持有控制器,若回调触发时登录页已被销毁会直接触发野指针崩溃,建议替换为[weak self]并在回调内部做安全解包。
    • 现有错误打印仅输出了localizedDescription,无法拿到Firebase返回的具体错误码,需补充打印错误的userInfo字段和错误码:沙特区域网络环境下reCAPTCHA验证加载失败、APNs推送证书未正确配置导致应用真实性校验不通过,是非常常见的失败原因,这类错误不会提示地域限制,只会返回通用的验证失败错误码。
    • 确认项目已正确配置Firebase Auth的APNs推送能力:未上传正确APNs证书/密钥的应用,在中东区域会强制触发reCAPTCHA验证,而沙特本地运营商网络经常屏蔽Google相关域名,导致reCAPTCHA加载失败进而中断短信下发流程。
  • 运营商拦截适配
    沙特本地STC、Mobily、Zain三大运营商默认会拦截境外公共短信号码段下发的短信,如果以上配置都确认无误,可在Firebase控制台申请沙特本地专属发送短码,或开启语音验证码 fallback 通道,给短信下发失败的用户自动触发语音验证。

注意:不要在测试阶段直接使用沙特本地真实号码批量测试,极易触发Firebase的反作弊风控,导致对应号段的下发请求被临时封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 13:12:23