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

このガイドでは、 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_idapp_instance_id が使用されます。

前提条件

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

API シークレット

api_secret は、リクエストの認証に使用されます。このシークレットは機密情報として保持することが重要です。

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

  1. Google アナリティクスに移動し、 アカウントとプロパティに移動します。
  2. 左下の [管理] をクリックします。
  3. [データの収集と修正] で [データ ストリーム] をクリックします。
  4. ウェブまたはアプリのデータ ストリームを選択します。
  5. [Measurement Protocol API Secrets] をクリックします。
  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 シークレット。
  • 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_behaviorENFORCE_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 には、イベント、パラメータ、ユーザー プロパティに使用できない予約済みの名前が いくつかあります。

次のイベント名は、混乱を招きやすいものです。

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