-
有没有办法清除通过
setPersistenceEnabled(true)
启用的Firebase Database持久性中存储的数据? -
或最终阻止对设备上先前存储的用户数据的读取权限?
-
还有额外的问题 - 有没有办法检查是否有任何数据等待同步?
在我的应用程序中,我想在用户注销时清除db,并确认将删除未同步的更改 . 这个应用程序将在很多人的平板电脑上使用,并且每个用户将存储许多数据,因此 I want to clear unnecessary data stored on the device :
-
缩小存储空间
-
防止未经授权的人员读取用户数据
It's a security flaw because any user, regardless of whether is signed in or not, has read access to all previously downloaded data! 幸运的是我们没有写访问权限 .
我试图在离线和在线模式下自行清除数据库,但数据仍然存在于设备上:
// 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();
例如数据结构:
{
"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"
}
}
}
}
我的规则:
{
"rules": {
".read": "false",
".write": "false",
"someList": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
2 回答
不幸的是,没有支持的方法来清除持久性缓存 . 您可以尝试手动删除Firebase数据库使用的SQLite数据库(应该在您的应用程序
/databases/
下's data folder), but you'需要在初始化Firebase数据库之前执行此操作,因此您必须在签署某人或类似之后强制重启应用程序 .关于知道是否存在“数据等待同步”,假设您正在讨论写入,唯一的方法是将CompletionListeners附加到您执行的每个写操作,并等待它们完成 .
这些都是我们希望在未来版本的Firebase Database SDK中改进的内容 .
source