6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】Firebase Cloud Messaging(FCM)で画像付きのプッシュ通知を受信

Last updated at Posted at 2020-04-16

一応公式の説明はこちらですが、
https://firebase.google.com/docs/cloud-messaging/ios/send-image?hl=ja
イマイチ分かりにくいです。

以下の通り設定し、普通のプッシュ通知は受信できる前提です。
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=ja

Notification Service ExtensionのTargetを追加する

Xcode -> File -> New -> Target... -> Notification Service Extension

Product Nameは適宜決めてください。
今回はLanguageはSwiftに設定します。

Finishで作成。

NotificationService.swiftの編集

上記の操作で作成されたNotificationService.swiftを編集します。
Firebaseをインポートして、
サンプルで入っていたコードを消して、
didReceiveのcontentHandlerをFirebaseへ引き渡してください。
以下のようになればOKです。

NotificationService.swift
import UserNotifications
import Firebase

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            Messaging.serviceExtension().populateNotificationContent(bestAttemptContent, withContentHandler: contentHandler)
        }
    }
    
    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

CocoaPodsの設定

以下を追記

Podfile
...
target *ProductName* do
    pod 'Firebase'
    pod 'Firebase/Messaging'
end
...

編集完了後pod installしてください。

Provisioningの設定

Apple Developer -> Certificates, Identifiers & Profiles -> Identifiers -> + -> App IDs

Bundle IDは元のアプリのBundle IDに先程のProductNameをドットでつなげたもの
Push Notificationsにチェック

Xcodeで作成したプロビジョニングをインポートしてください。

テスト

Firebaseの管理画面でこちらに画像のURLを入力してください。

スクリーンショット 2020-04-16 11.41.44.png
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?