iOS版Firebase手机号认证上线App Store后无法收短信原因排查
一、可能导致收不到短信的原因分析
从你的描述来看,开发测试正常但上线后失效,大概率是生产环境与开发环境的配置差异导致的,常见原因有这些:
Firebase控制台未配置生产环境的iOS发布证书指纹
开发时你用的是开发证书,上线用的是App Store发布证书,Firebase需要验证应用的合法性,如果没添加发布证书的指纹,Auth请求会被拦截,自然触发不了短信发送。未启用/配置Firebase App Check生产环境验证
现在Firebase Auth在生产环境默认会强制要求App Check验证(防止滥用),开发阶段你可能用的是Debug Token能正常通过,但上线后如果没配置Apple App Attest或DeviceCheck,Auth请求会被拒绝,导致短信无法发出。短信配额耗尽
Firebase Auth的短信验证有免费额度,如果上线后用户量骤增,超出了免费配额或者你设置的付费配额,就会停止发送短信。可以去Firebase控制台的「使用情况」页面查看配额消耗情况。用户端短信过滤
部分iPhone用户开启了系统自带的短信过滤(比如“未知发件人过滤”),或者安装了第三方短信拦截App,可能把Firebase的验证短信归类为垃圾短信。这种情况需要引导用户检查短信过滤设置。
二、App Store对应的Firebase配置流程(替代Google Play的SHA密钥操作)
Google Play需要配置SHA1/SHA256密钥,iOS则需要把App Store发布证书的SHA-256指纹添加到Firebase控制台,具体步骤如下:
导出Apple发布证书
登录Apple Developer后台,进入「Certificates, Identifiers & Profiles」,找到你的App对应的Production类型证书,下载证书文件(.cer格式)。打开Keychain Access,导入这个证书,右键点击证书选择「导出」,保存为.p12格式文件(可以不设置密码)。生成证书的SHA-256指纹
打开终端,执行以下命令(替换your_cert.p12为你导出的文件路径):openssl pkcs12 -in your_cert.p12 -nodes -passin pass: | openssl x509 -noout -fingerprint -sha256输出结果会是类似
SHA256: XX:XX:XX...的字符串,去掉所有冒号,得到纯字母数字的指纹串。添加到Firebase控制台
打开Firebase控制台,进入你的项目 → 「项目设置」→ 「应用」标签页,找到对应的iOS应用,滚动到「App Store发布证书」区域,点击「添加指纹」,把刚才生成的SHA-256指纹粘贴进去。更新项目配置文件
重新下载GoogleService-Info.plist文件,替换你iOS项目中的旧文件,然后重新打包、签名,上传到App Store即可。
额外排查建议
如果配置完还是不行,可以:
- 查看Firebase控制台的「Auth」→「登录方式」页面,确认「电话」登录方式已经启用,并且没有设置地区限制。
- 在Xcode中切换到Release模式,本地测试生产环境的验证流程,看是否能收到短信,排除打包过程中的配置问题。
内容的提问来源于stack exchange,提问作者Ali A. Jalil




