В моем ионном приложении мне нужно открыть определенную страницу после получения 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');
}
}
});