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

时间:2016-04-18 20:42:21

标签: javascript facebook analytics

我必须实现两个(新的)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不应接收任何潜在客户追踪数据,Pixel 2也不应接收任何ViewContent追踪数据。我如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

我在同样的问题上苦苦挣扎,似乎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>

答案 1 :(得分:0)

将两个跟踪事件与所有初始像素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>