2015-12-19 3 views
6

Мое приложение прекрасно работает с push-уведомлениями, если приложение было в фоновом режиме и/или если приложение находится на переднем плане.Push-уведомление, когда приложение завершено

Проблема заключается в том, что приложение завершено (которое я принудительно с помощью двойного щелчка на домашней кнопке, найти приложение и проведите по экрану вверх).

Я использую ИОС 9 и быстры 2.

В приложение делегата, didFinishLaunchingWithOptions, я:

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

application.registerUserNotificationSettings(settings) 

application.registerForRemoteNotifications() 

Тогда:

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

Вслед за didRegisterForRemoteNotificationsWithDeviceToken & didFailToRegisterForRemoteNotificationsWithError.

Затем я использую относительно новый метод:

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

Согласно документации и этим link, как противостоять старой версии didReceiveRemoteNotification, этот метод вызывается, если приложение было прекращено (как противостоять к вызову will/did finishLaunchingWithOptions).

Однако, если был нажат (который был получен - я вижу его на экране), и я запускаю приложение после его завершения, этот метод, похоже, не называется кодом, который обрабатывает нажатие (просто отправьте уведомление, чтобы оно было подобрано соответствующим ViewController) не вызывается.

Что мне не хватает? Есть ли дополнительная проверка, которую мне нужно сделать в файле didFinishLaunchingWithOptions? Где-нибудь еще?

ответ

2

удалось решить проблему перехвата удаленного Нажмите, когда приложение завершается для ИОС 9.1 со следующим, но он не на 9,2 (случайного выхода из строя?):

Регистрация для удаленного:

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

     } 

} 
Смежные вопросы