composer require alexwestergaard/php-ga4
أبلغ الاتحاد الأوروبي أن Google Analytics لا يتوافق مع اللائحة العامة لحماية البيانات بشكل افتراضي. وذلك لأن عميل الواجهة الأمامية يرسل تفاصيل الزائر مثل عنوان IP الخاص به ومعلومات الجهاز مع الأحداث. يمكن تجنب ذلك من خلال خادم وسيط داخل المنطقة الأوروبية.
يتطلب الإعداد معرف قياس وسر واجهة برمجة التطبيقات . انتقل إلى المسؤول (أسفل اليسار) -> الحساب -> تدفقات البيانات -> {الدفق الخاص بك}. هنا يجب أن تجد معرف القياس في الأعلى و"أسرار واجهة برمجة التطبيقات لبروتوكول القياس" في أسفل الصفحة قليلاً، حيث يمكنك إنشاء API secret
لنفسك.
انتقل إلى Administrator
(أسفل اليسار) ثم حدد Account
-> Data Streams
-> الدفق الخاص بك.
ستجد هنا Measurement-ID
في الأعلى من Api Secrets for Measurement Protocol
وفي الأسفل، حيث يمكنك إنشاء API Secret
لنفسك.
بمجرد حصولك على بيانات الاعتماد، يمكنك تهيئة التحليلات على النحو التالي:
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
بمعرفك الفريد الذي تم إنشاؤه.
يجب أن تتبع جميع الطلبات هذه البنية وأن تحتوي على حدث واحد على الأقل حتى يقبله 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. سيكون هناك مثالان، أحدهما كواجهة خلفية خالصة للأحداث المسجلة/الموجودة في قائمة الانتظار والآخر للاتصال من الواجهة الأمامية إلى الواجهة الخلفية.
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
}
}
يشتمل بروتوكول القياس في "إحصاءات Google" 4 على وظيفة تصحيح الأخطاء التي يمكن تفعيلها باستخدام معلمة debug
في أداة إنشاء "إحصاءات Google".
$ 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(...)
).
نقطتان مهمتان:
debugView
في مسؤول Google Analytics. page_view
، ولكنه غير موثق في الوثائق الرسمية، لذا لا تعتمد عليه.