FCMとは何か、開発におけるFirebase Cloud Messagingの原則

著者: IT Sectr 公開日: 2026-03-19 読了時間: 8 分

FCM(Firebase Cloud Messaging)は、プッシュ通知の配信とサーバーとモバイルアプリケーション間のデータ転送を行うためのGoogleのクロスプラットフォームサービスです。単一のAPIを通じてAndroid、iOS、ウェブプラットフォームをサポートします。Firebaseドキュメントによると、FCMは世界中で毎日10億以上のメッセージを処理しています。

重要なポイント

  • FCMはプッシュ通知とデータを送信するためのGoogleのクロスプラットフォームサービス
  • アーキテクチャ — クライアントが登録トークンを受け取り、サーバーがFirebase Connection Serverを通じてメッセージを送信
  • メッセージタイプ — notification(自動表示)と data(アプリ内で完全処理)
  • 配信 — FCMは永続的な接続または優先キューを使用して配信を保証
  • 統合 — Firebase SDKによるセットアップ、google-services.jsonの設定、サーバー設定

FCMとは?

Firebase Cloud Messaging(FCM)は、プッシュ通知とデータメッセージをモバイルデバイスに確実に配信するためのGoogleのクラウドサービスです。以前はGoogle Cloud Messaging(GCM)として知られていましたが、FCMはFirebaseエコシステムにおけるクロスプラットフォーム通知の主要ツールになりました。

FCMはプラットフォームに応じて最適な配信チャネルを自動的に選択します。Androidでは独自のFCM接続を使用し、iOSではAPNS(FCMゲートウェイ経由)を使用します。開発者は2つの異なる統合を実装する必要はありません — FCMがルーティングを処理します。

このサービスは、メッセージ送信用の統一されたREST APIとAdmin SDKを提供します。これにより、特定の受信者プラットフォームに縛られることなく、サーバー側から通知を送信できます。

FCMの主な機能

FCMは複数の配信モードをサポートしています:特定のデバイスへの単一メッセージ、トピックによるグループ配信、条件によるセグメント送信。予約送信や通知コンテンツのA/Bテストも利用可能です。

Firebase Cloud Messagingの仕組み

FCMのアーキテクチャは、クライアントアプリケーション、Firebase Connection Server、アプリサーバーの3つのコンポーネントに基づいています。クライアントは起動時にFCMに登録し、一意の登録トークンを受け取ります — これは特定のアプリケーションのデバイスを識別する文字列です。

アプリサーバーは受信者トークンまたはトピックを指定してFCM REST APIにリクエストを送信します。Firebase Connection Serverは永続的なXMPP接続またはHTTPリクエストを使用してメッセージを配信します。デバイスがオフラインの場合、メッセージはキューに入れられ、接続が復元されたときに配信されます。

FCMは優先キューと確認メカニズムを使用して配信を保証します。Androidではメッセージはキューに最大28日間保存され、iOSでは最大4週間(APNS経由)保存されます。有効期限が切れると、メッセージは通知なしで削除されます。

FCMトークンのライフサイクル

登録トークンはいくつかのケースで変更される可能性があります:アプリデータの復元時、新しいバージョンへのアップデート時、キャッシュのクリア時。アプリはトークンの更新を処理し、サーバーと同期するためにFirebaseMessagingService.onNewTokenを実装する必要があります。

FCMメッセージの種類

FCMは通知とデータの2つのタイプのペイロードをサポートしています。各タイプは、受信者デバイスでメッセージがいつどのように処理されるかを決定します。

パラメータNotificationData
自動表示はい(アプリがバックグラウンドの場合)いいえ(アプリ内のみ)
処理システム/NOS — バックグラウンド; アプリ — フォアグラウンド常にアプリ内(onMessageReceived)
最大サイズ4 KB4 KB
カスタムキー事前定義されたフィールドに限定任意のキーと値のペア
CollapseKeyの必要性オプショングループ化にオプション

