Парсинг Pu sh Данные уведомлений в быстром - PullRequest
0 голосов
/ 19 февраля 2020

Я получаю уведомление pu sh, и они очень хорошо отображаются на iPhone. Но по какой-то причине я хочу проанализировать следующий результат, полученный в методе didReceivedRemoteNotification для уведомления pu sh.

 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {


    print("FFTF", "didReceiveRemoteNotification", userInfo)
  }

Вот что я получаю, когда печатаю userInfo

    [AnyHashable("FcmNotificationStatus"): 3, AnyHashable("ListItemIds"): ["42D890C4-0804-4434-B137-0EECDEFEC319"], AnyHashable("UserId"): 15, AnyHashable("gcm.message_id"): 1582109***6, AnyHashable("Title"): MY App, AnyHashable("body"): Welcome., AnyHashable("aps"): {
    "content-available" = 1;
}, AnyHashable("google.c.sender.id"): 589****85]

Это ответ, который я получаю, и от него я хочу получить следующие поля, в которых указан c типы

  • доступно для содержимого (Int)
  • FcmNotificationStatus (Int)
  • ListItemIds (String Array)
  • UserId (Int)

И я пробовал много вещей, но я получаю свое приложение cra sh. Есть ли что-нибудь, что я могу сделать, чтобы разобрать это легко? Пожалуйста, дайте мне знать, как это сделать.

1 Ответ

0 голосов
/ 19 февраля 2020

Что у вас есть, словарь. Разбор должен быть достаточно прямым.

let status = userInfo["FcmNotificationStatus"] as? Int
let ids = userInfo["ListItemIds"] as? [Int]
let title = userInfo["Title"] as? String
let body = userInfo["body"] as? String

Я не могу дать более подробный ответ о том, почему вы получаете эти ошибки, без показа своего кода и объяснения того, какие ошибки вы получаете

Это руководство объясняет некоторые понятия. Выдержка ...

@available(iOS 10, *)

extension AppDelegate : UNUserNotificationCenterDelegate {

  // Receive displayed notifications for iOS 10 devices.
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.request.content.userInfo

    // With swizzling disabled you must let Messaging know about the message, for Analytics
    // Messaging.messaging().appDidReceiveMessage(userInfo)

    // Print message ID.
    if let messageID = userInfo[gcmMessageIDKey] {
      print("Message ID: \(messageID)")
    }

    // Print full message.
    print(userInfo)

    // Change this to your preferred presentation option
    completionHandler([])
  }

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    // Print message ID.
    if let messageID = userInfo[gcmMessageIDKey] {
      print("Message ID: \(messageID)")
    }

    // Print full message.
    print(userInfo)

    completionHandler()
  }
}

Вы не всегда будете получать уведомления в didReceiveRemoteNotification, вы должны использовать методы делегата, упомянутые в связанной статье.

...