composer require alexwestergaard/php-ga4
欧州連合は、Google Analytics がデフォルトでは GDPR に準拠していないことを通知しました。これは、フロントエンド クライアントがイベントとともに IP アドレスやデバイス情報などの訪問者の詳細を送信するためです。これは、ヨーロッパ リージョン内の仲介サーバーを使用することで回避できます。
セットアップには、測定 IDとAPI シークレットが必要です。管理者 (左下) -> アカウント -> データ ストリーム -> {あなたのストリーム} に移動します。ここでは、上部に測定 ID があり、ページの少し下に「測定プロトコルの API シークレット」があり、そこでAPI secret
を作成できます。
Administrator
(左下) に移動し、[ Account
-> Data Streams
-> ストリームを選択します。
ここでは、 Measurement-ID
上部にあり、その下にApi Secrets for Measurement Protocol
あり、そこで自分でAPI Secret
作成できます。
認証情報を取得したら、次のように Analytics を初期化できます。
use AlexWestergaard PhpGa4 Analytics ;
$ analytics = Analytics:: new (
measurement_id: ' G-XXXXXXXX ' ,
api_secret: ' xYzzX_xYzzXzxyZxX ' ,
debug: true | false #Default: False
);
サーバー側のタグ付けはフロントエンド クライアントを置き換えるものではなく、セッションの開始はgtag.js
クライアントを通じて行われる必要があります。デフォルトのフローは次のように発生することになっています。
_ga
および_gid
Cookie を Client/GTAG.js に送り返します_ga
(または_gid
) を使用してイベントを送信/取り込みます注: Google Analytics からセッション Cookie を取得せずにイベントをバックエンドにプッシュすることは完全に可能です。ただし、バックエンド経由でもプッシュする方法が分からないと、 GTAG.js
リクエスト内にバンドルされている情報が失われます。 _ga
セッションと_gid
セッションを独自に生成された ID に置き換えることができます。
すべてのリクエストはこの構造に従い、Google Analytics がリクエストを受け入れるために少なくとも 1 つのイベントを含む必要があります。
Analytics [
Events [
Event {
Parameters
? Items [
Item Parameters
]
}
]
User Properties [
Properties {
Key: Value
}
]
? Consent {
Key: Value
}
? User Data {
Key: Value
}
]
これは、ドキュメントに示されている事前構築されたイベントのリストです。すべてのイベントには、各イベントのトリガー位置を特定するための次のパラメーターがあります。
// Manual setting of each event
$ event -> setLanguage (string $ var );
$ event -> setPageLocation (string $ var );
$ event -> setPageReferrer (string $ var );
$ event -> setPageTitle (string $ var );
$ event -> setScreenResolution (string $ var );
// Fillable for multiple events
$ eventPage = AlexWestergaard PhpGa4 Helper EventParamsHelper ();
$ event -> setEventPage ( $ eventPage );
このライブラリはバックエンドのサーバー側追跡用に構築されていますが、おそらくほとんどのイベントは Javascript または Websocket を使用してフロントエンド経由でトリガーされます。例は 2 つあり、1 つはログ/キューに登録されたイベントの純粋なバックエンドとして、もう 1 つはフロントエンドからバックエンドへの通信用です。
use AlexWestergaard PhpGa4 Exception ;
use AlexWestergaard PhpGa4 Analytics ;
use AlexWestergaard PhpGa4 Event ;
use AlexWestergaard PhpGa4 Item ;
// require vendor/autoload.php
$ visitors = getVisitorsAndEvents (); // pseudo function, make your own logic here
foreach ( $ visitors as $ collection ) {
// Group of events, perhaps need logic to change from json or array to event objects
// Maybe its formatted well for the > ConvertHelper::parseEvents([...]) < helper
$ groups = $ collection [ ' events ' ];
// If gtag.js, this can be the _ga or _gid cookie
// This can be any kind of session identifier
// Usually derives from $_COOKIE['_ga'] or $_COOKIE['_gid'] set by GTAG.js
$ visitor = $ collection [ ' session_id ' ];
// load logged in user/visitor
// This can be any kind of unique identifier, readable is easier for you
// Just be wary not to use GDPR sensitive information
$ user = $ collection [ ' user_id ' ];
// Render events grouped on time (max offset is 3 days from NOW)
foreach ( $ groups as $ time => $ data ) {
try {
$ analytics = Analytics:: new ( $ measurementId , $ apiSecret )
-> setClientId ( $ visitor )
-> setTimestampMicros ( $ time );
if ( $ user !== null ) {
$ analytics -> setUserId ( $ user );
}
$ analytics -> addUserParameter (... $ data [ ' userParameters ' ]); // pseudo logic for adding user parameters
$ analytics -> addEvent (... $ data [ ' events ' ]); // pseudo logic for adding events
$ analytics -> post (); // send events to Google Analytics
} catch ( Exception Ga4Exception $ exception ) {
// Handle exception
// Exceptions might be stacked, check: $exception->getPrevious();
}
}
}
// array< array< eventName, array<eventParams> > >
axios . post ( "/your-api-endpoint/ga4-event-receiver" , [
// Note each event is its own object inside an array as
// this allows to pass the same event type multiple times
{
addToCart : {
currency : "EUR" ,
value : 13.37 ,
items : [
{
item_id : 1 ,
item_name : "Cup" ,
price : 13.37 ,
quantity : 1 ,
} ,
] ,
} ,
} ,
] ) ;
use AlexWestergaard PhpGa4 Helper ConvertHelper ;
use AlexWestergaard PhpGa4 Exception ;
use AlexWestergaard PhpGa4 Analytics ;
use AlexWestergaard PhpGa4 Event ;
// require vendor/autoload.php
try {
$ events = ConvertHelper:: parseEvents ( $ _POST );
Analytics:: new ( $ measurementId , $ apiSecret )
-> addEvent (... $ events )
-> post ();
} catch ( Exception Ga4Exception $ exception ) {
// Handle exception
// Exceptions might be stacked, check: $exception->getPrevious();
}
独自のカスタム イベントを作成できます。必要なのは、 AlexWestergaardPhpGa4FacadeTypeEventType
ファサード/インターフェイスを実装して埋めることだけです。使いやすさの機能が必要な場合は、 AlexWestergaardPhpGa4HelperEventHelper
からイベントを拡張し、必要に応じて上書きできます。
// EventHelper implements AlexWestergaardPhpGa4FacadeTypeEventType
class ExampleEvent extends AlexWestergaard PhpGa4 Helper EventHelper
{
// variables should be nullable as unset() will set variable as null
protected null | mixed $ my_variable ;
protected null | mixed $ my_required_variable ;
// Arrays should always be instanciated empty
protected array $ my_array = [];
public function getName (): string
{
return ' example_event ' ;
}
public function getParams (): array
{
return [
' my_variable ' ,
' my_array ' ,
];
}
public function getRequiredParams (): array
{
return [
' my_required_variable ' ,
];
}
public function setMyVariable ( string $ value )
{
$ this -> my_variable = $ value ;
return $ this ; // Allows chained events
}
public function setMyRequiredVariable ( string $ value )
{
$ this -> my_required_variable = $ value ;
return $ this ; // Allows chained events
}
}
GA4 の測定プロトコルには、Analytics コンストラクターのdebug
パラメーターを使用して有効にできるデバッグ機能があります。
$ analytics = Analytics:: new (
measurement_id: ' G-XXXXXXXX ' ,
api_secret: ' xYzzX_xYzzXzxyZxX ' ,
debug: true // default: false
);
Debug
が有効になっている場合、イベントはhttps://www.google-analytics.com/debug/mp/collect
に送信され、そこで問題が GA4Exception で捕捉されます ( $exception->getPrevious()
スタックに注意してください)。このような応答は次のようになります。
{
"validationMessages" : [
{
"fieldPath" : " events " ,
"description" : " Event at index: [0] has invalid name [_badEventName]. Names must start with an alphabetic character. " ,
"validationCode" : " NAME_INVALID "
}
]
}
注意: このライブラリは、アナリティクス ( $analytics->addEvent(...)
) に追加されたときにイベントが適切にフォーマットされていることをすでに検証しています。
2 つの重要な点:
debugView
に表示する方法はありません。 page_view
イベントは機能しますが、公式ドキュメントには記載されていないため、依存しないでください。