実際には、アプリがonMessageReceivedで完全な通知処理を必要とする場合は、dataメッセージを使用することをお勧めします。Notificationメッセージは、システム表示で十分な単純なシナリオに適しています。

FCMとAPNSの比較

FCMとAPNSは2つの主要なプッシュ配信サービスです。FCMはクロスプラットフォームゲートウェイとして機能し、APNSはAppleエコシステム専用です。主な違いは、アーキテクチャ、証明書要件、ルーティングメカニズムにあります。

  • クロスプラットフォーム — FCMはAndroid、iOS、Webをサポート; APNSはiOS、macOS、watchOS、tvOSのみ
  • 認証 — FCMはServer KeyまたはOAuth 2.0を使用; APNSは証明書またはToken-based(p8キー)を使用
  • メッセージ優先度 — FCMはnormal/high; APNSはimmediate/power-efficient consideration
  • トピック — FCMは標準でトピック購読をサポート; APNSはサーバーロジックが必要

FCMと直接APNSの選択はプロジェクトのアーキテクチャに依存します。クロスプラットフォームアプリケーションにはFCMが最適な選択です。iOSのみのプロジェクトでは、HTTP/2 APIを介した直接APNSの使用が許容されます。

直接APNSよりもFCMを選ぶべき時

FCMは、プロジェクトがAndroidとiOSを同時に使用する場合、およびFirebase分析、通知のA/Bテスト、サーバーロジックなしのトピックが必要な場合に適しています。直接APNSは、依存関係が最小限で配信遅延の厳格な要件があるiOSのみのアプリケーションに適しています。

AndroidへのFCM統合

AndroidアプリケーションにFCMを接続するには、Firebase SDKを追加し、プロジェクトルートにgoogle-services.jsonを設定する必要があります。トークン登録後、アプリケーションはFirebaseMessagingServiceを介してメッセージを受信できるようになります。

kotlin
// build.gradle (Module)
dependencies {
    implementation("com.google.firebase:firebase-messaging:24.1.0")
}

// AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

class MyFirebaseMessagingService :
    FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        message.notification?.let {
            showNotification(it.title, it.body)
        }
    }
}

セットアップ後、アプリケーションは初回起動時に自動的にFCMトークンを受け取ります。このデバイスへのその後の通知配信のために、トークンをアプリサーバーに送信する必要があります。

FCM通知のチャネル設定

Android 8+では、自動表示のFCM通知を送信する前に、NotificationChannelを作成する必要があります。FCM通知メッセージはデフォルトのチャネルIDを使用しますが、最初のメッセージを受信したときにFirebaseMessagingServiceを介してカスタムチャネルを作成することをお勧めします。Dataメッセージにはチャネルは必要ありません — アプリ自体が通知をいつどのように表示するかを決定します。

iOSへのFCM統合

iOSでは、FCMはアプリサーバーとAPNSの間の仲介役として機能します。Firebaseはサーバーからメッセージを受信し、APNS形式にラップしてAppleゲートウェイを介して送信します。開発者はFirebaseコンソールでAPNSキーまたは証明書を設定する必要があります。

swift
import FirebaseMessaging
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        FirebaseApp.configure()
        UNUserNotificationCenter.current().delegate = self

        Messaging.messaging().delegate = self
        return true
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(
        _ messaging: Messaging,
        didReceiveRegistrationToken fcmToken: String?
    ) {
        UserDefaults.standard.set(fcmToken, forKey: "fcm_token")
    }
}

iOSでは、APNS登録は非同期で行われます。FCM SDKは自動的にAPNSトークンを取得し、Firebaseサーバーに渡します。didReceiveRegistrationTokenは、新しいFCMトークン(APNSトークンとプロジェクトIDを組み合わせたもの)を受信したときに起動します。

配信ステータスの確認

FCMは配信監視用のFirebaseコンソールを提供します:送信、受信、表示された通知の数。サーバー側の配信エラーを追跡するために、Firebase Cloud Functionsを介したステータスコールバックも利用可能です。主要な指標:通知のインプレッション数と開封数。

