はじめに
Google Analytics 4 のページビューやイベントを仕込む際は、クライアント側(View)に仕込むのが多いとは思いますが、サーバー側からイベントを送る必要が出てきたため、その方法についてまとめています。
※「Ruby on Rails」の環境で調査していたので、言語はRubyにて試しています。
プロパティおよびデータストリームを準備する
こちらに関しましては、細かく説明してしまうと長くなってしまうので、公式のドキュメントへの参照のみとします。
(検索で色々とわかりやすい記事が出てくると思います)
- プロパティ設定
-
https://support.google.com/analytics/answer/9304153?hl=ja&ref_topic=9303319
- データストリームに関しては、今回はウェブで進めていきます。
-
https://support.google.com/analytics/answer/9304153?hl=ja&ref_topic=9303319
測定IDを確認する
先ほど作成したデータストリームから測定IDが確認できるので、そちらを保存しておきます。
- テータストリーム画面から作成した項目を押下します
- 測定IDをコピーして、保存しておきます
クライアント側にイベントを仕込む場合は、この測定IDだけで問題ないのですが、サーバー側からイベントを作成する場合には、後述するAPI シークレットの値が必要となります。
Measurement Protocol について
HTTP リクエストを通して Google アナリティクス サーバーに直接イベントを送信には、Measurement Protocol を使用する必要があります。
送信には、URLパラメータ
と JSON 本文
が必要になります。
-
URLパラメータ
- [必須] api_secret
- 後述作成します。
- [必須] measurement_id
- データストリームの測定ID
- [必須] api_secret
-
JSON 本文
- [必須] client_id
- クライアントの一意の識別子
- [省略可] user_id
- ユーザーの一意の識別子
- こちらを設定することで、クライアント側とサーバー側でユーザーの紐付けなどが可能
- [必須] events
- イベント項目の配列
- [必須] client_id
Measurement Protocol API シークレットの作成
測定IDをコピーしたウェブストリームの詳細画面から各種操作を行います。
- Measurement Protocol API secret の項目を押下します
- 作成ボタンを押下し、APIシークレットを発行します
実際に送信処理を作ってみます。
測定ID
とAPIシークレット
の下準備が出来たので、あとは送信処理を作ります。
今回は、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 を試している人(参考記事)が少なく、調査に時間がかかりましたが、簡単な実装でサーバー側からイベントが送信できることがわかりました!
少しでも参考になれば幸いです。