1

У меня есть приложение. Он использует FCM для push-уведомлений. JSON сообщений выглядят как:iOS Firebase Cloud Messaging Получить данные при закрытии приложения

{ "to": "xxx", "notification" : { 
      "body" : "Hi", 
      "badge" : 1, 
      "sound" : "default" 
     }, 
     "data" :  { 
      "id" : "xxx", 
      "first_name" : "xxx", 
      "last_name" : "xxx", 
      "full_name" : "xxx", 
      "primary_image" : "xxx", 
      "matchid" : "xxx", 
      "type": "match"/"message" 
     }, 
     "content_available": true, 
     "priority": "high" 
} 

У меня есть «тип» в данных для обнаружения которых экран будет запускаться при потрогать мои уведомления. Если type == "match" -> перейти в MatchVC и введите == "message" -> перейти в MessageVC. У меня есть проблема, что если мое приложение находится на переднем плане, я могу получить данные от didReceiveRemoteNotification:userinfo, тогда я могу обнаружить экран push, однако, если мое приложение является фоновым или закрытым, я получаю уведомление без данных от didReceiveRemoteNotification:userinfo. И когда я нажимаю уведомления, он просто открывает мое приложение. Любые решения оцениваются.

ответ

0

В Firebase iOS sdk у вас будет следующий фрагмент кода в делегате приложения.

Обратите внимание, что существует 2 метода userNotificationCenter. Первый вызов будет вызван, когда приложение будет на переднем плане. 2nd вызывается, когда вы нажимаете push-уведомление из лотка.

Полный код может быть найден из официального хранилища Gitub Firebase (iOS Quickstart). https://github.com/firebase/quickstart-ios/blob/master/messaging/MessagingExampleSwift/AppDelegate.swift

@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 
     // Print message ID. 
     if let messageID = userInfo[gcmMessageIDKey] { 
      print("Message ID: \(messageID)") 
     } 

     // Print full message. 
     print("userInfo 1st") 
     print(userInfo) 

     let id = userInfo["id"] 
     let firstName = userInfo["first_name"] 

     print(id ?? "") 
     print(firstName ?? "") 

     // 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 2nd") 
     print(userInfo) 

     let id = userInfo["id"] 
     let firstName = userInfo["first_name"] 

     print(id ?? "") 
     print(firstName ?? "") 

     completionHandler() 
    } 
} 
Смежные вопросы