Мы боремся с плагином Ioni c Native pu sh (который основан на phonegap-plugin-pu sh). В то время как мы получаем отправленные уведомления pu sh, мы не можем обработать указанную полезную нагрузку c, которую мы отправляем, чтобы при нажатии на уведомление приложение открывалось на указанной странице c.
Для Android pu sh уведомлений, которые мы используем Firebase Cloud Messaging для доставки уведомлений, для iOS мы используем APNS.
Приложение открывается, но либо на домашней странице, либо на любой другой странице, открытой ранее.
Вот наш код инициализации pu sh:
private initPush() {
this.push.hasPermission()
.then((res: any) => {
// just some console logs irrelevant to this question
});
const options: PushOptions = {
android: { clearBadge: true, forceShow: true },
ios: { alert: 'true', badge: true, sound: 'false', clearBadge: true },
windows: {}
};
const pushObject: PushObject = this.push.init(options);
try {
pushObject.on('notification').subscribe((notification: any) => this.onNotification(notification));
pushObject.on('registration').subscribe((registration: any) => this.onRegister(registration));
pushObject.on('error').subscribe(error => this.onError(error));
this.authorizationService.currentUser.subscribe((nextUser) => this.fullfillPushTokenRegistration());
} catch (e) {
console.error('Error on registering push methods', e);
}
}
onNotification(notification): void {
console.info('On Push Notification', JSON.stringify(notification));
const addData = notification.additionalData;
this.notificationEventsService.createEvent('push', 'click', addData);
}
Метод onNotification
, который должен запускаться с событием Ioni c Native pu sh «Notification»: никогда не вызывается, поэтому мы не можем обработать дополнительную полезную нагрузку, которая позволяет нам перейти на указанную c страницу, связанную с уведомлением.
Мы используем следующие версии:
@ionic/core: 4.11.1
@ionic-native/push: 5.15.0
phonegap-plugin-push: 2.3.0
@angular/core: 8.1.2
Мы знаем, что этот плагин снят с производства и что нам, вероятно, следует перейти на OneSignal, но мы стараемся избегать этого, если это не наше последнее средство, поскольку это потребует дополнительной разработки.
Th is - это фрагмент кода Kotlin, в котором мы создаем уведомление с полезной нагрузкой, если это помогает:
val message = Message.builder().setToken(device.deviceToken)
val fcmNotification: com.google.firebase.messaging.Notification = com.google.firebase.messaging.Notification(
notification.title, notification.message
)
message.setNotification(fcmNotification)
message.putData("action", notification.action!!.toString())
message.putData("pendingToViewUserNotifications", pendingToViewUserNotifications.toString())
message.putData("referenced", notification.referenced)
message.putData("notificationId", notification.id.toString())
message.putData("title", notification.title)
message.putData("body", notification.message)
message.putData("badge", pendingToViewUserNotifications.toString())
message.putData("content-available", "1")
when (device.deviceOs!!.toLowerCase()) {
"android" -> message.setAndroidConfig(AndroidConfig.builder()
.setTtl(3600 * 1000)
.setNotification(AndroidNotification.builder()
.setIcon("stock_ticker_update")
.setColor("#f45342")
.build())
.build())