Flutter で Firebase Cloud Messaging クライアント アプリを設定する

Flutter で FCM クライアントを設定する手順は次のとおりです。

プラットフォーム固有の設定と要件

必要な手順の中には、ターゲット プラットフォームによって異なるものがあります。

iOS+

Xcode でアプリの機能を有効にする

アプリでメッセージを受信できるようにするには、Xcode プロジェクトでプッシュ通知とバックグラウンド モードを有効にする必要があります。

  1. Xcode プロジェクト ワークスペース(ios/Runner.xcworkspace)を開きます。
  2. プッシュ通知を有効にします
  3. バックグラウンド取得リモート通知バックグラウンド実行モードを有効にします。

APNs 認証キーをアップロードする

FCM を使用する前に、APNs 証明書を Firebase にアップロードします。まだ APNs 証明書を用意していない場合は、Apple Developer Member Center で作成してください。

  1. Firebase コンソールのプロジェクト内で歯車アイコンを選択し、[プロジェクトの設定]、[Cloud Messaging] タブの順に選択します。
  2. 開発用証明書、本番環境用証明書、またはその両方の [証明書をアップロード] ボタンを選択します。少なくとも 1 つ選択する必要があります。
  3. 証明書ごとに .p12 ファイルを選択し、必要に応じてパスワードを入力します。この証明書のバンドル ID はアプリのバンドル ID と一致させてください。[保存] を選択します。

メソッドの実装入れ替え

Apple デバイスで FCM Flutter プラグインを使用するには、メソッドの実装入れ替えを無効にしないでください。実装入れ替えは必須です。これが実装されていない場合、FCM トークン処理などの主要な Firebase の機能が正常に動作しません。

Android

Google Play 開発者サービス

FCM クライアントには Android 4.4 以降を搭載しているデバイスが必要です。またそのデバイスには、Google Play 開発者サービスがインストールされているか、Google API を使用して Android 4.4 が動作しているエミュレータが搭載されている必要があります。ただし、開発した Android アプリは Google Play ストア経由以外の手段でもデプロイできます。

Play 開発者サービスの SDK に依存するアプリについては、Google Play 開発者サービス機能にアクセスする前に、互換性のある Google Play 開発者サービスの APK がデバイスにインストールされているかどうかをアプリが必ずチェックする必要があります。このチェックは、メイン アクティビティの onCreate() メソッドと onResume() メソッドの 2 か所で行うことをおすすめします。onCreate() では、チェックにパスしないとアプリを使用できないようにします。onResume() では、ユーザーが [戻る] ボタンなどの他の手段を使って実行中のアプリに戻った場合にもチェックされるようにします。

互換性のあるバージョンの Google Play 開発者サービスがデバイスにインストールされていない場合は、アプリで GoogleApiAvailability.makeGooglePlayServicesAvailable() を呼び出すと、ユーザーが Google Play ストアから Google Play 開発者サービスをダウンロードできるようになります。

ウェブ

FCM でウェブ認証情報を構成する

FCM のウェブ インターフェースでは、「Voluntary Application Server Identification 鍵(VAPID 鍵)」と呼ばれるウェブ認証情報を利用して、サポートされているウェブプッシュ サービスへの送信要求が承認されます。アプリをプッシュ通知に登録するには、鍵ペアを Firebase プロジェクトに関連付ける必要があります。Firebase コンソールを使用して、新しい鍵ペアを生成することも既存の鍵ペアをインポートすることもできます。

新しい鍵ペアを生成する
  1. Firebase コンソールの [設定] ペインで [Cloud Messaging] タブを開き、[ウェブ設定] セクションまでスクロールします。

  2. [ウェブプッシュ証明書] タブで、[Generate key pair] をクリックします。鍵ペアが生成されたという通知がコンソールに表示され、追加した公開鍵の文字列と日付が表示されます。

既存の鍵ペアをインポートする

すでにウェブアプリで使用している鍵ペアがある場合は、その鍵を FCM にインポートすると、FCM API を介して既存のウェブアプリ インスタンスにアクセスできます。鍵をインポートするには、Firebase プロジェクトに対するオーナーレベルのアクセス権が必要です。既存の公開鍵と秘密鍵を URL セーフの Base64 エンコード形式でインポートします。

  1. Firebase コンソールの [設定] ペインで [Cloud Messaging] タブを開き、[ウェブ設定] セクションまでスクロールします。

  2. [ウェブプッシュ証明書] タブで、リンクテキスト「既存の鍵ペアをインポート」を見つけて選択します。

  3. [鍵ペアのインポート] ダイアログで公開鍵と秘密鍵をそれぞれのフィールドに入力し、[インポート] をクリックします。追加した公開鍵の文字列と日付がコンソールに表示されます。

鍵の形式と生成方法の詳細については、アプリケーション サーバー キーをご覧ください。

FCM プラグインをインストールする

  1. Flutter 用の Firebase プラグインをインストールして初期化します(まだ行っていない場合)。

  2. Flutter プロジェクトのルートから、次のコマンドを実行してプラグインをインストールします。

    flutter pub add firebase_messaging
    
  3. 完了したら、Flutter アプリを再ビルドします。

    flutter run
    

登録トークンにアクセスする

特定のデバイスにメッセージを送信するには、そのデバイスの登録トークンを知っておく必要があります。このチュートリアルを完了するには、Notifications コンソールのフィールドにトークンを入力する必要があるため、トークンを取得したら、必ずコピーするか安全に保管しておく必要があります。

アプリ インスタンスの現在の登録トークンを取得するには、getToken() を呼び出します。このメソッドに通知権限が付与されていない場合は、ユーザーに通知権限を付与するよう求められます。すでに通知権限が付与されている場合、このメソッドはトークンを返すか、エラーが発生するので future を拒否します。

final fcmToken = await FirebaseMessaging.instance.getToken();

ウェブ プラットフォームで、VAPID 公開鍵を getToken() に渡します。

final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");

トークンが更新されるたびに通知を受けるには、onTokenRefresh ストリームに登録します。

FirebaseMessaging.instance.onTokenRefresh
    .listen((fcmToken) {
      // TODO: If necessary send token to application server.

      // Note: This callback is fired at each app startup and whenever a new
      // token is generated.
    })
    .onError((err) {
      // Error getting token.
    });

自動初期化を禁止する

FCM 登録トークンが生成されると、ライブラリによりその ID と構成データが Firebase にアップロードされます。トークンの自動生成を禁止する場合は、ビルド時に自動初期化を無効にします。

iOS

iOS では、メタデータ値を Info.plist に追加します。

FirebaseMessagingAutoInitEnabled = NO

Android

Android では、次のメタデータ値を AndroidManifest.xml に追加して、アナリティクスの収集と FCM 自動初期化を無効にします(両方を無効にする必要があります)。

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

FCM の自動初期化をランタイム時に再度有効にする

特定のアプリ インスタンスに対して自動初期化を有効にするには、setAutoInitEnabled() を呼び出します。

await FirebaseMessaging.instance.setAutoInitEnabled(true);

この値をいったん設定すると、アプリを再起動しても維持されます。

次のステップ

クライアント アプリの設定が完了すると、Notifications Composer でダウンストリーム メッセージを送信できるようになります。バックグラウンド アプリにテスト メッセージを送信するをご覧ください。

その他のより高度な動作をアプリに追加するには、サーバーの実装が必要です。

次に、アプリ クライアントで以下を実行します。