Je suis coincé à comprendre le concept de la création de Firebase App Offline . Selon la documentation, nous devons appeler:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Mais où devrions-nous appeler cela? Est-ce que cela devrait être utilisé dans chaque activité de l'application? En effet, lorsque je l'utilise dans ma méthode onCreate () de la classe Application, mon application se bloque de manière continue.
Quelle est donc la meilleure pratique à suivre pour rendre notre application hors ligne?.
Un autre doute est la différence entre le précédent et DatabaseReference.keppSynced(true);
setPersistenceEnabled()
doit être appelé une fois au démarrage, avant de récupérer votre première référence à la base de données. J'appelle le mien directement après avoir appelé FIRApp.configure()
La persistance activée permet une rétention complète des informations hors ligne. L'élément important de cela est que les demandes et les mises à jour hors ligne seront terminées, même si vous forcez la fermeture de l'application et la rouvrez-la. Si vous recherchez un accès hors connexion, c’est le booléen à définir.
Garder la synchronisation est utilisé dans les cas où vous souhaitez mettre à jour des données mises en cache à chaque fois que vous récupérez les informations, sans que ces données soient nécessairement restaurées à la prochaine ouverture de l'application.
Un bon exemple d'utilisation serait si vous aviez des vues ayant accédé aux détails de l'utilisateur connecté. Au lieu d'avoir des écouteurs de détails utilisateur sur toutes les vues qui utilisent les détails, vous pouvez simplement spécifier de garder cette référence de base de données synchronisée et vous pouvez obtenir des données à jour plus rapidement.
Vous trouverez plus de détails sur la persistance et la synchronisation dans la documentation de Firebase: https://firebase.google.com/docs/database/Android/offline-capabilities
Créer une classe d'application
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
Et changez votre manifeste comme
<application
Android:name=".MyApp"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Tiré de ici
Pas sûr, si c'est pertinent ici. Mais il y a un autre scénario où ce crash peut arriver.
Si votre application dispose d'un service (avec un processus différent) et que vous créez votre propre classe d'application, le service et l'application au premier plan utiliseront la même classe d'application (pas la même instance) pour s'initialiser. Désormais, lorsque j'utilise la dépendance com.google.firebase: firebase-crash pour gérer les blocages, un service d'arrière-plan, votre.app.packagename: background_crash. Pour une raison quelconque, cela provoquait des accidents sur mon application. Plus précisément, parce que dans ma classe d’application, je passais un appel comme,
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Je suppose que le service d'arrière-plan lors de l'initialisation avec notre classe Application, d'une manière ou d'une autre, Firebase n'est pas initialisé. Pour résoudre ce problème, j'ai
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Si des développeurs iOS rencontrent le même problème, écrivez la ligne suivante dans votre fichier AppDelegate.Swift dans la fonction "application: didFinishLaunchingWithOptions" juste avant l'instruction de retour.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
et utilisez la ligne suivante
DatabaseReference.keppSynced(true);
avec votre référence de base de données dans votre viewController.