FCM (Firebase Cloud Messaging) のセグメントデータを BigQuery からインポートする

Yuki Suwa
google-cloud-jp
Published in
10 min readDec 5, 2020

Firebase でプッシュ通知やアプリ内メッセージなどの対象(ユーザーセグメント)に BigQuery のデータを利用できるようになりました。この記事では BigQuery に格納してあるユーザーリストを Firebase にインポートし、FCM を使ってプッシュ通知を送ってみたいと思います。

この記事は Google Cloud Japan Customer Engineer Advent Calendar 2020 の 5日目の記事です。昨日は Takumi Karasawa の「Document AI を利用して電気料金を分析できるようにしてみた」でした。請求書などの電子化がノーコードで手軽に行えるので良いですよね。ぜひ試してみてください。

Firebase に BigQuery のデータをインポート!

今年 (2020年) に開催された Firebase Summit 2020 の中で Firebase のセグメントを BigQuery からインポートする機能が発表されました。こちらの機能を使うことで、Remote Config、Cloud Messaging (以降 FCM とします)、In-App Messaging の配信対象のユーザーを BigQuery からインポートできるようになりました。

本記事では BigQuery のインポートを使って、FCM を使ったプッシュ通知のセグメント配信を行うための手順を解説したいと思います。

なお、本記事で取り上げる機能は2020年12月5日時点でベータ版となっています。GA(一般利用可能)の際には仕様が変更されている可能性がある旨、ご理解いただいた上で参考にしていただけますと幸いです。

こちらのドキュメントにも記載がありますが、BigQuery からのデータインポートは以下のような特徴があります。

  • Firebase から BigQuery のデータセットを作成しますが、Firebase 側からは読み取りアクセス権のみが付与されます。
  • Firebase は BigQuery のデータを定期的に読み取ります。つまりデータ元である BigQuery のデータを更新すれば、Firebase には再インポートをせずにリストを更新できます。
  • Firebase は BigQuery のデータを読み取り、そのコピーを内部ストレージに保持します。
  • BigQuery で削除されたデータは Firebase の内部ストレージからも削除されます。セグメントからユーザーを除外した場合も反映されます。

一過性のデータインポートではなく定期的に読み取るので、BigQuery 上のデータをマスターとした形で利用することができます。

この機能の良いところはセグメントの条件に外部データも利用できるという点です。これまでは Firebase 上で保持されたユーザーデータのみを使ってセグメントを作ることができました。BigQuery からインポートできるようになったことで、BigQuery 上で外部データと Firebase のユーザーデータを組み合わせながらセグメントの条件を作ることができます(ただし Firebase のユーザーと外部データの名寄せは事前に必要となります)。

Firebase で BigQuery 統合を有効にする

まずはじめに Firebase のプロジェクトを用意します。本記事では Firebase プロジェクトの作成手順は割愛させていただきます。

Firebase のコンソールの プロジェクトの概要 をクリックし、プロジェクトを設定 を開きます。

プロジェクトの設定を開く

設定ページの中に 統合 タブを開くと BigQuery がありますので、こちらをクリックして BigQuery の統合設定を開きます。

統合の設定

BigQuery 統合の設定ページの一番下に BigQuery からインポート がありますので、こちらのトグルをオンにします。最後に BigQuery にリンク をクリックし、BigQuery 統合を有効化します。

BigQuery からインポートを行う設定

この設定を有効化すると、Firebase プロジェクトに対応する Google Cloud Platform プロジェクトの中で BigQuery の firebase_imported_segments という名称のデータセットが作成されます。このデータセット名は変更できません。設定画面は、以下の表示に変わります。

以上で BigQuery 統合の設定は完了です。

BigQuery にユーザーリストを用意する

次に BigQuery のコンソールに移動し、元のデータを作成していきます。先ほどの統合ページに BigQuery で表示 というリンクをクリックするとかんたんに Google Cloud Console に移動することができます。

firebase_imported_segments データセットを展開してみると、2つのテーブルが作成されていることが分かります。

データセットの中身

それぞれ以下の用途で使います。

SegmentMemberships

ユーザーIDリストを管理するテーブルです。以下のようなスキームで作成されています。 segment_labels には複数のセグメントを配列でセットすることができるようになっています。つまり、1ユーザーに対して1つの行をメンテナンスしていくことになります。

[
{
"name": "instance_id",
"type": "STRING"
},
{
"name": "segment_labels",
"type": "STRING",
"mode": "REPEATED"
},
{
"name": "update_time",
"type": "TIMESTAMP"
}
]

SegmentMetadata

セグメントのグループ自体を管理するテーブルです。スキーマは次の通りです。segment_label は SegmentMemberships の segment_labels で使います。つまり SegmentMetadata でセグメントグループを作成し、そのセグメントグループを segment_labels を使って各ユーザーに設定するというわけです。 display_name は Firebase コンソール上でセグメントを選ぶ際に表示される名前になります。

[
{
"name": "segment_label",
"type": "STRING"
},
{
"name": "display_name",
"type": "STRING"
}
]

それでは、これらのテーブルにデータを追加していきましょう。まずは SegmentMetadata テーブルに以下のようなデータを追加します。 From BigQuery という表示名のセグメントを作成します。

INSERT firebase_imported_segments.SegmentMetadata 
VALUES ('from_bq', 'From BigQuery')

なお、SQL によるデータ追加は BigQuery の Sandbox 環境では使えません。SQL によるクエリ実行を行いたい場合は Billing (請求先)の設定を行う必要があります。Sandbox 環境で制限される事項はこちらのページを参考にしてください。

次にセグメント対象となるユーザーのレコードを追加します。 hoge0000 としているところは仮で設定した Instance ID です。もし既に検証用のデバイス・アプリをお持ちであれば、その Instance ID を設定することでセグメントに含めることができます。

INSERT firebase_imported_segments.SegmentMemberships
VALUES ('hoge0000', ['from_bq'], CURRENT_TIMESTAMP())

かんたんなデータですが、以上で準備完了です。

セグメントを FCM で使用する

作成したセグメントが Firebase に取り込まれるのは、即時ではなく12時間以内となります。ですので、この後の手順でセグメントが表示されない場合はまだ取り込まれていない可能性が高いので、最大12時間待つ必要がある点にご留意ください。

作成したセグメントを FCM で利用する方法は至ってかんたんです。ターゲットの条件を選ぶフォームに インポートしたセグメント が表示されるようになります。こちらを選択すると、先ほど追加した From BigQuery という名前のセグメントが選べます。

インポートしたセグメントの選択

あとは通常の FCM の使いかたと全く同じです。選んだセグメントにのみプッシュ通知を届けることができます!

まとめ

Firebase と BigQuery の統合の設定は簡単ですし、一度インポート設定するだけなので導入は非常にかんたんです。あとは BigQuery のデータセットをメンテナンスするだけで、Firebase の標準機能ではできなかったビジネス要件を含んだユーザーセグメントの作成が行えるようになりました。

例えば Google Analytics から取れるユーザー行動データをより複雑な条件で絞り込んだり、あるいは外部のデータと組み合わせながらユーザーを絞り込むこともできます。

いずれにせよ、無料から始められるところがおすすめです。ぜひご自身の Firebase プロジェクトでも BigQuery 統合を有効化し、パワフルなセグメンテーションをお試しください。

明日は Yasushi Takata の「アプリケーションプラットフォーム選択におけるベストプラクティス」です。タイトルからすでに参考になること間違いなしですね。お楽しみに!

参考情報

--

--

Yuki Suwa
google-cloud-jp

Customer Engineer at Google Cloud Japan. All stories are in my opinion.