Не удалось получить доступ к ответу данных gcm - PullRequest
0 голосов
/ 18 сентября 2018

Как получить доступ к значению ("gcm.notification.data")? Я могу получить доступ к значению ("aps"), используя следующий код:

    if let aps = userInfo["aps"] as? NSDictionary {
                if let alert = aps["alert"] as? NSDictionary {
                    if let title = alert["title"] as? NSString,let body = alert["body"] as? NSString{
print(title)
print(body)
}

Ответ на сообщение

    [AnyHashable("gcm.notification.data"): {"status":"7809","body":"sgjh body"}, 
AnyHashable("aps"): {
    alert =     {
        body = "sgjh body";
        title = "yfguhj title";
    };
    badge = 1;
    "content-available" = 1;
    sound = default;
}]

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Используйте делегата UNUserNotificationCenterDelegate, который будет срабатывать при получении уведомления и попробуйте следующий код:

 func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
     if let notificationString = userInfo?["gcm.notification.data"] as? String {
     print(notificationString)
    let data = notificationString.data(using: .utf8)!
    do {
         if let jsonDictionary = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [String: Any]
        {
           print (jsonDictionary["body"])
        } else {
         print("bad json")
        }
     } catch let error as NSError {
      print(error)
      }
    }

 }
0 голосов
/ 18 сентября 2018
if let gcmData = userInfo["gcm.notification.data"] as? NSDictionary {

    for (key, value) in gcmData {

        guard let key = key as? String else { continue }

        switch (key, value) {
        case ("status", let aValue as Double): print(aValue)
        case ("body", let aValue as String): print(aValue)
        default: continue
        }
    }
}
...