setPersistenceEnabled(true)
?Dans mon application, je veux effacer la base de données lorsque l'utilisateur se déconnecte et il confirme que les modifications non synchronisées seront supprimées. Cette application sera utilisée sur tablette par de nombreuses personnes, et il y aura de nombreuses données stockées par utilisateur, donc Je veux effacer les données inutiles stockées sur l'appareil à:
C'est une faille de sécurité car tout utilisateur, qu'il soit connecté ou non, a un accès en lecture à toutes les données précédemment téléchargées! Heureusement, nous n'avons pas écrit y accéder.
J'ai essayé de supprimer db par moi-même, en mode hors ligne et en ligne, mais les données persistent sur l'appareil:
// first clear all data on my own
FirebaseDatabase db = FirebaseDatabase.getInstance();
db.goOffline(); // even when I clear db in online mode data persist on mobile device
db.getReference().setValue(null);
// and then logout
FirebaseAuth.getInstance().signOut();
db.goOnline();
ex. structure des données:
{
"someList": {
"userId1": {
"itemId11": {
"name": "name 11"
},
"itemId12": {
"name": "name 12"
},
...
"itemId1N": {
"name": "name 1N"
}
}
"userId2": {
"itemId21": {
"name": "name 21"
},
"itemId22": {
"name": "name 22"
},
...
"itemId2N": {
"name": "name 2N"
}
}
}
}
mes règles:
{
"rules": {
".read": "false",
".write": "false",
"someList": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
Malheureusement, il n'existe aucun moyen pris en charge pour effacer le cache de persistance. Vous pouvez essayer de supprimer manuellement la base de données SQLite utilisée par la base de données Firebase (devrait être sous /databases/
dans le dossier de données de votre application), mais vous devez le faire avant d'initialiser la base de données Firebase, vous devrez donc forcer l'application à redémarrer après avoir déconnecté quelqu'un ou similaire.
Concernant savoir s'il y a des "données en attente de synchronisation", en supposant que vous parlez d'écritures, la seule façon est d'attacher CompletionListeners à chaque opération d'écriture que vous effectuez et d'attendre qu'elles se terminent.
Nous souhaitons améliorer ces deux éléments dans les futures versions du SDK Firebase Database.
if (Build.VERSION_CODES.KitKat <= Build.VERSION.SDK_INT) {
((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE))
.clearApplicationUserData();
}