Вызов .setPersistenceEnabled (false) при выходе из приложения, не работает - PullRequest
0 голосов
/ 13 апреля 2020

В моем мобильном приложении Flutter / Dart я использую постоянство 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. Должен ли я беспокоиться о том, чтобы вообще отключить его при выходе из системы? Причина, по которой я пытаюсь это сделать, это в основном хорошее ведение домашнего хозяйства. Я очищаю общие настройки, закрываю keepyncd и т. Д. c при выходе из системы. Кроме того, однако, пользователь может иметь несколько идентификаторов пользователя для входа в систему, и я хочу убедиться, что я не сохраняю постоянные данные из их предыдущего идентификатора входа.
  2. Относится к 1, устанавливает ли постоянство для false очистить кэш данные и потенциальные вызовы в очереди в БД?
  3. Если ответы на вопросы 1 и 2 - «да», как я могу отключить сохранение, если код, который я использую для этого, продолжает сообщать мне, что это не удалось?

1 Ответ

1 голос
/ 13 апреля 2020

Типичный способ справиться с этим - включить постоянство при входе пользователя в систему.

Когда постоянство диска включено и приложение использует базу данных, ее нельзя отключить. Документация говорит об этом:

Возвращенное Future завершится true, если операция прошла успешно, или false, если не удалось установить постоянство (, поскольку ссылки на базу данных уже были созданы ).

Этот последний бит, безусловно, относится к вам: вы уже используете базу данных, а это означает, что сохранение диска включено.

К вашим конкретным c вопросам:

  1. К сожалению, данные в локальном кэше в настоящее время не могут быть очищены через API. Это действительный запрос функции , но на данный момент вы должны будете предположить, что любые данные на устройстве могут быть просмотрены любым пользователем на этом устройстве (или профилем устройства).
  2. Отключение Постоянство диска не позволяет клиенту добавлять данные в кэш. Он не очищает существующие данные в кэше.
...