このガイドでは、Google アナリティクス Measurement Protocol のウェブとアプリのストリーム イベントを Google アナリティクス サーバーに送信し、Measurement Protocol イベントを Google アナリティクスのレポートで確認できるようにする方法を説明します。
Measurement Protocol リクエストに必要な識別子とパラメータは、ウェブ ストリームとアプリ ストリームのどちらにイベントを送信するかによって異なります。
- ウェブ ストリーム(通常は 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 Secret] をクリックします。
- [作成] をクリックします。
- シークレットのニックネームを入力して [作成] をクリックします。
[シークレット値] をコピーします。
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 はイベントまたはユーザー プロパティを拒否します。
Firebase 向け Google アナリティクス SDK または gtag.js で収集されたイベントと結合または関連付けて処理することを目的として Measurement Protocol を使用して送信されたイベントは、元のクライアントサイド イベントのタイムスタンプから 48 時間以内に Google アナリティクスで受信される必要があります。これより後に受信したイベントは、特にコンバージョン アトリビューションなどの目的で、想定どおりに処理されない可能性があります。
制限事項
Measurement Protocol イベントを Google アナリティクスに送信する際には、次の制限が適用されます。
プロパティごとに 1 時間あたり最大 1 億件の非コンバージョン リクエストを送信できます。リクエスト内のイベントのいずれも、Google 広告でコンバージョンが設定されているキーイベントでない場合、そのリクエストは非コンバージョン リクエストとなります。この上限を超えると、Measurement Protocol は、そのプロパティの残りの時間について、すべての非コンバージョン リクエストを無視します。
リクエスト内で指定できるイベントは 25 個までです。
イベント内で指定できるパラメータは 25 個までです。
イベント内で指定できるユーザー プロパティは 25 個までです。
ユーザー プロパティ名は半角 24 文字(全角 12 文字)以下にする必要があります。
ユーザー プロパティ値は 36 文字以下で指定する必要があります。
イベント名は半角 40 文字以下にして、先頭を英字にする必要があります。使用できる文字は英数字とアンダースコアのみです。
アイテム パラメータなどのパラメータ名は半角 40 文字以下にして、先頭を英字にする必要があります。使用できる文字は英数字とアンダースコアのみです。
アイテム パラメータなどのパラメータ値は、標準の Google アナリティクスのプロパティでは 100 文字以下、Google アナリティクス 360 プロパティでは 500 文字以下にする必要があります。
この上限は、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イベントを使用します。
各ユースケースの追加要件については、一般的なユースケースをご覧ください。