Использование новых облачных сообщений Firebase с помощью swizzling метода. Я успешно получаю полезную нагрузку в методе didReceiveRemoteNotification в своем делете приложения, когда мое приложение находится на переднем плане. Однако я не получаю никакой полезной нагрузки, а didReceiveRemoteNotification не вызывается, когда мое приложение связано с фоном, несмотря на ответ api, что сообщение успешно отправлено (см. Ниже)
 Вот запрос, который я отправляю в FCM api для запуска push-уведомления https://fcm.googleapis.com/fcm/send
{
"to": "{valid-registration-token}",
"priority":"high", //others suggested setting priority to high would fix, but did not
  "notification":{
      "body":"Body3",
      "title":"test"  
 } 
}
 
 с ответом FCM
{
      "multicast_id": 6616533575211076304,
      "success": 1,
      "failure": 0,
      "canonical_ids": 0,
      "results": [
        {
          "message_id": "0:1468906545447775%a4aa0efda4aa0efd"
        }
      ]
    }
Вот мой код appDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        Fabric.with([Crashlytics.self])
        FIRApp.configure()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification),
                                                         name: kFIRInstanceIDTokenRefreshNotification, object: nil)
        return true
    }
    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        // Let FCM know about the message for analytics etc.
        FIRMessaging.messaging().appDidReceiveMessage(userInfo)
        // Print full message.
        print("%@", userInfo)
        // handle your message
//        let localNotification = UILocalNotification()
//        localNotification.fireDate = NSDate()
//        let notification = userInfo["notification"]!
//        localNotification.alertBody = notification["body"] as? String
//        localNotification.alertTitle = notification["title"] as? String
//        localNotification.timeZone = NSTimeZone()
//        application.scheduleLocalNotification(localNotification)
    }
    func tokenRefreshNotification(notification: NSNotification) {
        let refreshedToken = FIRInstanceID.instanceID().token()!
        print("InstanceID token: \(refreshedToken)")
        LoginVC.registerForPushNotifications()
        connectToFcm()
    }
    //foreground messages
    func applicationDidBecomeActive(application: UIApplication) {
        connectToFcm()
    }
    // [START disconnect_from_fcm]
    func applicationDidEnterBackground(application: UIApplication) {
        FIRMessaging.messaging().disconnect()
        print("Disconnected from FCM.")
    }
    func connectToFcm() {
        FIRMessaging.messaging().connectWithCompletion { (error) in
            if (error != nil) {
                print("Unable to connect with FCM. \(error)")
            } else {
                print("Connected to FCM.")
            }
        }
    }
}
Я вызываю этот код при более позднем потоке в своем приложении, чтобы запросить разрешения
static func registerForPushNotifications() {
    let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
            UIApplication.sharedApplication().registerUserNotificationSettings(settings)
            UIApplication.sharedApplication().registerForRemoteNotifications()
}
Так как я могу получать уведомления, когда приложение находится на переднем плане, я предполагаю, что это устранит все опасения, что мои сертификаты apns не загружены или что регистрационный токен неверен. Если это не так, прокомментируйте, и я снова спустится в эту кроличью яму. Там, вероятно, что-то простое, что я упускаю из виду, но как я могу получить уведомления, появляющиеся во время работы приложения? Благодаря
