2017-10-19 15 views
0

Dans mon application iOS, j'ai utilisé firebase observeEventType:FIRDataEventTypeChildChanged pour obtenir des mises à jour en temps réel pour un nœud particulier. Cependant, lorsque l'utilisateur passe en mode hors connexion, le noeud est mis à jour plusieurs fois. Mais lorsque l'utilisateur vient à l'utilisateur en ligne ne peut pas obtenir les mises à jour précédentes. Y a-t-il une solution pour cela?FIRDataEventTypeChildChanged ne fonctionne pas en mode hors connexion?

Répondre

3

La base de données Firebase Realtime synchronise l'état. Il ne synchronise pas (explicitement) tous les changements d'état intermédiaires.

Si plusieurs modifications ont été apportées au même noeud alors que votre client était hors ligne, il ne verra que l'état final.

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 

Ainsi, dans le schéma ci-dessus, le client 2 ne fera que voir les valeurs 1, 2 et 5. Il peut voir la valeur 4 aussi, selon le moment précis où la valeur 5 est écrite. Mais il ne verra certainement pas la valeur 3.

Si vous souhaitez que chaque changement d'état soit communiqué au client 2 lorsqu'il se reconnecte, vous devez stocker les changements d'état exacts dans votre base de données. Ainsi, au lieu de stocker la valeur résultante, vous stockez l'opération. Quelque chose comme:

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

Maintenant, si votre client écoute /Changes, il est garanti de voir tous les changements qui se sont produits.

+0

Oui, je l'ai. Cependant, alors que l'utilisateur était hors ligne, plusieurs nouveaux nœuds enfants ont été ajoutés. Ensuite, l'utilisateur se reconnecte et ne reçoit pas les modifications pour 'observerEventType: FIRDataEventTypeChildChanged'. Mais les modifications reçoivent pour FIRDataEventTypeValue et FIRDataEventTypeChildAdded sans que des modifications ne se produisent après la reconnexion. – isuru