Angular Service Workers не работают в автономном режиме iOS

Я работаю над PWA с сервисными работниками Ionic v4 и Angular PWA. На app.component.ts есть внедренная служба, чтобы проверить, доступны ли обновления в PWA, а затем загрузить и перезагрузить.

Когда я открываю PWA в браузере, служба работает нормально, и если я развертываю обновление, работник службы обновляет кешированный PWA и «автоматически перезагружает» страницу.

Проблема связана с PWA/автономным режимом, на iOS, когда PWA добавляется на рабочий стол, он больше не обновляется, даже убивая его со списком приложений задач. Только если я выключу устройство и снова включу, оно обновит состояние приложения. На устройствах Android все работает как положено в режиме PWA.

Это моя служба проверки версий, реализованная с помощью сервисного работника Angular:

import {Injectable} from '@angular/core';
import {SwUpdate} from '@angular/service-worker';

@Injectable()
export class LogUpdateService {

    constructor(updates: SwUpdate) {
        console.warn('check')
        updates.available.subscribe(event => {
            console.info('current version is', event.current);
            console.info('available version is', event.available);
            updates.activateUpdate().then(() => {
                console.warn('downloaded')
                document.location.reload();
            });
        });
        updates.activated.subscribe(event => {
            console.info('old version was', event.previous);
            console.info('new version is', event.current);
        });
    }
}

Это мой package.json:

"dependencies": {
    "@angular/common": "^7.2.9",
    "@angular/core": "^7.2.9",
    "@angular/forms": "^7.2.9",
    "@angular/http": "^7.2.9",
    "@angular/platform-browser": "^7.2.9",
    "@angular/platform-browser-dynamic": "^7.2.9",
    "@angular/pwa": "0.13.8",
    "@angular/router": "^7.2.9",
    "@angular/service-worker": "7.2.12",
    "@ionic-native/core": "^5.2.0",
    "@ionic-native/network": "^5.2.0",
    "@ionic-native/splash-screen": "^5.2.0",
    "@ionic-native/status-bar": "^5.2.0",
    "@ionic/angular": "4.2.0",
    "@ionic/storage": "^2.2.0",
    "@ngx-translate/core": "^11.0.1",
    "@ngx-translate/http-loader": "^4.0.0",
    "cordova-plugin-network-information": "2.0.1",
    "cordova-sqlite-storage": "3.2.0",
    "core-js": "^2.6.5",
    "ionic2-calendar": "^0.5.2",
    "moment": "^2.24.0",
    "rxjs": "~6.4.0",
    "serve": "^10.1.2",
    "zone.js": "~0.8.29"
  },
  "devDependencies": {
    "@angular-devkit/architect": "0.13.8",
    "@angular-devkit/build-angular": "0.13.8",
    "@angular-devkit/core": "7.3.8",
    "@angular-devkit/schematics": "7.3.8",
    "@angular/cli": "7.3.8",
    "@angular/compiler": "~7.2.9",
    "@angular/compiler-cli": "~7.2.9",
    "@angular/language-service": "~7.2.9",
    "@ionic/angular-toolkit": "1.5.0",
    "@types/jasmine": "~3.3.9",
    "@types/jasminewd2": "~2.0.6",
    "@types/node": "~11.11.3",
    "@ionic/lab": "1.0.24",
    "codelyzer": "~4.5.0",
    "jasmine-core": "~3.3.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.5",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.2",
    "ts-node": "~8.0.3",
    "tslint": "~5.14.0",
    "typescript": "^3.1.6"
  },
  "description": "An Ionic project",
  "cordova": {
    "plugins": {
      "cordova-sqlite-storage": {},
      "cordova-plugin-network-information": {}
    }
  }

Любая идея с этой проблемой?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 477
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

См.: PWA в бета-версии iOS 12.2: хорошие, плохие и «еще не уверен, хороши ли они»

Спасибо за информацию. Кажется, это связано с: «Если вы закрываете экран своего PWA из многозадачного режима (убивая его), он не удаляет сохраненное состояние. Поэтому, если вы снова откроете PWA с помощью значка, он останется в своем предыдущем состоянии. Это означает, что нет возможности перезагрузить приложение или запустить его с нуля с самого начала действием пользователя». Как вы думаете?

Hanzo 09.04.2019 12:16

Единственное решение, которое я нашел, - это закодировать функцию javascript (например, updateiOS()), которая будет выполнять следующие действия.

1- Убедитесь, что мы работаем в автономном режиме iOS (если нет, то не продолжайте)

2- Проверить наличие новой версии на сервере и перезагрузить страницу, если мы нашли новую версию (убедитесь, что этот https-запрос не кэшируется!)

3- Сохранить время последней проверки в переменной (например, var lastCheckTime)

И в моей основной функции javascript я создам прослушиватель для события «фокус», который будет проверять разницу между текущим и lastCheckTime, если это больше, чем, скажем, 1 день, затем вызовите updateiOS ()

пока событие фокуса у меня работает нормально

что вы подразумеваете под вызовом функции updateiOS, мне нужно где-то вызывать какой-то метод? Пожалуйста, дополните

Pankaj Parkar 28.07.2020 22:13

Другие вопросы по теме

Похожие вопросы

Обратная навигация основного представления в разделенном представлении не работает с режимами отображения «Авто» или «основной скрытый»
Магазин Apple требует разрешения на воспроизведение звука в {mediaType: 'photo'}
Нажав кнопку отмены в ячейке, чтобы удалить эту ячейку, а также удалить ячейку методом editActionsForRowAt
TableView.reloadSections(sectionIndex, with: .none) не работает должным образом
Нужно имя ключа для отображения имени или номера отправителя в twilio API для OTP
Swift 4.2, Xcode 10.2 без предупреждения оператора объединения
Имя ветки при сканировании проекта SonarQube iOS с использованием Fastlane
Вызов функции из модели представления для класса контроллера представления
Как я могу изменить размер родительского представления после изменения ограничений дочерних представлений?
Выполните String.Encoding.utf16 и String.Encoding. utf16BigEndian означает то же самое, то есть UTF16BigEndian?