目次

目次

Firebaseプロジェクト移行時のFirebase Cloud Messaging登録トークン再取得方法

アバター画像
深山侑花
アバター画像
深山侑花
最終更新日2024/06/19 投稿日2024/06/19

はじめに

こんにちは、iOSアプリ開発を担当している深山です。

私が担当しているアプリでは、Firebase Analyticsで取得しているログの見直しに伴い、新規のFirebaseプロジェクトに移行する取り組みを行いました。 しかし、動作確認時に、PUSH通知に利用していたFirebase Cloud Messaging(以下、FCM)の登録トークンが取得できなくなっていることがわかりました。 今回はその問題をどのように解決したかを紹介します。

FCMとは

Firebase Cloud Messagingは、Googleが提供するメッセージ配信基盤で、Android、iOS、WebアプリケーションなどにPUSH通知を送信するためのサービスです。FCMを利用することで、開発者はユーザーにタイムリーな情報を提供し、リテンション率やエンゲージメントを向上させることができます。

FCM登録トークンについて

FCM登録トークンの概要

FCMを用いたPUSH通知を利用するには、登録トークンが必要になります。

登録トークンは、アプリケーションのインスタンスを一意に識別するための文字列です。これにより、FCMは特定のデバイスやアプリケーションにメッセージを送信することができます。以下に、登録トークンの主な特徴と役割について説明します。

  • 一意性
    • 登録トークンはデバイスごとに一意であり、アプリケーションのインスタンスごとに異なるため、特定のユーザーに対して個別にメッセージを送信できます。
  • 有効期限
    • 登録トークンには有効期限があります。期限が切れると、アプリは新しいトークンを取得する必要があります。これにより、セキュリティが強化され、無効なトークンへのメッセージ送信を防ぎます。
  • 生成と更新
    • トークンは初回アプリ起動時に生成され、その後必要に応じて更新されます。更新のタイミングには、トークンの有効期限切れやユーザーのアプリ再インストールなどがあります。
  • 利用方法
    • アプリは取得したトークンを、PUSH通知送信用の任意のサーバーに送信し、サーバーがこのトークンを使用して特定のデバイスに対してメッセージを送信します。

登録トークンの取得方法

ここではiOSアプリでの登録トークンの取得方法を説明します。

  1. Firebaseのセットアップ Firebaseコンソール上から取得したGoogleService-Info.plistをプロジェクトに追加し、任意の方法でFirebaseSDKをインストールします。具体的なセットアップ方法は割愛します。
  2. AppDelegeteの設定 AppDelegate.swiftに必要な設定を行います。

    import UIKit
    import Firebase
    import UserNotifications
    
    @main
    class AppDelegate: UIResponder, UIApplicationDelegate {
       var window: UIWindow?
    
       func application(
           _ application: UIApplication,
           didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
       ) -> Bool {
           // Firebase初期化
           FirebaseApp.configure()
    
           // プッシュ通知の許可をリクエスト
           UNUserNotificationCenter.current().delegate = self
           let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
           UNUserNotificationCenter.current().requestAuthorization(
               options: authOptions,
               completionHandler: {_, _ in }
           )
    
           application.registerForRemoteNotifications()
    
           // 登録トークン取得のためのデリゲートを設定
           Messaging.messaging().delegate = self
    
           return true
       }
    }
    
    // MARK: - UNUserNotificationCenterDelegate
    extension AppDelegate : UNUserNotificationCenterDelegate {
    
       // フォアグラウンドで通知を受信したときに呼ばれる
       func userNotificationCenter(
           _ center: UNUserNotificationCenter,
           willPresent notification: UNNotification,
           withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
       ) {
           completionHandler([.alert, .badge, .sound])
       }
    }
    
    // MARK: - MessagingDelegate
    extension AppDelegate : MessagingDelegate {
    
       // 新しい登録トークンを取得したときに呼ばれる
       func messaging(
           _ messaging: Messaging,
           didReceiveRegistrationToken fcmToken: String?
       ) {
           guard let fcmToken else {
               return
           }
           // トークンをサーバーに送信する処理をここに追加
       }
    }
    
  3. トークンの更新通知を受け取り トークンが更新されると、 messaging(_:didReceiveRegistrationToken:)メソッドが呼ばれます。このメソッド内で新しいトークンを取得し、必要に応じてサーバーに送信します。

これで、iOSアプリでFCM登録トークンを取得し、更新をハンドリングする処理が実装できます。

アバター画像

深山侑花

目次