composer require alexwestergaard/php-ga4
Uni Eropa telah memberitahukan bahwa Google Analytics tidak mematuhi GDPR secara default. Ini karena Klien frontend mengirimkan detail pengunjung seperti Alamat IP dan informasi perangkat mereka dengan acara. Hal ini dapat dihindari dengan server perantara di Kawasan Eropa.
Penyiapan memerlukan ID Pengukuran dan Rahasia API . Buka Administrator (Kiri Bawah) -> Akun -> Aliran Data -> {Aliran Anda}. Di sini Anda akan menemukan ID Pengukuran di bagian atas dan "Rahasia Api untuk Protokol Pengukuran" di bagian bawah halaman, tempat Anda dapat membuat API secret
sendiri.
Buka Administrator
(kiri bawah) lalu pilih Account
Anda -> Data Streams
-> aliran Anda.
Di sini Anda akan menemukan Measurement-ID
di atas dan di bawah Api Secrets for Measurement Protocol
, di sana Anda dapat membuat sendiri API Secret
.
Setelah Anda mendapatkan kredensial, Anda dapat menginisialisasi Analytics seperti ini:
use AlexWestergaard PhpGa4 Analytics ;
$ analytics = Analytics:: new (
measurement_id: ' G-XXXXXXXX ' ,
api_secret: ' xYzzX_xYzzXzxyZxX ' ,
debug: true | false #Default: False
);
Pemberian Tag Sisi Server tidak seharusnya menggantikan Klien frontend dan inisiasi sesi harus dilakukan melalui Klien gtag.js
Aliran default seharusnya terjadi sebagai berikut:
_ga
dan _gid
kembali ke Klien/GTAG.js_ga
(atau _gid
) untuk mengirim/mengisi acara Catatan: Sangat mungkin untuk mendorong peristiwa ke backend tanpa memperoleh cookie sesi dari Google Analytics; Namun, Anda akan kehilangan informasi yang disertakan dalam permintaan GTAG.js
jika Anda tidak tahu cara mengirimkannya melalui backend juga. Anda dapat mengganti sesi _ga
dan _gid
dengan id unik Anda sendiri.
Semua permintaan harus mengikuti struktur ini dan berisi setidaknya 1 peristiwa agar Google Analytics dapat menerimanya.
Analytics [
Events [
Event {
Parameters
? Items [
Item Parameters
]
}
]
User Properties [
Properties {
Key: Value
}
]
? Consent {
Key: Value
}
? User Data {
Key: Value
}
]
Ini adalah daftar acara bawaan seperti yang ditunjukkan dalam dokumentasi. Semua peristiwa memiliki parameter berikut untuk menemukan lokasi pemicu setiap peristiwa.
// 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 );
Pustaka ini dibuat untuk pelacakan sisi server backend, tetapi Anda mungkin akan memicu sebagian besar peristiwa melalui frontend dengan Javascript atau Websockets. Akan ada 2 contoh, satu sebagai backend murni untuk peristiwa yang dicatat/antrian dan satu lagi untuk komunikasi frontend ke backend.
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();
}
Anda dapat membuat acara khusus Anda sendiri. Yang Anda perlukan hanyalah mengimplementasikan dan memenuhi fasad/antarmuka AlexWestergaardPhpGa4FacadeTypeEventType
. Jika Anda menginginkan fitur kemudahan hidup, maka Anda dapat memperluas acara Anda dari AlexWestergaardPhpGa4HelperEventHelper
dan menimpa sesuai keinginan Anda.
// 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
}
}
Protokol pengukuran untuk GA4 memiliki fungsi debug yang dapat diaktifkan dengan parameter debug
di konstruktor Analytics.
$ analytics = Analytics:: new (
measurement_id: ' G-XXXXXXXX ' ,
api_secret: ' xYzzX_xYzzXzxyZxX ' ,
debug: true // default: false
);
Ketika Debug
diaktifkan maka peristiwa dikirim ke https://www.google-analytics.com/debug/mp/collect
di mana masalah akan ditangkap dengan GA4Exception (Waspadalah terhadap tumpukan $exception->getPrevious()
); tanggapan tersebut akan terlihat sebagai berikut:
{
"validationMessages" : [
{
"fieldPath" : " events " ,
"description" : " Event at index: [0] has invalid name [_badEventName]. Names must start with an alphabetic character. " ,
"validationCode" : " NAME_INVALID "
}
]
}
Pemberitahuan: Pustaka ini telah memvalidasi bahwa peristiwa diformat dengan benar saat ditambahkan ke analitik ( $analytics->addEvent(...)
).
Dua poin penting:
debugView
di Admin Google Analytics. page_view
berfungsi, namun tidak didokumentasikan dalam dokumentasi resmi, jadi jangan mengandalkannya.