2015-12-19 27 views
6

La mia app funziona perfettamente con le notifiche push se l'app era in background e/o se l'app è in primo piano.Notifica push all'arresto dell'app

Il problema che ho è se l'app è terminata (che forza con doppio clic sul pulsante home, trova l'app e scorri verso l'alto).

Sto usando ios 9 e veloce 2.

In App delegato, didFinishLaunchingWithOptions, lo faccio:

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

application.registerUserNotificationSettings(settings) 

application.registerForRemoteNotifications() 

Poi:

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

Seguito da didRegisterForRemoteNotificationsWithDeviceToken & didFailToRegisterForRemoteNotificationsWithError.

Poi, io sto usando il metodo relativamente nuovo:

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

Secondo la documentazione e questo link, come opporsi alla vecchia versione di didReceiveRemoteNotification, questo metodo viene chiamato se l'applicazione è stata terminata (come opporsi per chiamare will/did finishLaunchingWithOptions).

Tuttavia, se c'era un push (che è stato ricevuto - lo posso vedere sullo schermo) e lancio l'app dopo che è stato terminato, questo metodo non sembra essere chiamato come il codice che gestisce il push (semplicemente postare una notifica in modo che venga raccolto dal rispettivo ViewController) non viene chiamato.

Cosa mi manca? C'è un ulteriore controllo che devo fare in didFinishLaunchingWithOptions? Altrove?

risposta

2

riuscito a risolvere il problema di intercettare un Push remoto quando l'applicazione viene terminata per iOS 9.1 con il seguente, ma non è riuscito a 9.2 (errore casuale?):

Registrati remota:

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

     } 

}