composer require alexwestergaard/php-ga4
สหภาพยุโรปได้แจ้งว่า Google Analytics ไม่ปฏิบัติตาม GDPR เป็นค่าเริ่มต้น เนื่องจากไคลเอ็นต์ส่วนหน้าส่งรายละเอียดผู้เยี่ยมชม เช่น ที่อยู่ IP และข้อมูลอุปกรณ์พร้อมกิจกรรม สิ่งนี้สามารถหลีกเลี่ยงได้ด้วยเซิร์ฟเวอร์คนกลางภายในภูมิภาคยุโรป
การตั้งค่าต้องใช้ รหัสการวัด และ ความลับ API ไปที่ผู้ดูแลระบบ (ซ้ายล่าง) -> บัญชี -> สตรีมข้อมูล -> {สตรีมของคุณ} ที่นี่ คุณควรหารหัสการวัดที่ด้านบนและ "ความลับ 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
กลับไปยัง Client/GTAG.js_ga
(หรือ _gid
) เพื่อส่ง/เติมข้อมูลเหตุการณ์ หมายเหตุ: เป็นไปได้ทั้งหมดที่จะพุชเหตุการณ์ไปที่แบ็กเอนด์โดยไม่ต้องรับคุกกี้เซสชันจาก Google Analytics อย่างไรก็ตาม คุณจะสูญเสียข้อมูลที่รวมอยู่ในคำขอ GTAG.js
หากคุณไม่ทราบวิธีส่งสิ่งนั้นผ่านแบ็กเอนด์ด้วย คุณสามารถแทนที่เซสชัน _ga
และ _gid
ด้วยรหัสที่สร้างขึ้นโดยเฉพาะของคุณเองได้
คำขอทั้งหมดควรเป็นไปตามโครงสร้างนี้และมีอย่างน้อย 1 เหตุการณ์เพื่อให้ Google Analytics ยอมรับ
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 หรือ Websockets จะมี 2 ตัวอย่าง ตัวอย่างหนึ่งเป็นแบ็กเอนด์ล้วนๆ สำหรับเหตุการณ์ที่บันทึกไว้/เข้าคิว และอีกตัวอย่างหนึ่งสำหรับการสื่อสารส่วนหน้าถึงแบ็กเอนด์
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 มีฟังก์ชันการแก้ไขข้อบกพร่องที่สามารถเปิดใช้ได้ด้วยพารามิเตอร์ debug
ในตัวสร้าง Analytics
$ 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()
stacks) การตอบสนองดังกล่าวจะมีลักษณะดังนี้:
{
"validationMessages" : [
{
"fieldPath" : " events " ,
"description" : " Event at index: [0] has invalid name [_badEventName]. Names must start with an alphabetic character. " ,
"validationCode" : " NAME_INVALID "
}
]
}
หมายเหตุ: ไลบรารีนี้จะตรวจสอบแล้วว่าเหตุการณ์ได้รับการจัดรูปแบบอย่างถูกต้องเมื่อเพิ่มลงในการวิเคราะห์ ( $analytics->addEvent(...)
)
สองประเด็นสำคัญ:
debugView
ในผู้ดูแลระบบ Google Analytics page_view
ใช้งานได้ แต่ไม่ได้บันทึกไว้ในเอกสารอย่างเป็นทางการ ดังนั้นอย่าเชื่อถือเหตุการณ์นี้