iOS Кэш PWA, добавленный на домашний экран, истекает через день - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю устанавливаемый PWA из CRA. Я добавил пользовательский сервисный работник, который кэширует все внешние запросы, используя API кэша рабочего сервиса. После первого запроса я могу переключить свой телефон в режим полета, и приложение все еще работает, однако, когда я оставляю приложение установленным на моем телефоне в течение дня и возвращаюсь, приложение больше не работает в автономном режиме и вместо этого показывает «Safari». не удается открыть страницу, потому что ваш iPhone не подключен к inte rnet ".

Имеет ли установленный PWA на iOS срок действия кэша? Я что-то не так делаю?

Вот мой код работника службы:

const PRECACHE = "precache-v1";
const RUNTIME = "runtime-v2";

const PRECACHE_URLS = [];

this.addEventListener("install", event => {
  event.waitUntil(
    caches
      .open(PRECACHE)
      .then(cache => cache.addAll(PRECACHE_URLS))
      .then(this.skipWaiting())
  );
});

this.addEventListener("activate", event => {
  const currentCaches = [PRECACHE, RUNTIME];
  event.waitUntil(
    caches
      .keys()
      .then(cacheNames => {
        return cacheNames.filter(cacheName => !currentCaches.includes(cacheName));
      })
      .then(cachesToDelete => {
        return Promise.all(
          cachesToDelete.map(cacheToDelete => {
            return caches.delete(cacheToDelete);
          })
        );
      })
      .then(() => this.clients.claim())
  );
});

this.addEventListener("fetch", event => {
  event.respondWith(
    caches.match(event.request).then(cachedResponse => {
      if (cachedResponse) {
        return cachedResponse;
      }
      return caches.open(RUNTIME).then(cache => {
        return fetch(event.request).then(response => {
          return cache.put(event.request, response.clone()).then(() => {
            return response;
          });
        });
      });
    })
  );
});

...