0

我已經使用FCM實現推送通知。 當我的應用程序在前臺並通知到達然後didReceiveRemoteNotification方法被調用,但是當應用程序不活動它不會調用此方法推送通知不會調用didReceiveRemoteNotification swift

我通過設置一個布爾值爲true時,應用程序背景,但不會改變布爾這意味着它不執行這條線.. 這是我的方法。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
     self.application(application, didReceiveRemoteNotification: userInfo) { (UIBackgroundFetchResult) in 
      if UIApplication.sharedApplication().applicationState != .Active{ 


      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "AriveNotification") 
      NSUserDefaults.standardUserDefaults().synchronize() 
      }else{ 

       NSUserDefaults.standardUserDefaults().setBool(false, forKey: "AriveNotification") 
       NSUserDefaults.standardUserDefaults().synchronize() 
      } 
     } 
    } 


    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
     if UIApplication.sharedApplication().applicationState != .Active{ 


      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "AriveNotification") 
      NSUserDefaults.standardUserDefaults().synchronize() 
      }else{ 

       NSUserDefaults.standardUserDefaults().setBool(false, forKey: "AriveNotification") 
       NSUserDefaults.standardUserDefaults().synchronize() 
      } 
     } 
     completionHandler(.NewData) 
    } 

註冊GCM推送通知我使用這些方法,當用戶登錄成功。

func userDidLoggedIn() -> Void { 
    tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! VaboTabBarController 


    self.window?.rootViewController = self.tabBarController 
    self.window?.makeKeyAndVisible() 

    self.registerDeviceForPushNotification(UIApplication.sharedApplication()) 

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


func registerDeviceForPushNotification(application:UIApplication) -> Void { 

    let settings: UIUserNotificationSettings = UIUserNotificationSettings.init(forTypes: [.Alert,.Badge,.Sound], categories: nil) 
    self.pushNotificationToken = FIRInstanceID.instanceID().token()! 
    let userID = self.userData["id"] as! NSNumber 

    print("InstanceID token: \(self.pushNotificationToken)") 
    self.registerDeviceOnServerWith(self.pushNotificationToken, userID: userID) 
    application.registerUserNotificationSettings(settings) 
    application.registerForRemoteNotifications() 
} 


func tokenRefreshNotification(notification: NSNotification) { 
    if let refreshedToken = FIRInstanceID.instanceID().token() { 

     let userID = self.userData["id"] as! NSNumber 

     self.registerDeviceOnServerWith(refreshedToken, userID: userID) 
     print("InstanceID token: \(refreshedToken)") 
    } 

    // Connect to FCM since connection may have failed when attempted before having a token. 
    connectToFcm() 
} 

PS。我已經從能力以及info.plist中設置了遠程通知檢查。另外我也嘗試通過從通知有效載荷中添加"content-available":1

回答

0

您必須在通知有效負載中編寫正確的拼寫和字符放置。 根據您的陳述,您可能在內容可用的位置放置了不正確的字符。 請將您的有效載荷在這種格式..

{ 
    "aps":{ 
     "alert":{ 
      "title":"Notification Title Text", 
      "Body" :"Notification Body", 
      "content_available":1 

     } 
    } 
} 

你已經寫了content-available應該content_availble。現在這將喚醒您的應用程序以在後臺運行您的邏輯