2015-12-19 18 views
6

アプリがバックグラウンドであった場合やアプリがフォアグラウンドにある場合は、プッシュ通知でアプリが正常に動作します。アプリが終了したときにプッシュ通知

私の問題は、アプリが終了している場合です(ホームボタンをダブルクリックしてアプリを見つけ、スワイプして強制する)。 didFinishLaunchingWithOptions、

私は、IOS 9を使用していますし、アプリデリゲート2.

迅速、私が行います。その後

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が続きます。反対するとして(、ドキュメント、およびこの linkによる

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

didReceiveRemoteNotificationの古いバージョンに反対するとして、アプリが終了した場合、このメソッドが呼び出されます。そして、

、私は比較的新しいメソッドを使用しています〜に電話をかける/完了しました.LaunchingWithOptions)。

しかし、プッシュ(受信した - 私は画面上で見ることができます)が終了した後にアプリケーションを起動すると、このメソッドはプッシュを処理するコードとして呼び出されないようです(単にそれぞれのViewControllerによってピックアップされるように通知をポストする)は呼び出されません。

私には何が欠けていますか? didFinishLaunchingWithOptionsで行う必要がある追加のチェックはありますか?どこか別の場所?

答えて

2

アプリは、以下を使用したIOS 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() 

     } 

} 
関連する問題