2015-12-19 15 views
6

Moja aplikacja działa poprawnie z powiadomieniami push, jeśli aplikacja była w tle i/lub aplikacja znajduje się na pierwszym planie.Powiadomienia push po zakończeniu aplikacji

Mam problem, jeśli aplikacja zostanie zakończona (co wymuszam dwukrotnym kliknięciem przycisku strony głównej, znajdź aplikację i przesuń w górę).

Używam ios 9 i szybka 2.

w APP delegata didFinishLaunchingWithOptions, robię:

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

application.registerUserNotificationSettings(settings) 

application.registerForRemoteNotifications() 

Następnie:

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

Obserwowani przez didRegisterForRemoteNotificationsWithDeviceToken & didFailToRegisterForRemoteNotificationsWithError.

Następnie używam stosunkowo nową metodę:

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

Zgodnie z dokumentacją i tym link, jak sprzeciwiać się do starej wersji didReceiveRemoteNotification, metoda ta jest wywoływana gdy aplikacja została zakończona (jak sprzeciwiać wywołanie zakończyło się/zakończyło się uruchomieniemWithOptions).

Jednakże, jeśli nastąpiło naciśnięcie (które zostało odebrane - widzę to na ekranie) i uruchamiam aplikację po jej zakończeniu, ta metoda nie wydaje się być wywołana jako kod obsługujący naciśnięcie (po prostu powiadomienie, aby został odebrany przez odpowiedni ViewController) nie zostanie wywołane.

Czego mi brakuje? Czy muszę wykonać dodatkową kontrolę w programie didFinishLaunchingWithOptions? Gdzieś indziej?

Odpowiedz

2

udało się rozwiązać problemu przechwytywanie zdalnej push gdy aplikacja została rozwiązana z iOS 9.1 z następujących, ale nie udało się na 9,2 (niewydolność losowej):

Rejestracja dla pilota:

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

     } 

} 
Powiązane problemy