ÕâÌ׳ÌÐòʵÏÖÁË¶àÆ½Ì¨¹ã¸æ×·×Ùϵͳ£¬Ö§³Ö Facebook Pixel¡¢Google Analytics¡¢Kwai Pixel ºÍ Firebase Analytics¡£±¾ÎĵµÖصã·ÖÎö Facebook (FB) ¹ã¸æÉϱ¨µÄʵÏÖ¡£
src/tracking/FacebookPixel.js - Facebook Pixel ºËÐÄʵÏÖsrc/tracking/TrackAll.js - ͳһµÄʼþ×·×Ù¹ÜÀíÆ÷src/tracking/ApkPromote.js - APK ÍÆ¹ãÇþµÀ´¦Àí£¨°üº¬ FB ³õʼ»¯£©src/features/mainSlice.js - Ö÷״̬¹ÜÀí£¬°üº¬³õʼ»¯Âß¼src/features/actions/hallClient.js - Ö§¸¶Íê³ÉµÈʼþÉϱ¨src/tracking/FacebookPixel.js)fb_setPixelID(pixelID, ex_id) º¯Êý¹¦ÄÜ: ³õʼ»¯ Facebook Pixel
²ÎÊý»ñÈ¡ÓÅÏȼ¶:
pixel »ò rb_pixel_idpixelIDpixelID ²ÎÊý³õʼ»¯²½Öè:
// 1. ¶¯Ì¬¼ÓÔØ Facebook Pixel SDK
initFbq(
window,
document,
"script",
"https://connect.facebook.net/en_US/fbevents.js"
)
// 2. ³õʼ»¯ Pixel ID
if (!!ex_id) {
window.fbq("init", pixelID, {'external_id': ex_id});
} else {
window.fbq("init", pixelID);
}
// 3. ×Ô¶¯Éϱ¨Ò³Ãæä¯ÀÀ
window.fbq("track", "PageView");
¹Ø¼üÌØÐÔ:
external_id ²ÎÊý£¨Óû§ÍⲿID£¬ÓÃÓÚÓû§Æ¥Å䣩fb_trackEvent(eventName, params)¹¦ÄÜ: Éϱ¨×Ô¶¨Òåʼþ»ò±ê׼ʼþ
ʼþÀàÐÍÅжÏ:
fbq('track', eventName, params)
PageView, ViewContent, Search, AddToCart, AddToWishlist, InitiateCheckout, AddPaymentInfo, Purchase, Lead, CompleteRegistrationfbq('trackCustom', eventName, params)
ʾÀý:
// ±ê׼ʼþ
fb_trackEvent('Purchase', { value: 100, currency: 'USD' });
// ×Ô¶¨Òåʼþ
fb_trackEvent('firstpayD0', { external_id: 'user123' });
src/tracking/TrackAll.js)initTrackAll(pf_type, pf_id, ex_id)¹¦ÄÜ: ¸ù¾Ýƽ̨ÀàÐͳõʼ»¯¶ÔÓ¦µÄ×·×Ùϵͳ
ƽ̨ÀàÐÍ:
pf_type === "fb" ¡ú ³õʼ»¯ Facebook Pixelpf_type === "kw" ¡ú ³õʼ»¯ Kwai Pixelpf_type === "gg" ¡ú ³õʼ»¯ Google Analyticspf_type === "apk" ¡ú ´¦Àí APK ÍÆ¹ãpf_type === "fire" ¡ú ³õʼ»¯ Firebase Analyticsµ÷ÓÃλÖÃ:
src/features/mainSlice.js:280 - ´Ó·þÎñÆ÷ÅäÖÃÖлñȡƽ̨ÐÅÏ¢ºó³õʼ»¯src/tracking/ApkPromote.js:51 - APK ÇþµÀ³õʼ»¯trackEvent(eventName, params)¹¦ÄÜ: ͳһµÄʼþÉϱ¨½Ó¿Ú£¬¸ù¾Ýµ±Ç°Æ½Ì¨ÀàÐÍ×Ô¶¯Â·Óɵ½¶ÔÓ¦µÄ×·×Ùϵͳ
Facebook Æ½Ì¨ÌØÊâ´¦Àí:
eventName === "pay")if (pf_type === 'fb') {
let data = params;
// Ê×´ÎÖ§¸¶ (first === true)
if (data.first) {
// D0 Ê׳䣨µ±ÌìÊ״γäÖµ£©
if (!!data.isd0) {
fb_trackEvent("firstpayD0", { external_id: data.udid });
fb_trackEvent('AddToWishlist', {
value: data.golds,
currency: global.currency,
external_id: data.udid
});
}
// D1 Ê׳䣨Ê״γäÖµ£©
fb_trackEvent("firstpayD1", { external_id: data.udid });
fb_trackEvent('AddToCart', {
value: data.golds,
currency: global.currency,
external_id: data.udid
});
}
// ¸´³ä£¨·ÇÊ×´ÎÇÒ·ÇD0£©
else if (!data.isd0) {
fb_trackEvent("payagain", { external_id: data.udid });
fb_trackEvent('InitiateCheckout', {
value: data.golds,
currency: global.currency,
external_id: data.udid
});
}
// ËùÓÐÖ§¸¶¶¼»áÉϱ¨ Purchase ʼþ
fb_trackEvent('Purchase', {
value: data.golds,
currency: global.currency,
external_id: data.udid
});
}
Ö§¸¶Ê¼þÉϱ¨Âß¼:
²ÎÊý˵Ã÷:
data.golds: ³äÖµ½ð¶îdata.udid: Óû§Î¨Ò»±êʶ£¨ÓÃÓÚ external_id£©data.first: ÊÇ·ñÊ×´ÎÖ§¸¶data.isd0: ÊÇ·ñµ±ÌìÊ״γäÖµglobal.currency: »õ±ÒÀàÐÍ£¨Èç 'USD', 'BRL'£©eventName === "CompleteRegistration")if (eventName === "CompleteRegistration") {
fb_trackEvent('CompleteRegistration', { external_id: params.udid });
}
Ö±½Ó͸´«¸ø fb_trackEvent
src/features/actions/hallClient.js)// ÔÚ handlePayFinish º¯ÊýÖÐ
case "pay_finish": {
let { data } = message;
if (!!data && !!data.event) {
trackEvent("pay", data.params);
}
break;
}
´¥·¢Ê±»ú: ·þÎñÆ÷ͨ¹ý WebSocket ·¢ËÍ pay_finish ÏûϢʱ
Êý¾ÝÀ´Ô´: ·þÎñÆ÷·µ»ØµÄ data.params °üº¬:
golds: ³äÖµ½ð¶îudid: Óû§IDfirst: ÊÇ·ñÊ×´ÎÖ§¸¶isd0: ÊÇ·ñµ±ÌìÊ״γäÖµorder_sn: ¶©µ¥ºÅsrc/features/mainSlice.js)// ÔÚ parseLogin º¯ÊýÖÐ
if (!!data.reg) {
// ÐÂ×¢²áµÄÓû§
trackEvent("CompleteRegistration", { external_id: data.UserID })
}
´¥·¢Ê±»ú: Óû§µÇ¼ʱ£¬Èç¹û data.reg ÎªÕæ£¬±íʾÊÇÐÂ×¢²áÓû§
src/features/actions/hallClient.js)case "call_client": {
if (!!message.data && !!message.data.type) {
let { data } = message;
switch (message.data.type) {
case "track": {
trackEvent(data.event, data.params)
break;
}
}
}
break;
}
´¥·¢Ê±»ú: ·þÎñÆ÷ͨ¹ý WebSocket Ö÷¶¯µ÷Óÿͻ§¶Ë½Ó¿Ú£¬ÀàÐÍΪ track ʱ
src/features/mainSlice.js)// ´Ó·þÎñÆ÷·µ»ØµÄÅäÖÃÖлñÈ¡
let conf = json.conf;
if (!!conf.pf && !!conf.pf.id) {
let { type, id } = conf.pf;
initTrackAll(type, id, isLogin ? userInfo.UserID : null)
}
ÅäÖýṹ:
conf.pf = {
type: "fb", // ƽ̨ÀàÐÍ
id: "123456789" // Pixel ID
}
external_id: Èç¹ûÓû§ÒѵǼ£¬Ê¹Óà userInfo.UserID ×÷Ϊ external_id
src/tracking/ApkPromote.js)loadInfoNew(us, userid) º¯Êý¹¦ÄÜ: ´¦Àí APK ÍÆ¹ãÇþµÀ£¬´Ó·þÎñÆ÷»ñÈ¡Óû§ÐÅÏ¢ºÍ Pixel ÅäÖÃ
Á÷³Ì:
user.isfb()£©Èç¹ûÊÇ Facebook ÇþµÀ£¬³õʼ»¯ Facebook Pixel
if(user.isfb()){
global.pf.type="fb"
initTrackAll('fb', user.params.pixel, userid)
}
localStorage.getItem("pixelID")localStorage.setItem("pixelID", pixelID)global.pf.typelocalStorage.getItem("user")params.pixel, params.fbclid, params.gclid µÈFacebook Pixel Ö§³ÖµÄ±ê׼ʼþ£¨ÔÚ FacebookPixel.js Öж¨Ò壩:
PageView - Ò³Ãæä¯ÀÀ£¨×Ô¶¯´¥·¢£©ViewContent - ²é¿´ÄÚÈÝSearch - ËÑË÷AddToCart - ¼ÓÈ빺Îï³µAddToWishlist - ¼ÓÈëÔ¸ÍûÇåµ¥InitiateCheckout - ·¢Æð½áÕËAddPaymentInfo - Ìí¼ÓÖ§¸¶ÐÅÏ¢Purchase - ¹ºÂòLead - DZÔÚ¿Í»§CompleteRegistration - Íê³É×¢²á³ÌÐòÖÐʹÓõÄ×Ô¶¨Òåʼþ:
firstpayD0 - µ±ÌìÊ״γäÖµfirstpayD1 - Ê״γäÖµpayagain - ¸´³äInstallPWA - °²×° PWA£¨Í¨¹ý installready ʼþ´¥·¢£©external_id: Óû§ÍⲿID£¬ÓÃÓÚÓû§Æ¥Å䣨ͨ³£ÊÇ UserID »ò udid£©value: ½ð¶îÊýÖµcurrency: »õ±ÒÀàÐÍ£¨Èç 'USD', 'BRL'£©{
golds: 100, // ³äÖµ½ð¶î
udid: "user123", // Óû§Î¨Ò»±êʶ
first: true, // ÊÇ·ñÊ×´ÎÖ§¸¶
isd0: false, // ÊÇ·ñµ±ÌìÊ״γäÖµ
order_sn: "ORD123" // ¶©µ¥ºÅ
}
window.fbq ÊÇ·ñ´æÔÚ£¬±ÜÃâδ³õʼ»¯Ê±±¨´íglobal.pf.type Åжϵ±Ç°Æ½Ì¨£¬Ö§³Ö¶àƽ̨Çл»initTrackAll ʹÓà try-catch °ü¹ü£¬±ÜÃâ³õʼ»¯Ê§°ÜÓ°ÏìÖ÷Á÷³ÌÕâÌ× Facebook ¹ã¸æÉϱ¨ÏµÍ³ÊµÏÖÁË:
Õû¸öϵͳÉè¼ÆºÏÀí£¬Ö§³Ö¶àÇþµÀÍÆ¹ãºÍ¾«Ï¸»¯Ê¼þ×·×Ù¡£