FB Cloud-Messaging iOS: Keine hintergrund-push-Benachrichtigung

Verwendung der neueren FB cloud messaging mit method swizzling ich bin erfolgreich in der Lage, erhalten eine Nutzlast in der didReceiveRemoteNotification Methode in meiner app delegieren, wenn meine app im Vordergrund. Allerdings habe ich nicht bekommen jede Art von Nutzlast und didReceiveRemoteNotification nicht aufgerufen, wenn meine app hintergrund, trotz der api-Antwort, dass die Nachricht erfolgreich gesendet wurde (siehe unten)

Hier ist die Anfrage, die ich senden, um die FCM-api zum auslösen einer push-Benachrichtigung 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"  
 } 
}

mit Antwort vom FCM

{
      "multicast_id": 6616533575211076304,
      "success": 1,
      "failure": 0,
      "canonical_ids": 0,
      "results": [
        {
          "message_id": "0:1468906545447775%a4aa0efda4aa0efd"
        }
      ]
    }

Hier ist mein appDelegate code

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.")
            }
        }
    }

}

Ich nenne diesen code zu einem späteren fließen in meine app zu bitten, für die Berechtigungen

static func registerForPushNotifications() {
    let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
            UIApplication.sharedApplication().registerUserNotificationSettings(settings)
            UIApplication.sharedApplication().registerForRemoteNotifications()
}

Da bin ich in der Lage, um Benachrichtigungen zu erhalten, während die app im Vordergrund ich nehme an, dies würde zerstreuen alle Bedenken, dass meine apns-Zertifikate werden nicht hochgeladen, oder dass die Registrierung der token ist falsch. Wenn das nicht der Fall, bitte Kommentar, und ich werde gehen nach unten, die Kaninchen-Loch wieder.
Es ist wahrscheinlich etwas einfach, dass ich am Blick, aber wie bekomme ich die Benachrichtigungen angezeigt, während die app im hintergrund? Dank

  • Ich stehe vor einem ähnlichen Kampf heute: der hf in-app-delegate wird aufgerufen, wenn die Anwendung im Vordergrund ist, aber keine tray-Benachrichtigung angezeigt, wenn die app im hintergrund ist. Interessant zu sehen, wenn etwas auftaucht. Wird Sie wissen lassen, wenn ich dies herausfinden.
  • Haben Sie getroffen, einen Blick auf dieses Problem auf github?
  • Wenn die app im Vordergrund ist, können Sie Nachrichten empfangen, die direkt von FCM nicht durch APNs was ist, was wird verwendet, wenn die app im hintergrund. Um sicher zu sein, dass die APNs richtig konfiguriert ist, könnten Sie bestätigen, dass Sie erhalten ein APNs-token durch die Umsetzung der didRegisterForRemoteNotificationswithdevicetoken Methode.
  • Vor dieser version des Codes, ich wurde nicht mit der Methode swizzling Technik und Tat umzusetzen, der didRegisterForeRemoteNotificationswithdevicetoken Methode, wo ich war in der Lage zu bekommen ein token. Zuerst habe ich gehofft, würde ich fertig war, aber wenn dieses token nicht für FCM musste ich umgestalten. Nicht, dass die Antwort auf Ihre Frage?
  • Ja, ich lese die ganze Sache. Ich habe versucht die Priorität auf hoch-und Inhalte-zur Verfügung zu wahren. aber kein Glück. Ich habe auch versucht, mit beiden gleichzeitig. aber andere haben gesagt, dass wird nicht funktionieren, und in meinem Fall, das war auch wieder wahr.
  • Scheint, wie APNs sandbox hatte einige Probleme (forums.developer.apple.com/thread/52224), haben aber jetzt geklärt sind, sind Sie dennoch Probleme mit diesem?

Schreibe einen Kommentar