FCMのベストプラクティス

FCMを使用する際は、各シナリオに適したメッセージタイプを選択することが重要です。自動表示のシンプルな通知にはnotificationメッセージを使用します。表示前にアプリがデータを処理する必要がある場合は、dataメッセージを使用します。混合タイプ(notification + data)は、通知コンテンツを変更するためではなく、分析用にデータが必要な場合にのみ推奨されます。

トークンを集中管理します。現在のトークンをユーザーとプラットフォームにリンクされたテーブルでサーバーに保存します。古いトークンのクリーンアップメカニズムを実装します:NotRegisteredまたはInvalidRegistrationエラーが発生した場合、データベースからトークンを削除します。トークンはめったに変更されませんが、そのクリーンアップはFCMサポートの必須要素です。

メッセージをグループ化するためにコラプスキー(collapseKey)を使用します。同じタイプの複数の通知を送信する場合(例:「為替レートの更新」)、同じcollapseKeyを設定します。FCMはグループから最後のメッセージのみを配信し、デバイスの負荷を軽減し、ユーザーに通知が殺到するのを防ぎます。

Firebase ConsoleとCloud Functionsを通じて配信を監視します。FCM分析は、送信、受信、表示された通知の数を示します。表示率が70%未満の場合は、Androidのチャネル設定とiOSの許可設定を確認してください。配信率が低いのは、無効なチャネルや通知禁止が原因であることがよくあります。5つ目:Firebase A/Bテストを使用して通知テキストと送信時間を最適化します — Firebaseのデータによると、これにより開封率が15~25%向上します。

よくある質問

FCMとGCMの違いは何ですか?

FCMはGCM(Google Cloud Messaging)の進化版です。FCMはFirebase Consoleによる簡素化されたセットアップ、組み込み分析、トピック、Web Pushサポートを提供します。GCMは2019年4月に正式に廃止され、すべてのプロジェクトをFCMに移行する必要があります。

FCMを通じて無料で送信できるメッセージ数は?

Firebase Cloud Messagingは無料のサービスで、メッセージ数に制限はありません。Cloud FunctionsやFirestoreなど他のFirebaseサービスの使用に対してのみ料金が発生します。基本的な通知配信にFCMはSparkやBlazeのサブスクリプションを必要としません。

FCMトークンが変更される理由は?

FCMトークンは以下の場合に変更されます:バックアップからアプリを復元する場合、アプリデータをクリアする場合、再インストールする場合、Sender IDが変更された新しいバージョンにアップデートする場合。新しいトークンをサーバーに送信するために、FirebaseMessagingServiceで常にonNewTokenを処理してください。

FCMは中国で動作しますか?

GoogleのFCMは中国ではブロックされています。中国での通知配信には、Huawei Push Kit、MiPush(Xiaomi)、Oppo Push、Vivo Pushなどの代替サービスが使用されています。クロスプラットフォーム配信には、Getuiなどのマルチプロバイダーサービスが使用されています。

FCMが正しく設定されているか確認する方法は?

組み込みのFirebaseコンソールを使用します:「Cloud Messaging」→「Send Test Message」を選択します。テストトークンを入力し、notificationメッセージを送信します。デバイスに通知が表示されるはずです。FirebaseMessagingService.onMessageReceivedのログも監視できます。

まとめ

  • FCMはプッシュ通知とデータを配信するためのGoogleのクロスプラットフォームクラウドサービス
  • トークンはターゲットメッセージ配信に使用される一意のデバイス識別子
  • Notificationはバックグラウンドモードでシステムが自動表示するメッセージタイプ
  • Dataはアプリ内でのみ処理される完全なペイロードを持つメッセージタイプ
  • トピックはサーバーにトークンを保存せずにトピック購読に基づくグループ配信メカニズム
  • APNSゲートウェイ — iOSでは、FCMが仲介役としてAPNSを通じてメッセージを転送
  • 無料 — FCMは送信メッセージ数に対して課金しない

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください