【问题标题】:FIRDataEventTypeChildChanged not working for offline?FIRDataEventTypeChildChanged 不能离线工作?
【发布时间】:2017-10-19 21:30:01
【问题描述】:

在我的 iOS 应用程序中,我使用 firebase observeEventType:FIRDataEventTypeChildChanged 来获取特定节点的实时更新。但是,当用户离线时,节点会更新几次。但是当用户来到在线用户无法获得以前的更新。有解决办法吗?

【问题讨论】:

    标签: ios objective-c firebase firebase-realtime-database


    【解决方案1】:

    Firebase 实时数据库同步状态。它确实(明确地)不同步所有中间状态更改。

    如果在您的客户端离线时对同一节点进行了多次更改,它实际上只会看到最终状态。

    Client1              Database               Client2
                                                Start listener
    write 1     -->         1           -->        1
    write 2     -->         2           -->        2
                                                Go offline
    write 3     -->         3                      
    write 4     -->         4                      
                                                Go online
                                        -->        4
    write 5     -->         5           -->        5
    

    所以在上图中,客户端 2 只会看到值 1、2 和 5。它可能也看到值 4,具体取决于写入值 5 的时间。但它肯定不会看到值 3。

    如果您希望在客户端 2 重新连接时将每个状态更改传达给它,您应该将确切的状态更改存储在您的数据库中。因此,您将存储操作,而不是存储结果值。比如:

    Changes: {
      "-PushId1": { value: 1  },
      "-PushId2": { value: 2  },
      "-PushId3": { value: 3  },
      "-PushId4": { value: 4  },
      "-PushId5": { value: 5  }
    }
    

    现在,如果您的客户收听/Changes,则可以保证看到发生的所有更改。

    【讨论】:

    • 是的,明白了。然而,当用户离线时,它已经添加了几个新的子节点。然后用户重新连接,没有收到observeEventType:FIRDataEventTypeChildChanged 的更改。但是FIRDataEventTypeValueFIRDataEventTypeChildAdded 的更改在重新连接后不会发生任何更改。
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多