Получение уведомления о дополнительных данных на Ioni c (ioni c native pu sh / phonegap-plugin-pu sh) - PullRequest
0 голосов
/ 04 марта 2020

Мы боремся с плагином 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())

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Не уверен, что это будет работать для вас, но в моем предыдущем приложении я должен был установить различную структуру для android и iOS.

Android:

      registration_ids : [],
      data: {
        notId: "", // notId on Android needed to be an int and not a string
        title: "",
        body: "",
        soundname: "default",
      }

iOS:

      registration_ids : [],
      notification:{
        title: "",
        body: "",
        sound: "default",
      },
      data: {
        title: "",
        body: "",
      }

ИЛИ ..

Вы можете go через этот Android проход данных уведомления , где ниже полезной нагрузки должно работать для обоих Android & iOS.

{"priority": "high", "messages": {"title": "Title", "body": "Body", "sound" : "default", "click_action": "com.adobe.phonegap.pu sh .background.MESSAGING_EVENT"}, "data": {"more": "данные идут сюда"}, "to": "id" }

Надеюсь, это поможет. Приветствия.

0 голосов
/ 12 марта 2020

Итак, мне наконец удалось это исправить ... пришлось установить content-available: "1" в полезной нагрузке данных И contentAvailable: true в теле запроса pu sh, а также установить noCache: "1".

Вытащил Firebase SDK и вручную выполнил запрос, теперь он, наконец, вызывает on('notification').

Вы также захотите обработать в обратном вызове уведомления, если additionalData.foreground верно, потому что на переднем плане событие уведомления запускается, как только уведомление отображается, и снова запускается с передним планом на ложь при нажатии.

Вот пример полезной нагрузки, которую я отправляю в API FCM, который работал:

{
    "to":"FIREBASE_TOKEN",
    "content_available": true,
    "data": {
        "action": "ACTION(Custom payload data)",
        "referenced": "REFERENCED(Custom payload data)",
        "force-start": "1",
        "content-available": "1",
        "no-cache": "0",
        "notId": "4361c4f5-ae8d-42fa-a863-a04acff2ab7a",
        "title": "TEST"
    }
    "priority":10
}
...