ios - 仅在信息不存在时才将数据写入 firebase - Swift iOS

标签 ios swift firebase firebase-realtime-database

我只想更新 email、firstname 和 lastname 为空的值。

我需要这个,这样如果用户决定在设置中更改这些设置,它们就不会在用户每次使用 facebook 登录时被覆盖。

有什么解决方案可以在没有数据快照的情况下检查字段是否为空?努力最大限度地提高效率。

用户使用 facebook 登录时的当前代码? FB Grab User Info Code

每个用户的数据库结构:

Database

最佳答案

一种方法是使用 firebase transaction .

事务允许您在设置/更新数据库引用之前检查它的当前值。它的主要用例是防止来自多个源的多个并发更新,但它也可以用于这种情况——读取然后写入。 在交易 block 中,您获得正在交易的数据库引用的值,并且可以检查该值是否为空(因此“创建”案例)-> 然后根据需要更新它并返回 TransactionResult.success(withValue:新数据)

如果对象已经设置,您只需使用 TransactionResult.abort() 中止事务,并且不会执行对 DB 的写入。

另一种不需要读/写的选项是在相关引用上设置一个 Firebase 数据库规则,该规则仅在先前值为 null 时才允许写入:

"refPath": {
      ".write": "data.val() == null && newDataval() != null"
    }

为现有引用第二次写入数据库将失败。 我会选择交易 - 在客户端代码中更能表达需求。

关于ios - 仅在信息不存在时才将数据写入 firebase - Swift iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45534155/

相关文章:

ios - UITableViewCell 问题的尾随空格

ios - UIButton 在第一次运行时工作正常,但在模拟器上第二次运行时不起作用

ios - 如何在 Firebase iOS 中过滤搜索

node.js - 从实时数据库获取 json 数据到 Dialogflow 内联编辑器(谷歌助手)

firebase - 在 Flutter Firebase 应用程序中存储 API key ?我需要隐藏它们吗?如何?

ios - Stripes ActionBean 获取客户端 PUT 数据

ios - 如何将uilabel高度固定为动态[取决于文本]?

3 分钟后 iOS 9 位置更新后台任务

ios - 如何更新核心数据中的现有对象? [ swift ]

swift - CompletionHandler 不适用于 UIAlertController 中的闭包