Flutter iOS调用Firebase verifyPhoneNumber返回internal-error问题求助
解决方案
第一步:检查APNs相关配置(90%以上该场景下的问题都是由此导致)
Firebase手机号认证在iOS端依赖APNs服务完成验证,你更换Team ID后原有APNs配置全部失效,需更新以下配置:
- 登录Apple开发者账号,在「Certificates, Identifiers & Profiles」-「Identifiers」找到你的应用Bundle ID,确认Push Notifications能力已开启,生成新的APNs SSL证书(开发/生产环境都要生成),下载后双击导入到Xcode钥匙串中
- 打开Firebase控制台,进入项目设置-「Cloud Messaging」标签页,删除原有旧Team ID对应的APNs证书/密钥,上传你刚生成的新APNs证书,也可以上传APNs认证密钥(更推荐,不需要每年更新),注意绑定新的Team ID
- 检查Xcode中「Signing & Capabilities」是否已经添加Push Notifications能力,没有的话手动添加
- 同时确认你已经添加了Background Modes能力,勾选「Remote notifications」选项
第二步:清空旧配置缓存,重新构建
换Team ID后很容易残留旧的构建缓存,执行以下操作:
- 先删除Flutter缓存:在项目根目录执行
flutter clean - 进入iOS目录,删除
Podfile.lock和Pods文件夹,执行pod install --repo-update - 卸载设备/模拟器上已安装的旧版本应用,重启Xcode后重新运行构建
第三步:检查reCAPTCHA回跳配置
如果APNs配置正确还是报错,检查Firebase手机号认证的降级reCAPTCHA验证配置是否和新的Team ID匹配:
- 打开
Info.plist,确认CFBundleURLTypes下的URL Scheme配置正确,Scheme值格式为REVERSED_CLIENT_ID,对应你新下载的GoogleService-Info.plist里的REVERSED_CLIENT_ID字段值,不要直接复用旧的配置,要和新plist里的完全一致 - 检查Google Cloud控制台的API密钥限制,确认iOS应用的Bundle ID和新的Team ID已经添加到对应密钥的允许列表中,避免API调用被拦截
其他注意事项
你收到的ITMS-90076提示确实不会直接影响手机号认证功能,属于更换Team ID后的正常提示,仅会导致旧版本应用升级上来的用户丢失之前存储在钥匙串里的数据,新安装用户不受影响。
如果完成以上步骤还是报错,可以开启Firebase的Debug日志,在iOS项目的AppDelegate里添加[FIRAuth enableDebugLogging];,运行后查看详细的错误日志排查具体原因。
内容的提问来源于stack exchange,提问作者MarcS82
相关产品推荐
相关产品推荐

