Работники Angular Service не работают в автономном режиме iOS - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю в 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.log('current version is', event.current);
            console.log('available version is', event.available);
            updates.activateUpdate().then(() => {
                console.warn('downloaded')
                document.location.reload();
            });
        });
        updates.activated.subscribe(event => {
            console.log('old version was', event.previous);
            console.log('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": {}
    }
  }

Есть идеи с этой проблемой?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019
0 голосов
/ 17 июля 2019

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

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

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

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

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

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

...