Edited at

[Firebase Push通知 iOS] アプリバックグラウンド時に didreceiveRemoteNotification が呼ばれない

More than 1 year has passed since last update.


はじめに

FirebaseのPush通知を実装する際に、少しはまってしまい、記事にもそこまでされてなかったようなのでメモ程度に書きます。


内容

アプリのバックグラウンド時に、push通知を受けた時に、以下のメソッドを呼び出そうとしたのですが呼べませんでした。


AppDelegate.swift

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が呼ばれません。

※ Firebaseドキュメントの引用

スクリーンショット 2017-12-30 9.23.38.png

push通知自体はきているのでクライアント側で制御できるものかと思っていたんですが、送信側も意識する必要があるみたいだったので、忘れないうちに書きました。

何かアドバイスや不足点などありましたら、コメントいただければ幸いです。m(_ _)m