このガイドでは、 Google アナリティクス Measurement Protocol のウェブとアプリのストリーム イベントを Google アナリティクス サーバーに送信し、Measurement Protocol イベントを Google アナリティクス レポートで確認できるようにする方法を説明します。
Measurement Protocol リクエストに必要な ID とパラメータは、イベントをウェブ ストリーム に送信するかアプリ ストリーム に送信するかによって異なります。
- ウェブ ストリーム (通常は gtag.js または Google タグ マネージャーで計測)の場合は、リクエスト URL の
measurement_idと JSON 本文のclient_idを使用してユーザー インスタンスを識別します。client_idは、ウェブサイトの Google アナリティクス タグによって生成された ID と一致する必要があります。 - アプリ ストリーム (Firebase SDK で計測)の場合は、リクエスト URL の
firebase_app_idと JSON 本文のapp_instance_idを使用します。これらは Firebase 向け Google アナリティクス SDK によって提供されます。
このガイドでは、両方のシナリオの例を示します。
ストリーム タイプ別のリクエストの主要コンポーネント
| コンポーネント | ウェブ ストリーム(gtag.js/GTM) | アプリ ストリーム(Firebase) |
|---|---|---|
| データ ストリームの URL パラメータ | measurement_id |
firebase_app_id |
| API シークレットの URL パラメータ | 必須 | 必須 |
| デバイス ID の JSON 本文フィールド | client_id |
app_instance_id |
このガイドで説明を希望するプラットフォームを選択してください。
このタブでは、Firebase 向け Google アナリティクス SDK を使用して、アプリ ストリーム のユーザー アクティビティに関連するイベントをサーバーから送信する手順について説明します。これらのリクエストでは firebase_app_id と app_instance_id が使用されます。
前提条件
Measurement Protocol を使用してイベントを送信するには、Google アナリティクスのプロパティまたは Firebase プロジェクトの特定の ID が必要です。
API シークレット
api_secret は、リクエストの認証に使用されます。このシークレットは機密情報として保持することが重要です。
新しいシークレットを作成するには:
- Google アナリティクスに移動し、 アカウントとプロパティに移動します。
- 左下の [管理] をクリックします。
- [データの収集と修正] で [データ ストリーム] をクリックします。
- ウェブまたはアプリのデータ ストリームを選択します。
- [Measurement Protocol API Secrets] をクリックします。
- [作成] をクリックします。
- シークレットのニックネームを入力し、[作成] をクリックします。
[シークレット値] をコピーします。
Firebase アプリ ID
firebase_app_id は Firebase アプリを識別します。これは app_instance_id とは異なります。
Firebase アプリ ID を確認するには:
- Firebase コンソールでプロジェクトを開きます。
- [プロジェクトの概要] の横にある設定の歯車アイコンをクリックし、[プロジェクトの設定] を選択します。
- [全般] タブで、[アプリ] セクションに移動します。
- 特定の iOS アプリまたは Android アプリを選択します。
- [アプリ ID] の値をコピーします。
リクエストを整形する
Google アナリティクス Measurement Protocol でサポートされるのは、HTTP POST リクエストのみです。
イベントを送信するには、次の形式を使用してください。
POST /mp/collect?firebase_app_id=<var>FIREBASE_APP_ID</var>&api_secret=<var>API_SECRET</var> HTTP/1.1
HOST: www.google-analytics.com
Content-Type: application/json
PAYLOAD_DATA
リクエスト URL クエリ パラメータには、次の情報を含める必要があります(これらの値の確認方法または作成方法について詳しくは、 前提条件をご覧ください)。
api_secret: リクエストを認証するための API シークレット。firebase_app_id: アプリケーションの Firebase アプリ ID。
Measurement Protocol では、JSON POST 本文形式でリクエスト本文を 指定する必要があります。次の例をご覧ください。
{
"app_instance_id": "APP_INSTANCE_ID",
"events": [
{
"name": "login",
"params": {
"method": "Google",
"session_id": "SESSION_ID",
"engagement_time_msec": 100
}
}
]
}
モバイルアプリのインストールを一意に識別するには、リクエスト本文に app_instance_id を指定する必要があります。これは、アプリ自体を識別する firebase_app_id とは異なります。
app_instance_id と Firebase SDK を使用して取得する方法について詳しくは、
app_instance_id のリファレンス ドキュメントをご覧ください。
session_start は 予約済みのイベント
名ですが、新しい session_id を作成すると、
session_start を送信しなくても新たなセッションを作成できます。セッション数のカウント方法を理解しましょう。
試してみる
複数のイベントを一度に送信するために使用できる例を次に示します。この例では、tutorial_begin イベントとjoin_group イベントを Google アナリティクス サーバーに送信し、地理情報を user_location フィールドを使用して含め、デバイス情報を device フィールドを使用して含めます。
const firebaseAppId = "FIREBASE_APP_ID";
const apiSecret = "API_SECRET";
fetch(`https://www.google-analytics.com/mp/collect?firebase_app_id=${firebaseAppId}&api_secret=${apiSecret}`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
app_instance_id: "APP_INSTANCE_ID",
events: [
{
name: "tutorial_begin",
params: {
"session_id": "SESSION_ID",
"engagement_time_msec": 100
}
},
{
name: "join_group",
params: {
"group_id": "G_12345",
"session_id": "SESSION_ID",
"engagement_time_msec": 150
}
}
],
user_location: {
city: "Mountain View",
region_id: "US-CA",
country_id: "US",
subcontinent_id: "021",
continent_id: "019"
},
device: {
category: "mobile",
language: "en",
screen_resolution: "1280x2856",
operating_system: "Android",
operating_system_version: "14",
model: "Pixel 9 Pro",
brand: "Google",
browser: "Chrome",
browser_version: "136.0.7103.60"
}
})
});
firebase_app_id の形式はプラットフォームによって異なります。Firebase の構成ファイルとオブジェクトの
**アプリケーション ID** をご覧ください。
タイムスタンプをオーバーライドする
Measurement Protocol では、リクエスト内の各イベントとユーザー プロパティについて、次のリストで最初に見つかったタイムスタンプが使用されます。
- イベントまたはユーザー プロパティの
timestamp_micros。 - リクエストの
timestamp_micros。 - Measurement Protocol がリクエストを受信した時刻。
次の例では、リクエスト内のすべての
イベントとユーザー
プロパティに適用されるリクエストレベルのタイムスタンプを送信します。その結果、Measurement Protocol は tutorial_begin イベントと join_group イベント、および customer_tier ユーザー プロパティに requestUnixEpochTimeInMicros のタイムスタンプを割り当てます。
{
"timestamp_micros": requestUnixEpochTimeInMicros,
"events": [
{
"name": "tutorial_begin"
},
{
"name": "join_group",
"params": {
"group_id": "G_12345",
}
}
],
"user_properties": {
"customer_tier": {
"value": "PREMIUM"
}
}
}
次の例では、リクエストレベルのタイムスタンプ、イベントレベルのタイムスタンプ、ユーザー プロパティレベルのタイムスタンプを送信します。その結果、Measurement Protocol は次のタイムスタンプを割り当てます。
tutorial_beginイベントのtutorialBeginUnixEpochTimeInMicroscustomer_tierユーザー プロパティのcustomerTierUnixEpochTimeInMicrosjoin_groupイベントとnewsletter_readerユーザー プロパティのrequestUnixEpochTimeInMicros。
{
"timestamp_micros": requestUnixEpochTimeInMicros,
"events": [
{
"name": "tutorial_begin",
"timestamp_micros": tutorialBeginUnixEpochTimeInMicros
},
{
"name": "join_group",
"params": {
"group_id": "G_12345",
}
}
],
"user_properties": {
"customer_tier": {
"value": "PREMIUM",
"timestamp_micros": customerTierUnixEpochTimeInMicros
},
"newsletter_reader": {
"value": "true"
}
}
}
過去のイベントとユーザー プロパティの検証動作
イベントとユーザー プロパティには、最大 72 時間前までさかのぼってタイムスタンプを適用できます。timestamp_micros の値が 72 時間前より前の場合は、Measurement Protocol は次のようにイベントまたはユーザー プロパティを受け入れるか拒否します。
validation_behaviorが設定されていないか、RELAXEDに設定されている場合、Measurement Protocol はイベントまたはユーザー プロパティを受け入れますが、そのタイムスタンプを 72 時間前にオーバーライドします。validation_behaviorがENFORCE_RECOMMENDATIONSに設定されている場合、Measurement Protocol はイベントまたはユーザー プロパティを拒否します。
Measurement Protocol を使用して送信されたイベントを、Firebase 向け Google アナリティクス SDK または gtag.js によって収集されたイベントと結合または処理する場合は、元のクライアントサイド イベントのタイムスタンプから 48 時間以内 に Google アナリティクスで受信する必要があります。これより後に受信したイベントは、コンバージョン アトリビューションなどの目的で、期待どおりに処理されない可能性があります。
制限事項
Measurement Protocol イベントを Google アナリティクスに送信する際には、次の制限が適用されます。
プロパティごとに 1 時間あたり最大 1 億件の非コンバージョン リクエストを送信できます。リクエスト内のイベントが、Google 広告で コンバージョンが発生したキーイベントでない場合、その リクエストは非コンバージョン リクエストです。この上限を超えると、Measurement Protocol は、そのプロパティの非コンバージョン リクエストを、その時間の残りの間、サイレントに無視します。
リクエスト内で指定できるイベントは 25 個までです。
イベント内で指定できるパラメータは 25 個までです。
イベント内で指定できるユーザー プロパティは 25 個までです。
ユーザー プロパティ名は半角 24 文字(全角 12 文字)以下にする必要があります。
ユーザー プロパティ値は 36 文字以下で指定する必要があります。
イベント名は 40 文字以下で指定し、英数字とアンダースコアのみを含め、先頭を英字にする必要があります。
アイテム パラメータなどのパラメータ名は半角 40 文字以下にして、先頭を英字にする必要があります。使用できる文字は英数字とアンダースコアのみです。
アイテム パラメータなどのパラメータ値は、標準の Google アナリティクスのプロパティの場合は半角 100 文字(全角 50 文字)以下、Google アナリティクス 360 プロパティの場合は半角 500 文字(全角 250 文字)以下にする必要があります。
この制限は、Google タグ マネージャーの対応するアナリティクス セッション IDとアナリティクス セッション番号の組み込み変数によって値が提供される場合、
session_idパラメータとsession_numberパラメータには適用されません。アイテム パラメータに指定できるカスタム パラメータの数は 10 個までです。
POST 本文は 130 KB 未満にする必要があります。
Google アナリティクスに送信されるアプリの Measurement Protocol イベントでは、アプリユーザーについて、Google 広告で検索ユーザーは入力されません。
一部のイベント名、パラメータ名、ユーザー プロパティ名は予約済みであり、使用できません。詳しくは、予約済みの名前について ご覧ください。
予約済みの名前
Measurement Protocol には、イベント、パラメータ、ユーザー プロパティに使用できない予約済みの名前が いくつかあります。
次のイベント名は、混乱を招きやすいものです。
screen_view: このイベントはアプリ ストリームでのみ使用できます。ウェブ ストリームの場合は、代わりにpage_viewを使用します。ad_impression: このイベントはアプリ ストリームでのみ使用できます。in_app_purchase: このイベントはアプリ ストリームでのみ使用できます。ウェブ ストリームの場合は、代わりにpurchaseイベントを使用します。
各ユースケースの追加要件については、一般的なユースケースをご覧ください。