16
7

More than 1 year has passed since last update.

Google Analytics 4 のイベントをサーバー側から送信する方法を調べてみた

Last updated at Posted at 2022-12-26

はじめに

Google Analytics 4 のページビューやイベントを仕込む際は、クライアント側(View)に仕込むのが多いとは思いますが、サーバー側からイベントを送る必要が出てきたため、その方法についてまとめています。

※「Ruby on Rails」の環境で調査していたので、言語はRubyにて試しています。

プロパティおよびデータストリームを準備する

こちらに関しましては、細かく説明してしまうと長くなってしまうので、公式のドキュメントへの参照のみとします。
(検索で色々とわかりやすい記事が出てくると思います)

測定IDを確認する

先ほど作成したデータストリームから測定IDが確認できるので、そちらを保存しておきます。

  • テータストリーム画面から作成した項目を押下します
  • 測定IDをコピーして、保存しておきます

クライアント側にイベントを仕込む場合は、この測定IDだけで問題ないのですが、サーバー側からイベントを作成する場合には、後述するAPI シークレットの値が必要となります。

Measurement Protocol について

HTTP リクエストを通して Google アナリティクス サーバーに直接イベントを送信には、Measurement Protocol を使用する必要があります。

送信には、URLパラメータJSON 本文 が必要になります。

  • URLパラメータ

    • [必須] api_secret
      • 後述作成します。
    • [必須] measurement_id
      • データストリームの測定ID
  • JSON 本文

    • [必須] client_id
      • クライアントの一意の識別子
    • [省略可] user_id
      • ユーザーの一意の識別子
      • こちらを設定することで、クライアント側とサーバー側でユーザーの紐付けなどが可能
    • [必須] events
      • イベント項目の配列

Measurement Protocol API シークレットの作成

測定IDをコピーしたウェブストリームの詳細画面から各種操作を行います。

  • Measurement Protocol API secret の項目を押下します
  • 作成ボタンを押下し、APIシークレットを発行します

実際に送信処理を作ってみます。

測定IDAPIシークレット の下準備が出来たので、あとは送信処理を作ります。
今回は、Faradayというライブラリを使用して、下記のサンプルクラスを作成しました。

class GoogleAnalytics4
  class << self
    TIMEOUT = 5

    def send_event(user_id:, event_name:, params:)

      faraday_connection = ::Faraday::Connection.new(
        request: {
          open_timeout: TIMEOUT,
          timeout: TIMEOUT,
        },
        ) do |connection|
        connection.request :json
        connection.response :logger, logger
        connection.adapter :net_http
      end

      measurement_id = "G-12345678" # 測定ID
      api_secret = "xxxxxxxxxx" # APIシークレット

      faraday_connection.post(
        "https://www.google-analytics.com/mp/collect?measurement_id=#{measurement_id}&api_secret=#{api_secret}",
        {
          client_id: '12345678',
          user_id: user_id,
          events: [
            {
              name: event_name,
              params: params.merge(engagement_time_msec: 100, session_id: 123), # リアルタイムの項目に反映させるため
            }
          ]
        }
      )
    rescue StandardError => e
      logger.error(e)
    end

    private

    def logger
      Rails.logger
    end
  end
end
  • Controller 等で呼び出していただければ、無事に送信されると思います。
::GoogleAnalytics4.send_event(
  user: 1000001,
  event_name: 'test_event',
  params: {
    param1: 1234,
  },
)

※Google Analytics のレポート画面のリアルタイムの項目で確認する場合には、engagement_time_msec:session_id のパラメーターが必要となりますので、テストの際には設定する事をおすすめします。
(無くてもレポートには反映されますが、時間がかかります)

最後に

Google Analytics 4 の Measurement Protocol を試している人(参考記事)が少なく、調査に時間がかかりましたが、簡単な実装でサーバー側からイベントが送信できることがわかりました!
少しでも参考になれば幸いです。

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7