2017-10-15 6 views
0

En utilisant firebase, j'ai ajouté un écouteur au nœud "mReference" qui peut changer de valeur à tout moment. Lorsque mon application est ouverte ou récemment fermée, l'écouteur fonctionne. Si l'application a été fermée pendant une longue période (~ jours), onDataChange de l'écouteur ne se déclenche pas. Les écouteurs de base de données Firebase se détachent-ils automatiquement après un certain temps ou à cause d'un événement spécifique?Est-ce que le programme d'écoute Firebase Database se détache automatiquement et quelles en sont les causes?

ValueEventListener listener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

     Map map = dataSnapshot.getValue(); 
     // ... 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

     // ... 
    } 
}; 
mReference.addValueEventListener(listener); 
+1

Les récepteurs ne sont jamais automatiquement détachés par le client Firebase. Ma première supposition est que Android ferme le socket. La seule façon de déterminer si cela se produit réellement est de parcourir la sortie logcat, éventuellement après avoir activé la journalisation du débogage pour le client Firebase. (Https://firebase.google.com/docs/reference/android/com /google/firebase/database/FirebaseDatabase.html#setLogLevel(com.google.firebase.database.Logger.Level)). –

Répondre

2

Vous ne pouvez pas compter sur un programme d'écoute Firebase dans une application Android pour fonctionner en permanence lorsque l'application est fermée. L'ajout de l'écouteur à un service ne fonctionnera pas non plus car les versions récentes d'Android limiteront l'exécution des services (voir la documentation sur le mode Doze et les restrictions encore plus strictes ajoutées dans Oreo). Si vous avez besoin que votre application prenne des mesures lorsque certaines activités se produisent dans la base de données, l'une des solutions consiste à utiliser un ou plusieurs déclencheurs de base de données Firebase en temps réel pour identifier l'action dans la base de données; Au sein d'un déclencheur, vous pouvez utiliser Firebase Cloud Messaging (FCM) pour envoyer un message à votre appareil.

Les déclencheurs de base de données s'exécutent sur les serveurs Firebase et ne nécessitent pas que votre application soit active. FCM peut être configuré pour "réveiller" votre application afin qu'elle puisse prendre les mesures appropriées; FCM joue bien avec le mode Doze et d'autres restrictions récentes sur l'activité de fond de l'application.