🔔
【Swift】Firebaseからプッシュ通知を受け取るために最低限の実装をする(iOS15対応)
はじめに
iOS端末でFirebase(Firebase Cloud Messaging)からプッシュ通知を受信するため、できるだけコンパクトな実装をしてみました。
SwiftUIを使ってます。
※証明書周りの準備やFirebaseの設定は、わかりやすい記事があるので基本的にはそちらを紹介します。
環境
Swift5
Xcode13.3
iOS15
手順
証明書の準備
以下記事に沿って1-6の項目を進めてください。
Firebase Cloud Messagingでもp8ファイルが推奨されているため、p12ファイルではなく次項における説明(記事を紹介)に則ってp8ファイルを作ってそれを設定する方が良いかと思います。
p8ファイルの準備、Firebaseに設定
FirebaseでiOS用のアプリを準備しておいてください。
(GoogleService-Info.plistをアプリに追加も忘れないようにしてください。)
その後、以下の記事に沿ってp8ファイルを用意しFirebaseに設定します。
アプリ側の設定
- TARGETS -> Signing & Capabilities
- Automatically manage signingのチェックを外す
-
証明書の準備で用意したBundle IdentifierとProvisioning Profileを設定
- TARGETS -> Signing & Capabilities の+ボタンから「Push Notifications」を追加
コードを実装
CocoaPodsを使って必要なライブラリをインストールします。
pod 'Firebase/Messaging'
AppDelegate
クラスでプッシュ通知を受け取るための実装をします。
// xxxApp.swift
import SwiftUI
import Firebase
import FirebaseMessaging
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
// 初回起動時、プッシュ通知の許可ダイアログを表示させる
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in }
)
application.registerForRemoteNotifications()
return true
}
}
extension AppDelegate: MessagingDelegate {}
extension AppDelegate: UNUserNotificationCenterDelegate {
// アプリがフォアグラウンドでプッシュ通知を受信した場合に呼ばれる
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
print(userInfo)
completionHandler([.banner, .badge, .sound])
}
// 通知センター等でプッシュ通知をタップした場合に呼ばれる
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
print(userInfo)
completionHandler()
}
}
@main
struct xxxApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
テスト通知を行う
証明書の準備で登録した端末で実機ビルドを行い、FirebaseコンソールのMessagingからテスト通知を送信し、端末で無事に受信できたら成功です。
参考
Discussion