Постоянство IndexedDB в приложении PWA - PullRequest
0 голосов
/ 31 октября 2019

Хранилище приложений PWA (IndexedDB) не может обеспечить постоянство данных.

В случае, если PWA закреплен на главном экране, можно очистить все данные приложения из браузера, очистив историю просмотров.

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

Есть ли способ избежать этого? Единственный способ, который я пока вижу, - вернуться к родным приложениям.

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Это невозможно.

API хранилища предоставляет метод StorageManager.persist() для запроса явного разрешения пользователя на сохранение данных до тех пор, пока сам пользователь не удалит:

if (navigator.storage && navigator.storage.persist)
  navigator.storage.persist().then(function(persistent) {
    if (persistent)
      console.log("Storage will not be cleared except by explicit user action");
    else
      console.log("Storage may be cleared by the UA under storage pressure.");
  });

ЕслиВ локальном хранилище недостаточно места, пользовательский агент начнет автоматическое удаление кэшированных ресурсов, за исключением тех, которые установлены как «постоянные». Однако, если пользователь сам решает очистить локальные данные, это невозможно предотвратить.

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

0 голосов
/ 04 ноября 2019

Механизм прозрачного хранения в браузерах позволяет пользователю контролировать свое устройство.

Именно поэтому вы как приложение никогда не должны (как в собственном, так и в веб-режиме) предполагать, что ваши кэшированные ресурсы кэшированы.

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

Вам также необходимо понять, что операционная система, глядя на вашу iOS, будет очищать данные, когда это будет похоже (подумайте, когда освободится дисковое пространство)критический), который выводит вас из-под контроля. Насколько я знаю, он делает это и для нативных приложений.

0 голосов
/ 31 октября 2019

Я не знаю, как обойти это. Например, функция Chrome «очистить хранилище» делает именно это. Я полагаю, что для пользователя разумно иметь возможность удалить любые данные со своего устройства, но я согласен, что это не очень хорошая ситуация для разработчика.

...