Метод паузы Cordova в ионном приложении работает не так, как ожидалось - PullRequest
0 голосов
/ 18 февраля 2019

Я застрял, пытаясь что-то сделать при входе в режим паузы на ionic, журнал работает при приостановке и возобновлении, НО на паузе. Я хочу вызвать службу, которая сохранит в бэкэнде статус приложения, если его Iв фоновом режиме или нет, проблема в том, что вызов занимает больше времени, так что вызов будет отложен навсегда, есть ли способ задержать де приложение, чтобы оставить как ionDidLeav, но для всего приложения, или использовать угловой жизненный цикл, но ngDestroy не делаетработать, мне просто нужно больше времени, чтобы в бэкэнд поступил вызов для сохранения данных

platform.ready().then(() => {
      if (platform.is('ios')) {
        // document.addEventListener('resign', this.onPause, false);
        // document.addEventListener('active', this.onResume, false);
        document.addEventListener("pause", function() {
          // make a call from service will be pending forever
          console.log("paused")
      }, false);
      document.addEventListener("resume", function() {
        // not firing
        console.log("resumed")
    }, false);
      } else {
        platform.pause.subscribe(() => this.onPause());
        platform.resume.subscribe(() => this.onResume());
      }
    });

1 Ответ

0 голосов
/ 18 февраля 2019

Полагаю, вы могли бы использовать BackgroundMode.Связанные документы предназначены для ionic 4, но если вы используете ionic 3, документы можно найти здесь .

Вам не нужно запускать фоновый режим дляПока приложение находится в режиме паузы, вы можете просто подождать, пока запрос не будет завершен, или произойдет ошибка.Так что следуйте инструкциям из документации по установке.

import { BackgroundMode } from '@ionic-native/background-mode/ngx';

и отметьте его в массиве провайдеров в вашем модуле.Также импортируйте его в свой компонент и вставьте его в ваш конструктор, например, как backgroundMode

Затем просто используйте его в вашей функции pause:

document.addEventListener("pause", () => {
  this.backgroundMode.enable(); // enable it!
  this.myService.doSomething().pipe(
    // disable when request completes/errors
    finalize(() => this.backgroundMode.disable()) 
  )
  .subscribe(() => console.log('Yaaaay, successful!'))
}, false);
...