firebase - Firebase Phone Auth 在 iOS 模拟器和真实设备中均无法在 Flutter 应用程序中运行
问题描述
我一直在尝试和搜索各种方法以使 Firebase Phone Auth 在我的颤振应用程序中工作。(有一个关于 Firebase Cloud Messaging 和 Firebase Phone Auth 之间冲突的公开问题,但我不确定我的问题是否与此有关。我确实使用了 Firebase Cloud Messaging,它工作得很好。)。
在 iOS 模拟器中,每当我调用时FirebaseAuth.instance.verifyPhoneNumber
,我的应用程序都会打开一个用于 reCAPTCHA 工作流程的网页,然后返回到应用程序。verificationFailed
然后我在回调中看到如下错误日志。(根据Firebase Phone Auth Doc ,预计将遵循 iOS 模拟器的 reCAPTCHA 流程)
flutter: Instance of 'AuthException'
flutter: {"error":{"code":403,"message":"Requests from this ios client application <empty> are blocked.","errors":[{"message":"Requests from this ios client application <empty> are blocked.","domain":"global","reason":"forbidden"}],"status":"PERMISSION_DENIED"}}
怀疑错误消息<empty>
用作我的应用程序名称,而不是我的真实应用程序名称(或默认的 Firebase 应用程序名称,即 __FIRAPP_DEFAULT),但我不确定为什么会这样。
在真实的 iOS 设备中,每当我调用FirebaseAuth.instance.verifyPhoneNumber
时,应用程序都会再次调用verificationFailed
回调,并且我收到错误verifyPhoneNumberError
代码和Token mismatch
错误消息。这在调试版本和发布版本中都会发生。
我正在使用以下 SDK 和库版本。
- Flutter SDK = 1.12.13+hotfix.5
- firebase_core = 0.4.3
- firebase_auth = 0.15.4
- firebase_messaging = 6.0.9
有没有人能够让 Firebase Auth Phone 身份验证在 iOS 中工作?我陷入了这种困境,因为我似乎无法在网上搜索任何与此相关的信息。到目前为止,我已经多次设置 iOS APN、GoogleService-info.plist、Google Cloud Credentials,但都没有成功。(鉴于 Firebase 云消息传递工作得非常好,我怀疑这是凭据或 APN 设置的问题。)
解决方案
因为我找出了根本原因,所以回答了我自己的问题。
在连接到 Firebase 的 Google Cloud Project 中,我能够找到一组由 Firebase 创建的 API 密钥。
https://console.cloud.google.com/apis/credentials
对于您在 Firebase 中定义和创建的每个应用,都会在 API 密钥部分自动创建一个新的 API 密钥。就我而言,有一个用于“ iOS 密钥(由 Firebase 自动创建) ”,另一个用于“ Android 密钥(由 Firebase 自动创建) ”。
好吧,默认情况下,它们不会施加任何限制,您会在键旁边看到一个黄色三角形。所以我对这些键添加了限制,以便它们只能在我的应用程序中使用。这是通过在每个 API 密钥详细信息页面中使用对应的 iOS 捆绑包 ID 和 Android 的另一个应用 ID设置应用程序限制来完成的。
这个限制实际上是 Phone Auth 在我的应用程序中不起作用的原因。一旦我将更改恢复为None,我就不再遇到Token mismatch
or AuthException
。
理想情况下,我应该将这些 API 密钥仅限于我的应用程序,但似乎我的 Flutter 应用程序无法向谷歌服务证明其身份/appId/bundleId,并且谷歌一直在拒绝来自我的应用程序的请求。这一定是我看到Requests from this ios client application <empty> are blocked.
错误消息的原因。
目前,一切正常,因为没有限制,但我需要弄清楚为什么我的应用程序及其 id 关联迟早不能按预期工作,以便我可以重新添加限制。
推荐阅读
- python - 想要将一个地理位置的价值与另一个位置进行比较
- r - 预测值不响应用户输入 Rshiny
- python - 将列表值分配给字典键
- serilog - Serilog 内存接收器
- karate - 空手道 - 设置全局请求标头
- python-2.7 - Python Cx_Oracle;如何使用列表作为参数执行 SQL 插入
- android - RadarChart 太大,从 LinearLayout 视图中截断图例
- excel - 我在循环我的 VBA 代码并将正确的变量放入特定单元格时遇到问题
- node.js - 如何使用本地文件中的数据一次性初始化节点模块
- android - Firebase 必须上传图像两次才能显示