从应用程序注销时调用.setPersistenceEnabled(false),无法工作



在我的Flutter/Dat移动应用程序中,我使用Firebase RTDB持久性来实现应用程序的离线使用。

我的理解是,为了实现持久性,您必须根据以下代码进行调用,然后再使用任何数据库引用来查询数据库。我使用以下代码在加载应用程序后立即启用持久性,它运行良好:

FirebaseDatabase firebaseDatabase = FirebaseDatabase.instance;
bool _success = await firebaseDatabase.setPersistenceEnabled(true);
print(_success); // Prints true, so persistence is set 'on'.

当我注销应用程序时,我试图用关闭持久性

bool _success = await firebaseDatabase.setPersistenceEnabled(false);
print(_success); // Prints false, so persistence is still 'on', ie. the call failed.

我认为持久性无法关闭的原因是在试图关闭它之前已经调用了数据库引用

这引出了三个问题,我想:

  1. 当我注销时,我应该担心关闭它吗?我尝试这样做的原因主要是良好的房屋管理。当注销运行时,我会清理共享的首选项,关闭keepsyncd等。此外,用户可以有多个用户id登录,我想确保我不会保留他们以前登录id的持久数据
  2. 与1相关,是否将persistence设置为false以清除的缓存数据和对数据库的潜在排队调用
  3. 如果1和2的答案是"是",那么在我使用的代码不断告诉我它失败的情况下,我如何关闭持久性

处理此问题的典型方法是在用户登录后启用持久性。

一旦启用了磁盘持久性,并且您的应用程序使用了数据库,它就无法关闭

如果操作成功,则返回的Future将与true一起完成,如果无法设置持久性,则返回false(因为数据库引用已经创建(。

最后一点对您来说显然是这样的:您已经在使用数据库了,这意味着磁盘持久性已经开启

针对您的具体问题:

  1. 遗憾的是,目前无法通过API清除本地缓存中的数据。这是一个有效的功能请求,但现在你必须假设设备上的任何数据都可以被该设备上的用户看到(或设备配置文件(
  2. 禁用磁盘持久性会阻止客户端向缓存中添加数据。它不会清除缓存中的任何现有数据

最新更新