gpt4 book ai didi

firebase - 注销应用程序时调用.setPersistenceEnabled(false),不起作用

转载 作者:行者123 更新时间:2023-12-03 04:52:17 24 4
gpt4 key购买 nike

在Flutter / Dart移动应用程序中,我利用Firebase RTDB持久性启用了该应用程序的脱机使用。

我的理解是,要启用持久性,您必须在使用对eg的任何数据库引用之前,按照下面的代码进行调用。查询数据库。我使用以下代码在加载应用程序后立即启用持久性,并且工作正常:

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.

我认为不能关闭持久性的原因是因为在尝试将其关闭之前已经调用了数据库引用。

我猜这带来了三个问题:
  • 注销时,我是否应该担心完全关闭它?我尝试这样做的原因主要是为了整理房间。运行注销时,我会清理共享首选项,关闭keepsyncd等。而且,尽管该用户可以有多个用户ID进行登录,但我想确保我不会保留其先前登录ID中的持久数据。
  • 与1相关,是否将持久性设置为false会清除缓存
    数据和对数据库的潜在排队调用?
  • 如果对1和2的回答为"is",那么鉴于我正在使用的代码不断告诉我它失败了,我该如何关闭持久性?
  • 最佳答案

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

    一旦启用了磁盘持久性并且您的应用程序使用了数据库,就无法将其关闭。该文档对此进行了说明:

    The returned Future will complete with true if the operation was successful or false if the persistence could not be set (because database references have already been created).



    最后一点显然适合您:您已经在使用数据库,这意味着磁盘持久性已启用。

    对您的具体问题:
  • 很遗憾,当前无法通过API清除本地缓存中的数据。这是有效的feature request,但是现在您必须假设该设备上的任何用户(或设备配置文件)都可以看到该设备上的任何数据。
  • 禁用磁盘持久性可防止客户端向缓存添加数据。它不会清除缓存中的任何现有数据。
  • 关于firebase - 注销应用程序时调用.setPersistenceEnabled(false),不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61184179/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com