2015-12-19 8 views
6

Meine App funktioniert gut mit Push-Benachrichtigungen, wenn die App im Hintergrund war und/oder wenn die App im Vordergrund ist.Push-Benachrichtigung beim Beenden der App

Das Problem, das ich habe, ist, wenn die App beendet ist (was ich zwinge durch einen Doppelklick auf den Home-Button, finden Sie die App, und wischen nach oben).

Ich bin mit ios 9 und schnell 2.

In AppDelegate, didFinishLaunchingWithOptions, ich mache:

let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 

application.registerUserNotificationSettings(settings) 

application.registerForRemoteNotifications() 

Dann:

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {   
     application.registerForRemoteNotifications() 
} 

Gefolgt von didRegisterForRemoteNotificationsWithDeviceToken & didFailToRegisterForRemoteNotificationsWithError.

Dann Ich bin mit der relativ neue Methode:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {...} 

Gemäß der Dokumentation und diesen link, in Bezug auf die alte Version von didReceiveRemoteNotification entgegensetzen, diese Methode aufgerufen wird, wenn der App beendet wurde (als opponiere zum Anrufen wird/tat finishLaunchingWithOptions).

Allerdings, wenn es ein Push war (das empfangen wurde - ich habe es auf dem Bildschirm sehen) und ich starten Sie die App, nachdem es beendet wurde, ist diese Methode scheint nicht als Code aufgerufen werden, die die Schiebegriffe (Einfach eine Benachrichtigung posten, damit sie vom jeweiligen ViewController abgeholt wird) wird nicht aufgerufen.

Was fehlt mir? Gibt es eine zusätzliche Überprüfung, die ich in didFinishLaunchingWithOptions durchführen muss? Irgendwo anders?

Antwort

2

Managed das Problem des Abfangens eines Remote-Push-zu lösen, wenn die App für ios 9.1 mit folgendem beendet, aber es versäumt auf 9.2 (Zufallsausfall?):

Register für Fern:

if #available(iOS 9, *) { 

      let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 

      //   UIApplication.sharedApplication().registerUserNotificationSettings(settings) 
      // 
      //   UIApplication.sharedApplication().registerForRemoteNotifications() 

      application.registerUserNotificationSettings(settings) 

      application.registerForRemoteNotifications() 

} else if #available(iOS 8.0, *){ 
    register for 8... 
} else { //ios 7 
    register for 7... 
} 


if let _ = launchOptions { 

     if let _ = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 

       handleRemotePush() 

      } else if let _ = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification { 

       handleLocalNots() 

      } else { 

       handleElse() 

     } 

} 
Verwandte Themen