notification apple ios push-notification apple-push-notifications swift2

ios - apple push notification server



Enviar notificación cuando finaliza la aplicación (1)

Logré resolver el problema de interceptar un Remote Push cuando la aplicación finalizó para iOS 9.1 con lo siguiente pero falló en 9.2 (¿falla aleatoria?):

Registrarse para control remoto:

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

Mi aplicación funciona bien con notificaciones automáticas si la aplicación estaba en segundo plano y / o si la aplicación está en primer plano.

El problema que tengo es si la aplicación se termina (que forzar haciendo doble clic en el botón de inicio, buscar la aplicación y deslizar hacia arriba).

Estoy usando ios 9 y swift 2.

En el delegado de la aplicación, didFinishLaunchingWithOptions, hago:

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

Entonces:

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

Seguido por didRegisterForRemoteNotificationsWithDeviceToken y didFailToRegisterForRemoteNotificationsWithError.

Entonces, estoy usando el método relativamente nuevo:

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

De acuerdo con la documentación y este enlace , como se opone a la versión anterior de didReceiveRemoteNotification , se llama a este método si la aplicación se terminó (como se opone a llamar will / did finishLaunchingWithOptions).

Sin embargo, si hubo un empujón (que se recibió, puedo verlo en la pantalla) y lo inicio después de que se ha terminado, este método no parece ser llamado como el código que maneja el empuje (simplemente publique un notificación para que sea recogido por el ViewController respectivo) no se llama.

¿Qué me estoy perdiendo? ¿Hay alguna verificación adicional que deba hacer en didFinishLaunchingWithOptions? ¿En algún otro lugar?