Я пытаюсь перенаправить приложение на статью, когда приходит push-уведомление и когда приложение находится в фоновом режиме. Когда кто-то нажимает на уведомление на основе полученных данных, приложение иногда перенаправляет на статью, но иногда перенаправляет только на домашнюю страницу.
Я отладил код и обнаружил, что блок кода всегда работает правильно. «Навигация выполнена успешно» всегда печатается в консоли, даже если вы перенаправляете на домашнюю страницу вместо страницы уведомлений. На странице уведомлений я загружаю содержимое статьи в функции ngOnInit. Данные успешно получены из http api. Это означает, что страница вызвана, но какая-то причина не отображается Я совершенно пустой, что может быть причиной. Пожалуйста, помогите.
app.component.ts
constructor(
private platform: Platform,
private splashScreen: SplashScreen,
private statusBar: StatusBar,
private authenticationService: AuthenticationService,
private router: Router,
private route: ActivatedRoute,
private storage: Storage,
private toast: ToastController,
public alertController: AlertController,
private menu: MenuController,
private fcm: FcmService,
private ngZone: NgZone,
) {
this.user = {};
this.initializeApp();
this.backButtonEvent();
}
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
if (!navigator.onLine) {
this.presentAlert('No Internet Connection','Sorry, No internet connectivity detected. Please reconnect and try again.');
}
this.authenticationService.authenticationState.subscribe(state => {
if (state) {
this.isLoggedIn = true;
console.log('App Component IF: '+state);
this.router.navigate(['home']);
}
if(state == false) {
console.log('App Component ELSE: '+state);
this.isLoggedIn = false;
this.router.navigate(['login']);
}
});
this.notificationSetup();
});
}
private notificationSetup() {
this.fcm.getToken();
this.fcm.onTokenRefresh();
this.fcm.onNotifications().pipe(tap(msg => console.log(msg))).subscribe(
(msg) => {
if(msg.tap) {
this.ngZone.run(() => this.router.navigate(['notification', { id: msg.id, action: msg.action }])).then(e => {
if (e) {
console.log(e);
console.log("Navigation is successful!");
} else {
console.log(e);
console.log("Navigation has failed!");
}
}
);
} else {
if (this.platform.is('ios')) {
this.presentToast(msg.aps.alert);
} else {
this.presentToast(msg.body);
}
}
});
}
Страница уведомления Notification.page.ts
export class NotificationPage implements OnInit {
id: string;
action: string;
title: string;
excerpt: string;
content: string;
audio_code: string;
audio_link: string;
type: string;
section_parent: string;
section_slug: string;
section_title: string;
post: any;
constructor(private router: Router, private route: ActivatedRoute, public api: RestApiService, public loadingController: LoadingController) { }
ngOnInit() {
//alert('Test');
this.title = '';
this.excerpt = '';
this.content = '';
this.audio_code = '';
this.audio_link = '';
this.type = '';
this.section_parent = '';
this.section_slug = '';
this.section_title = '';
this.id = this.route.snapshot.paramMap.get('id');
this.action = this.route.snapshot.paramMap.get('action');
this.getPost(this.id,this.action);
}
async getPost(id: any,action: string) {
const loading = await this.loadingController.create();
await loading.present();
await this.api.getArticleById(id,action)
.subscribe(res => {
console.log(res);
this.title = res.object_title;
this.excerpt = res.object_excerpt;
if(res.type=='video')
this.content = res.video_link;
else
this.content = res.object_content;
this.type = res.type;
this.audio_code = res.audio_code;
this.audio_link = res.audio_link;
this.section_parent = res.section_parent;
this.section_slug = res.section_slug;
this.section_title = res.section_title;
loading.dismiss();
}, err => {
console.log(err);
loading.dismiss();
});
}