AppDelegateでのPUSH通知の受信処理


はじめに

iOSでPUSH通知を受信する時のAppDelegateのメソッドをまとめておきます。
2021年6月追記 : Xcode 12では、UIKit App DelegateSwiftUI Appが選択できる。UIKit App Delegateを選択した場合は、AppDelegateSceneDelegateがある。本記事は、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:) 

参考文献