Facebook像素:通过像素ID分离标准事件

3

我需要实现两个(新的)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>

Pixel 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跟踪数据。我要怎么做才能实现这个需求呢?


我几乎有同样的问题。如果我在两个像素中添加自定义事件,例如Lead或ViewContent,Facebook Pixel助手会出现错误提示,称一个事件被多次调用。 - Snowball
我看不出这是可能的,因为fbq对象在window对象上共享全局命名空间。据我所知,Facebook像素旨在与单个实例配合使用。我在这里发布了一个类似的问题:http://stackoverflow.com/questions/39902063/is-it-possible-to-push-tracking-events-to-two-separate-facebook-pixels - Jason FB
2个回答

0

我曾经也遇到过这个问题,似乎Facebook并不公开支持或记录这种功能。尽管在许多情况下它可能是必要的。

正如Jason FB的帖子所示,您可以重写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>

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接