はじめに
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が確認できるので、そちらを保存しておきます。
- テータストリーム画面から作成した項目を押下します
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2322481%2F29c33cfe-ca26-d081-4d86-c6cb595f2b32.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=402e3dfb055b2a82b68c0f33b2d9a607)
- 測定IDをコピーして、保存しておきます
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2322481%2F2875c44a-0a8c-33c3-686d-0f48d49b4c16.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=80d3b4ca9da8e2172349c48657bef357)
クライアント側にイベントを仕込む場合は、この測定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 の項目を押下します
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2322481%2F8dc872de-c46b-6f9e-482d-37c76c0a9ae4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=93fe47d29292859bb809f4ca42ddaf1c)
- 作成ボタンを押下し、APIシークレットを発行します
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2322481%2F19944178-1716-3603-0093-33b381b8a1d2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=faf26a2e8add19efdc7aefc57c8cc124)
実際に送信処理を作ってみます。
測定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 を試している人(参考記事)が少なく、調査に時間がかかりましたが、簡単な実装でサーバー側からイベントが送信できることがわかりました!
少しでも参考になれば幸いです。