繁体   English   中英

Firebase 可以在模拟器中运行,但不能在 iPhone 上运行

[英]Firebase Works In Simulator But Not On iPhone

我正在尝试使用以下方法从我的 Firebase 数据库中提取某个视图控制器上的数据:

_refHandle = [_postRef observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
  NSDictionary *postDict = snapshot.value;
  // ...
}];

该代码在模拟器中运行良好,但不适用于 iPhone(代码被跳过)。 我在应用程序的其他部分使用了这段代码,它可以在设备和模拟器上运行。 我也将这段代码实现到一个用于拉取数据的自定义方法中(仍然不起作用)。 有谁知道为什么这在真实设备上不起作用?

我发现如果您登录并删除该应用程序,那么在您再次安装该应用程序后,您仍然会登录。我不确切知道,但我认为 Firebase 以某种方式将帐户缓存绑定到带有 Bundle Identifier 的 Keychain ,不在应用程序本地存储中。

我的解决方案不够好,但对我有用:

  1. 从真实设备中删除您的 APP。
  2. 在导航面板中转到您的项目。
  3. 在 General 选项卡中更改您的 Bundle 标识符,例如:“myApp.com”到“myApplication.com”或任何您想要的。
  4. 构建并运行
  5. 宾果!

更新:Firebase 使用您的捆绑标识符作为密钥记住您在钥匙串中的数据,这就是它在您更改捆绑标识符时起作用的原因

这是因为您的安全规则。 在您的 Firebase 控制台中:

  • 转到数据库菜单项
  • 转到规则选项卡
  • 将安全规则更新为:

     { "rules": { ".read": true, // Or whatever rule you would like ".write": "auth != null" } }

转到数据库菜单项

转到规则选项卡

将安全规则更新为(对于真实设备):

{
 "rules": 
    {
     ".read": "auth != null",
     ".write": "auth != null"
     }
}

将安全规则更新为(对于真实模拟器测试):

 {
   "rules": 
    {
     ".read": "auth == null",
     ".write": "auth == null"
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM