Моя страница не открывается после получения push-уведомления - PullRequest
0 голосов
/ 15 февраля 2019

В моем ионном приложении мне нужно открыть определенную страницу после получения push-уведомления.

Я тестирую ее в эмуляторе Android Studio и отображаю кучу консольных журналов, которые доказывают, что push.on ('уведомление'). Событие подписки определенно запускает страницу с помощью navCtrl.push (я тоже пробовал navCtrl.setRoot), а ngOnInit делает все как обычно и доходит до конца кода.

Проблема в том, что после этого страница просто не отображается.

Я вижу следующее сообщение в журнале консоли Android, но на самом деле не знаю, что оно означает:

D/SystemWebChromeClient: ng:///AppModule/ShiftDetailsPage.ngfactory.js: Line 563 : ERROR
I/chromium: [INFO:CONSOLE(563)] "ERROR", source: ng:///AppModule/ShiftDetailsPage.ngfactory.js (563)

но они появляются перед всеми сообщениями журнала консоли, выводимыми ngOnInit в ShiftDetailsPage, поэтому, я думаю, они не означают, что при загрузке страницы возникла проблема.

Еще одна вещь, которая появляется:

Cannot read property 'controls' of undefined.

в приложении.

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

Должен ли я использовать что-то кроме navCtrl.push или это правильный путь?

Любые предложения очень приветствуются.

Вот код в подписке push.on:

push.on('notification').subscribe(async (data: EventResponse) => {
  console.log("in notification, data = " + JSON.stringify(data));
  if (data.additionalData.shiftId != null
  &&  data.additionalData.shiftId != ""
  &&  await this.login.isLoggedIn()
    ) {
    console.log("in notification, shiftId = " + data.additionalData.shiftId);
    console.log("in notification, isLoggedIn = " + JSON.stringify(await this.login.isLoggedIn()));
    const confirmAlert = this.alertCtrl.create({
      title: 'Shift Notification',
      message: data.additionalData.shiftId,
      buttons: [
        {
          text: 'Ignore',
          role: 'cancel'
        },
        {
          text: 'View',
          handler: () => {
            console.log("in notification, handler");
            this.shiftDetailsProvider.getShiftDetails(data.additionalData.shiftId).then( async shift => {
              const userLocation = await this.getUserLocation().then(userLocation => {
                console.log("in pushSetup on notification, userLocation = ", userLocation);
                return userLocation;
              });
              this.navCtrl.push(ShiftDetailsPage, {shift: shift, userLocation: userLocation, sourcePage: "notification"});
            });
          }
        },
      ]
    });

    confirmAlert.present();

  } else {
    console.log("in notification, else");
    if (data.additionalData.foreground) {
      console.log("in notification, foreground");
      const confirmAlert = this.alertCtrl.create({
        title: 'New Notification',
        message: data.message,
        buttons: [
          {
            text: 'Cancel',
            role: 'cancel'
          },
          {
            text: 'OK',
            handler: () => {
              console.log('New notification callback')
            }
          },
        ]
      });

      confirmAlert.present();

      if (this.platform.is('ios')) {
        console.log("in notification, platform is ios");
        push.finish(data.additionalData.notId);
      }
    } else {
      console.log('Push notification clicked from the background');
    }
  }
});
...