プッシュ通知受信時に呼ばれるメソッドについて
環境: Swift2.3
前提となるCapabilities
の設定
- Push Notifications -> ON - Background Modes -> OFF
プッシュ通知受信時に呼ばれるメソッド
プッシュ通知受信時に呼び出されるメソッドに
1. application:didReceiveRemoteNotification:
と
2. application:didReceiveRemoteNotification:fetchCompletionHandler:
という似たメソッドが存在するがこの違いについてメモしておく。
// 1 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { // userInfo の処理 } // 2 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { // userInfo の処理 }
基本的には、この2つのメソッドのどちらか片方のみ実装することになる。
両方とも実装していた場合は
2. application:didReceiveRemoteNotification:fetchCompletionHandler:
の方が優先されて呼び出され、
1. application:didReceiveRemoteNotification:
の方は呼び出されないので注意。
1. application:didReceiveRemoteNotification:
を実装してプッシュ通知を受信
アプリ未起動時
画面上部に通知表示。
通知をタップすると
application:didFinishLaunchingWithOptions:
のみ呼び出される。
application:didReceiveRemoteNotification:
は呼ばれない。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] { // userInfo の処理 } }
フォアグラウンド時
通知表示はない。
application:didReceiveRemoteNotification:
のみ呼び出される
バックグラウンド時
画面上部に通知表示。
通知をタップするとapplication:didReceiveRemoteNotification:
のみ呼び出される
2. application:didReceiveRemoteNotification:fetchCompletionHandler:
を実装してプッシュ通知を受信
アプリ未起動時
画面上部に通知表示。
通知をタップすると
application:didFinishLaunchingWithOptions:
が呼び出される。
その後
application:didReceiveRemoteNotification:fetchCompletionHandler:
が呼び出される。
ここが1とは違い必ず呼び出される。
フォアグラウンド時
通知表示はない。
application:didReceiveRemoteNotification:fetchCompletionHandler:
のみ呼び出される
バックグラウンド時
画面上部に通知表示。
通知をタップするとapplication:didReceiveRemoteNotification:fetchCompletionHandler:
のみ呼び出される