对孩子的持久性添加或删除孩子的费用?

时间:2018-10-08 13:49:34

标签: swift firebase firebase-realtime-database

我正在开发运输应用程序。这个想法是驾驶员可以接受客户已经要求的服务。因此,当驱动程序从客户端获取服务时,它将从Firebase数据库上的“可肛门化服务”中删除该服务,我有一个观察者来监听何时删除了服务,并告知客户端其服务已被使用,这是完美的。

现在想象一下这种情况,驾驶员接受服务,但客户在那一刻没有连接到互联网,因此他不会“听”被移走的孩子,并且每当他再次连接时,他就不会知道已经接受了该服务。我知道firebase提供了“持久性”,但是我不确定在这种特定情况下如何使用它。

这是我的代码的一部分:

RefConductores.child(IDUsuarioActual).child("Servicios Tomados").observe(.childAdded)
        { (snapshot) in

            let key = snapshot.value as? String

            if key != nil
            {

                if let i = MisServicios.Instancia.VectorMisServicios.index(where: { $0.Key == key })
                {
                    MisServicios.Instancia.VectorMisServicios.remove(at: i)
                    Alertas.Instancia.CrearNotificaciones(Tipo: 1)
                }

              MisServicios.Instancia.CargarMisServicios(IDServicio: key!)
            }

        }

它运行完美,没有错误。林试图弄清楚的是,当用户没有互联网连接时如何使它工作。当驾驶员(由于驾驶员的移动设备)开始服务时,在客户应用程序中(客户的移动设备中),将执行所显示的代码(如果客户具有正确的互联网连接,这将非常有效)。我的问题是:假设客户端没有Internet连接,他将无法收听“ childAdded”,并且当他再次连接到Internet时,该孩子将已经在“ Servicios Tomados”节点上,但是他永远不会知道它。我该如何解决这个问题?

谢谢大家

1 个答案:

答案 0 :(得分:0)

Firebase数据库同步状态,它不一定同步所有状态更改。

如果您想与客户交流乘车的事实,则应存储数据库中乘车的事实。因此,您要(仅)将信息从“可肛门化服务”中移除,而不是将信息存储在“乘车路线”节点中。