その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

Push Notification おさらい

プッシュ通知を実装するときに、「バックグラウンドで通知受けたときはapplication:didFinishLaunchingWithOptions:とapplication:didReceiveRemoteNotification:、どっちが呼ばれるんだっけ?」とかなんだかいつも自信なくなってきてドキュメントを見返したりしてしまうので、ドキュメントと、実際の動作を確認した内容をまとめておきます。


(参考ドキュメント)
Local Notification および Push Notification プログラミングガイド(日本語)
英語・最新版

アプリがバックグラウンドで動作中に通知が配信された場合の挙動


 
 


application:didFinishLaunchingWithOptions:()(Remote Notification)Local Notification(Local Notification)

アプリがフォアグラウンドで動作中に通知が配信された場合の挙動


application:didReceiveRemoteNotification:(Remote Notification)application:didReceiveLocalNotification:(Local Notification)Local Notification
 


application:didReceiveRemoteNotification: application:didReceiveLocalNotification:applicationStateUIApplicationStateInactiveUIApplicationStateActive 
 




You can determine whether an application is launched as a result of the user tapping the action button or whether the notification was delivered to the already-running application by examining the application state. 


ApplicationState


まとめ

フォアグラウンドでプッシュ通知を受け取ったとき

  • application:didReceiveRemoteNotification:メソッドが呼ばれる
  • application:didReceiveRemoteNotification:でのUIApplicationStateActiveの値はUIApplicationStateActive

アプリのプロセスがバックグラウンドで生きているときにプッシュ通知を受け取り、ユーザーがアクションボタンをタップしたとき

  • application:didReceiveRemoteNotification:メソッドが呼ばれる
  • application:didReceiveRemoteNotification:でのUIApplicationStateActiveの値はUIApplicationStateInactive

アプリのプロセスがバックグラウンドで生きていないときにプッシュ通知を受け取り、ユーザーがアクションボタンをタップしたとき

  • application:didFinishLaunchingWithOptions:メソッドが呼ばれる
  • application:didFinishLaunchingWithOptions:の引数launchOptionsにUIApplicationLaunchOptionsRemoteNotificationKeyというキーでペイロードが入ってくる