はじめに
iOSでPUSH通知を受信する時のAppDelegateのメソッドをまとめておきます。
2021年6月追記 : Xcode 12では、UIKit App Delegate
とSwiftUI App
が選択できる。UIKit App Delegate
を選択した場合は、AppDelegate
とSceneDelegate
がある。本記事は、ios12で利用されていたAppDelegate
を利用した場合のことを記載している。
環境
- Xcode : 10.2.1 (2019年7月), 12.5 (2021年6月確認)
- ios : 12.3.1 (2019年7月), 14.6 (2021年6月確認)
AppDelegateでのPUSH通知の種類
iosアプリがPUSH通知を受信する種類は以下の3つがあります。
以下ではそれぞれを説明します。
- アプリが起動していない時にPUSH通知を受信した場合
- アプリが起動している時にPUSH通知を受信した場合
- バックグランドPUSH通知を受信した場合
アプリが起動していない時にPUSH通知を受信した場合
アプリが起動していない時にPUSH通知を受信した場合は、通知センター等に通知されます。この通知をタップするとアプリが起動されます。アプリが起動される時には、AppDelegateの以下のメソッドが呼ばれます。
userNotificationCenter(_:didReceive:withCompletionHandler:)
アプリが起動している時にPUSH通知を受信した場合
アプリが起動している時(Foreground)は、AppDelegateの以下のメッセージが呼ばれます。通知センターには表示されません。
userNotificationCenter(_:willPresent:withCompletionHandler:)
バックグランドPUSH通知を受信した場合
画面にPUSH通知表示せず、アプリが起動していない状態でも、PUSH通知を受信した時に30秒間だけアプリを起動して処理を実行できるバックグランド通知があります。通知メッセージにはcontent-available
を入れます。サーバ側からのPUSH通知に関しては、以前の記事を参照ください。
バックグランドPUSH通知を受信するためには、Xcodeのプロジェクトで、以下のようにCapabilityでRemote Notificationsにチェックを入れます。これによって、バックグランドPUSH通知を受信することができます。
バックグランド通知を受信した場合は、AppDelegateの以下のメソッドが呼ばれます。
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)