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

このガイドでは、 Google アナリティクス Measurement Protocol のウェブとアプリのストリーム イベントを Google アナリティクス サーバーに送信し、Measurement Protocol イベントを Google アナリティクス レポートで確認できるようにする方法を説明します。

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

リクエストを整形する

Google アナリティクス Measurement Protocol でサポートされるのは、HTTP POST リクエストのみです。

イベントを送信するには、次の形式を使用してください。

POST /mp/collect HTTP/1.1
HOST: www.google-analytics.com
Content-Type: application/json

PAYLOAD_DATA

リクエスト URL には、必ず次の情報を含めてください。

  • api_secret: Google アナリティクス管理画面で生成される API Secret

    新しい Secret を作成するには、[管理] > [データの収集と修正] > [データ ストリーム] > [ストリームを選択] > [Measurement Protocol API Secret] > [作成] の順にクリックします。

  • firebase_app_id: Firebase アプリ ID。この ID は、Firebase コンソールの [プロジェクトの設定] > [全般] > [マイアプリ] > [アプリ ID] で確認できます。

    firebase_app_idapp_instance_id とは異なります。firebase_app_id はお客様のアプリを識別し、一方の app_instance_id はそのアプリの 1 回のインストールを識別します。

Measurement Protocol では、リクエスト本文を JSON POST 本文 形式で指定する必要があります 。次の例をご覧ください。

  {
   "app_instance_id": "APP_INSTANCE_ID",
   "events": [
      {
        "name": "login",
        "params": {
          "method": "Google",
          "session_id": "SESSION_ID",
          "engagement_time_msec": 100
        }
      }
   ]
  }

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_behaviorENFORCE_RECOMMENDATIONS に設定されている場合、Measurement Protocol はイベントまたはユーザー プロパティを拒否します。

Measurement Protocol を使用して送信されたイベントを、Firebase 向け Google アナリティクス SDK または gtag.js で収集されたイベントと結合または処理する場合は、元のクライアントサイド イベントのタイムスタンプから 48 時間以内 に Google アナリティクスで受信する必要があります。これより遅れて受信したイベントは、コンバージョン アトリビューションなどの目的で適切に処理されない可能性があります。

制限事項

Measurement Protocol イベントを Google アナリティクスに送信する際には、次の制限が適用されます。

  • リクエスト内で指定できるイベントは 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 広告で検索ユーザーは入力されません。

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