注销后清除Firebase持久性

  1. 有没有办法清除通过setPersistenceEnabled(true)启用的Firebase数据库持久性中存储的数据?
  2. 或者最终阻止读取访问设备上以前存储的用户数据?
  3. 额外的问题 – 有什么办法来检查是否有数据正在等待同步?

在我的应用程序中,我想清除数据库用户注销时,他确认不同步的更改将被删除。 这个应用程序将在很多人的平板电脑上使用,并将有许多数据存储每个用户,所以我想清除不必要的数据存储在设备上:

  • 缩小存储使用量
  • 防止未经授权的人阅读用户数据

这是一个安全漏洞,因为任何用户,无论是否login,都可以读取所有以前下载的数据! 幸运的是,我们没有写访问。

我试图在离线和在线模式下自行清除数据库,但数据仍然保留在设备上:

 // 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" } } } } 

Solutions Collecting From Web of "注销后清除Firebase持久性"

不幸的是,没有支持的方式来清除持久性caching。 您可以尝试手动删除Firebase数据库使用的SQLite数据库(应位于应用程序数据文件夹中的/databases/下),但是您需要在初始化Firebase数据库之前执行此操作,因此您必须强制应用程序在签署某人或类似人员后重新启动。

关于是否有“数据等待同步”的问题,假设您正在讨论写操作,唯一的方法是将CompletionListeners附加到您所做的每个写操作,然后等待它们完成。

这两个都是我们希望在未来版本的Firebase数据库SDK中改进的内容。

你可以使用keepSync(true) 。 它会每次同步新的数据。

  if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) { ((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE)) .clearApplicationUserData(); } 

资源