#はじめに
FirebaseのPush通知を実装する際に、少しはまってしまい、記事にもそこまでされてなかったようなのでメモ程度に書きます。
#内容
アプリのバックグラウンド時に、push通知を受けた時に、以下のメソッドを呼び出そうとしたのですが呼べませんでした。
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
switch application.applicationState {
case .inactive:
print(userInfo)
case .active:
print(userInfo)
case .background:
print(userInfo)
}
}
push通知は受信できるのですが、didReceiveRemoteNotification
メソッドが呼ばれず、
アプリがアクティブな時は上記のメソッドを呼べました。
#解決方法
Firebase Cloud Messaging の HTTP プロトコル
こちらの記事を参考に解決しました。
push通知を送信する際に、送信側でリクエストボディに
"content_available" : true
を追加しておく必要があるようで、デフォルトではアプリがバックグラウンドにある場合、アプリがスリープ状態にあります。上記のキーバリューを送信してあげないと、スリープ状態のままなのでアプリバックグラウンド時にdidreceiveremotenotification
が呼ばれません。
push通知自体はきているのでクライアント側で制御できるものかと思っていたんですが、送信側も意識する必要があるみたいだったので、忘れないうちに書きました。
何かアドバイスや不足点などありましたら、コメントいただければ幸いです。m(_ _)m