Получить pu sh PAYLOAD, после нажатия на уведомление пользователя, на самом деле в userNotificationCenter? - PullRequest
0 голосов
/ 08 марта 2020

В вашем приложении делегат

import UserNotifications
class AppDelegate: ...  UNUserNotificationCenterDelegate {

Если вы:

func userNotificationCenter(_ center: UNUserNotificationCenter,
 didReceive response: UNNotificationResponse,
 withCompletionHandler completionHandler: @escaping () -> Void) {

    print("notification tapped to open app ....")

    completionHandler()
}

func userNotificationCenter(_ center: UNUserNotificationCenter,
 willPresent notification: UNNotification,
 withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    print("notification arrived while app in foreground!")

    completionHandler(.alert)
}

Когда вы

  • ПОЛУЧИТЕ УВЕДОМЛЕНИЕ

и действительно, пользователь

  • НАЖИМАЕТ, ЧТОБЫ ОТКРЫТЬ уведомление

, тогда

  • ваше приложение будет красиво открываться

и

  • действительно, вышеописанные функции будут срабатывать идеально ,

, и вы увидите «уведомление, открытое для открытия приложения ...» на консоли.

Но в этих функциях

как, черт возьми, вы получаете фактический pu sh PAYLOAD ?

(то есть сказать значение .data ...... или вообще любую часть полезной нагрузки. Например, если вы используете превосходный github.com / AndrewBarba / apns2 , вам нужно именно там, где у него есть пример data: { ...)

Как, черт возьми, вы получаете уведомление (полезную нагрузку) в UserNotifications функциях делегата?!

Опять же, это когда пользователь * ** на самом деле открыл приложение, просто та pping (ie, «slide, open») в уведомлении.

Я НЕ обсуждаю сложную проблему пробуждения приложения в фоновом режиме (скажем, для загрузки файла et c).

Как, черт возьми, вы получаете полезную нагрузку?

1 Ответ

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

Ответ любезно предоставлен командой на npm -apns2

Для таких данных, как

let bn = new BasicNotification(deviceToken, 'Teste', {
  data: {
    name: 'jack',
    street: 'jones'
  } })

, так что ...

func userNotificationCenter(_ center: UNUserNotificationCenter,
 didReceive response: UNNotificationResponse,
 withCompletionHandler completionHandler:
  @escaping () -> Void) {
    print("notification tapped, app opens")
    let userInfo = response.notification.request.content.userInfo

    let name: String? = userInfo["name"] as! String?
    let street: String? = userInfo["street"] as! String?
    let test3: String? = userInfo["typo"] as! String?
    print("> \(name)")      // optional 'jack'
    print("> \(street)")    // optional 'jones'
    print("> \(test3)")     // nil

    completionHandler()
}

func userNotificationCenter(_ center: UNUserNotificationCenter,
 willPresent notification: UNNotification,
 withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    print("notification arrived while app in foreground (user has
            not 'tapped on notification' - you get this immediately)")

    let userInfo = notification.request.content.userInfo     // sic

    let name: String? = userInfo["name"] as! String?
    let street: String? = userInfo["street"] as! String?
    let test3: String? = userInfo["typo"] as! String?
    print("> \(name)")      // optional 'jack'
    print("> \(street)")    // optional 'main'
    print("> \(test3)")     // nil

    completionHandler(.alert)
}

и все.

...