1

Hallo ich zum ersten Mal FCM Push-Benachrichtigung mit bin ich FCM mit diesem Code implementiert haben:FIRInstanceID immer null in FIRInstanceIDAPNSTokenType.Sandbox

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
      let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 
      application.registerUserNotificationSettings(settings) 
      application.registerForRemoteNotifications() 
      FIRApp.configure() 
      NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification), 
                 name: kFIRInstanceIDTokenRefreshNotification, object: nil) 
     } 
func tokenRefreshNotification(notification: NSNotification) { 
     print("refresh token call") 
      let refreshedToken = FIRInstanceID.instanceID().token()! 
      print("InstanceID token: \(refreshedToken)") 

      NSUserDefaults.standardUserDefaults().setObject(refreshedToken, forKey: "deviceToken"); 
      // Connect to FCM since connection may have failed when attempted before having a token. 

      connectToFcm() 
      updateDeviceToken() 
    } 
func connectToFcm() { 
     FIRMessaging.messaging().connectWithCompletion { (error) in 
      if (error != nil) { 
       print("Unable to connect with FCM. \(error)") 
      } else { 
       print("Connected to FCM.") 
      } 
     } 
    } 
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
     FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) 
     /*when I comment above line app works fine but not receiving notificaiton 
     in background and If i uncomment above line than app crashes 
     for the first time when I launch on device */ 
} 
    func applicationDidBecomeActive(application: UIApplication) { 
    connectToFcm() 
} 

Console log <FIRInstanceID/WARNING> APNS Environment in profile: development vor app Absturz druckt.

Jetzt Problem ist, wenn ich gesetzt FIRInstanceIDAPNSTokenType.Sandbox dann stürzt app, wenn ich zum ersten Mal bcaz Einführung von i FIRInstanceID.instanceID().token()! nil in tokenRefreshNotification Methode immer bin. Und wenn ich kein APNS-Token auf FIRInstanceID gesetzt habe, funktioniert App gut, aber ich bekomme keine Hintergrundbenachrichtigung in diesem Szenario. und gib mir auch lösung, wie zu überprüfen FIRInstanceID.instanceID().token()! ist null oder nicht

+0

Manchmal werden Sie Null für die Token in tokenRefreshNoification bekommen, das ist die, wenn die anfänglich auftreten kann generierte Token werden schnell durch neue ersetzt. Sie sollten einen weiteren Rückruf zu tokenRefreshNotification mit einem anderen non-nil-Token erhalten. –

Antwort

0

Ich habe gerade mein Problem mit Crash-Handling in tokenRefreshNotification Methode gelöst. Ich bin Überprüfung TokenID ist gleich Null oder nicht mit diesem Code und jetzt meine App nicht abstürzt und auch ich bin immer Token-ID:

func tokenRefreshNotification(notification: NSNotification) { 
     // print("refresh token call") 
     guard let contents = FIRInstanceID.instanceID().token() 
     else { 
      return 
     } 
      // let refreshedToken = FIRInstanceID.instanceID().token()! 
      print("InstanceID token: \(contents)") 

      NSUserDefaults.standardUserDefaults().setObject(contents, forKey: "deviceToken"); 
      // Connect to FCM since connection may have failed when attempted before having a token. 

      connectToFcm() 
      updateDeviceToken() 
    }