2016-04-18 27 views
3

我必须实现两个(新)Facebook像素:一个站点范围内,一个仅在特定页面上。请求者要求每个像素只跟踪其自己的相关标准事件。Facebook像素:按像素分隔标准事件ID

像素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> 

像素1不应该接收任何铅跟踪数据和像素2不应该接收任何ViewContent跟踪数据。我如何实现这一目标?

+0

我几乎同样的问题。如果我向两个像素添加Lead或ViewContent之类的自定义事件,我会在Facebook Pixel助手中发生错误,该错误会被多次调用。 – Snowball

+0

我看不出这是可能的,因为fbq对象在窗口对象上共享全局名称空间。据我所知,Facebook像素被设计为与单个实例一起工作。我在这里发布了一个类似的问题:http://stackoverflow.com/questions/39902063/is-it-possible-to-push-tracking-events-to-two-separate-facebook-pixels –

回答

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> 
0

只要把两个跟踪事件与所有的init像素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>