Facebook像素:按像素ID分隔标准事件

Facebook Pixels: Separate standard events by pixel ID

本文关键字:像素 标准 事件 分隔 Facebook ID      更新时间:2023-09-26

我必须实现两个(新的)Facebook像素:一个是整个站点,一个只在特定页面上。请求者要求每个像素只跟踪自己关联的标准事件。

像素1:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '111');
fbq('track', 'PageView');
fbq('track', 'ViewContent');
</script>

像素2:

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '222');
fbq('track', 'PageView');
fbq('track', 'Lead');
</script>

Pixel 1不应接收任何Lead跟踪数据,Pixel 2不应接收到任何ViewContent跟踪数据。我该如何做到这一点?

我自己也遇到了同样的问题,Facebook似乎没有公开支持或记录这种功能。尽管在许多情况下这可能是必不可少的。

正如帖子Jason FB所示,您可以重写de-fbq函数,将像素ID作为参数。然而,我想在不必重写提供的fbq:的情况下完成这一任务

这是(非正统)我如何解决这个问题的代码:

function customFacebookTrack(id, eventName, object){

    // If i get an ID i Simply delete the remanent IDs from de FBQ object.
    if(typeof id != 'undefined' && id != 'ALL'){
        var placePixels = [];
        var currentPixels = fbq.getState().pixels;
        //console.log(currentPixels);
        for(i = 0; i < currentPixels.length; i++){
            if(currentPixels[i].id != id){
                placePixels.push(currentPixels[i]);
                currentPixels.splice(i, i + 1);
            }
        }       
    }   
    //console.log(currentPixels);
    // I send my event only with the pixel(s) I want
    fbq('trackCustom', eventName, object);
    // After sending the event I set back the deleted IDs for regular use. 
    if(typeof id != 'undefined' && id != 'ALL'){
        for(i = 0; i < placePixels.length; i++){
            if(placePixels[i].id != id){
                currentPixels.push(placePixels[i]);
                placePixels.splice(i, i + 1);
            }
        }
    }
}

请注意,无论如何,这都不是建议的做法。这只是Facebook事件跟踪javascript已知限制的一个变通方法。

示例代码段:

<script>
    customFacebookTrack(XXXXXXXXXXXXXXX, 'Lead Form', {content_name:'Newsletter Subscriber'});
</script>

只需将both跟踪事件与所有初始像素ID 一起放置

<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '111');
fbq('init', '222');
fbq('track', 'PageView');
fbq('track', 'ViewContent');
fbq('track', 'Lead');
</script>