Measurement Protocol イベントを Google アナリティクスに送信する

このガイドでは、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 Secret の URL パラメータ 必須 必須
デバイス ID の JSON 本文フィールド client_id app_instance_id

このガイドで説明を希望するプラットフォームを選択してください。

このタブでは、Firebase 向け Google アナリティクス SDK を使用して、アプリ ストリームのユーザー アクティビティに関連するイベントをサーバーから送信する手順について説明します。これらのリクエストでは firebase_app_id と app_instance_id が使用されます。

前提条件

Measurement Protocol を使用してイベントを送信するには、Google アナリティクスのプロパティまたは Firebase プロジェクトの特定の識別子が必要です。

API Secret

api_secret はリクエストの認証に使用されます。このシークレットの機密性を維持することが重要です。

新しいシークレットを作成するには:

  1. Google アナリティクスに移動し、アカウントとプロパティに移動します。
  2. 左下の [管理] をクリックします。
  3. [データの収集と修正] で [データ ストリーム] をクリックします。
  4. ウェブまたはアプリデータ ストリームを選択します。
  5. [Measurement Protocol API secret] をクリックします。
  6. [作成] をクリックします。
  7. シークレットのニックネームを入力し、[作成] をクリックします。
  8. [シークレット値] をコピーします。

Firebase アプリ ID

firebase_app_id は Firebase アプリを識別します。app_instance_id とは異なります。

Firebase アプリ ID を確認するには:

  1. Firebase コンソールでプロジェクトを開きます。
  2. [プロジェクトの概要] の横にある設定の歯車アイコンをクリックし、[プロジェクト設定] を選択します。
  3. [全般] タブの [アプリ] セクションに移動します。
  4. 特定の iOS アプリまたは Android アプリを選択します。
  5. [アプリ 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 Secret。
  • 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 では、リクエスト内の各イベントとユーザー プロパティについて、次のリストで見つかった最初のタイムスタンプが使用されます。

  1. イベントまたはユーザー プロパティの timestamp_micros。
  2. リクエストの timestamp_micros。
  3. 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 イベントの tutorialBeginUnixEpochTimeInMicros
  • customer_tier ユーザー プロパティの customerTierUnixEpochTimeInMicros
  • join_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 文字)以下にする必要があります。

    この制限は、session_id パラメータと session_number パラメータの値が、Google タグ マネージャーの対応するアナリティクス セッション ID 組み込み変数とアナリティクス セッション数組み込み変数によって提供される場合には適用されません。

  • アイテム パラメータに指定できるカスタム パラメータの数は 10 個までです。

  • POST 本文は 130 KB 未満にする必要があります。

  • Google アナリティクスに送信されるアプリ測定の Measurement Protocol イベントでは、アプリユーザーについて、Google 広告で検索ユーザーは入力されません。

  • 一部のイベント、パラメータ、ユーザー プロパティの名前は予約済みのため、使用できません。詳細については、予約済みの名前をご覧ください。

予約済みの名前

Measurement Protocol には、イベント、パラメータ、ユーザー プロパティに使用できない予約済みの名前がいくつかあります。

次のイベント名は、混同しやすい一般的なものです。

各ユースケースの追加要件については、一般的なユースケースをご覧ください。