2014-10-07 2 views
6

У меня есть SinglePageApplication, созданный с помощью AngularJs. Я хочу также добавить Facebook Custom Audience для отслеживания пикселов в глобальном масштабе и обновлять его вручную каждый раз, когда пользователь меняет страницу (url).Facebook Пользовательский зрительный пиксель на SinglePageApplication SPA

Возможно ли и если да, то как?

Ссылка: https://developers.facebook.com/docs/reference/ads-api/custom-audience-website-faq/

ответ

11

мне удалось решить эту проблему путем загрузки _fbq объекта:

<script> 
    (function() { 
     var _fbq = window._fbq || (window._fbq = []); 
     if (!_fbq.loaded) { 
      var fbds = document.createElement('script'); 
      fbds.async = true; 
      fbds.src = '//connect.facebook.net/en_US/fbds.js'; 
      var s = document.getElementsByTagName('script')[0]; 
      s.parentNode.insertBefore(fbds, s); 
      _fbq.loaded = true; 
     } 
     _fbq.push(['addPixelId', 'XXXXXXXXXXXXXXXXX']); 
    })(); 
    //Notice removed 'PixelInitialized' call. 
</script> 

, а затем вызывая событие 'PixelInitialized' каждый раз, когда изменения страницы.

$window._fbq.push(['track', 'PixelInitialized', {}]); 

С этого момента facebook правильно отслеживает мою аудиторию.

+1

Когда именно вы называете "PixelInitialized? О смене государства? –

+0

Кроме того, это будет срабатывать 'PixelInitialized 'несколько раз. При каждом изменении состояния. –

+0

Я называю это при каждом изменении URL. Вы могли бы сделать это в $ routeChangeSuccess –

5

Вот что я делаю это, кажется, работает до сих пор:

В моем файле index.html я удалил функцию и просмотров страниц закомментировал сам пиксель, как показано на рисунке ниже.

<head> 
<!-- Facebook Pixel Code --> 
<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','//connect.facebook.net/en_US/fbevents.js'); 

    fbq('init', 'XXXXXXXXXX'); 
//fbq('track', "PageView"); 
</script> 
<!--<noscript><img height="1" width="1" style="display:none"--> 
       <!--src="https://www.facebook.com/tr?id=XXXXXXXXXX&ev=PageView&noscript=1"--> 
</noscript>--> 
<!-- End Facebook Pixel Code --> 
</head> 

Затем я настроил мое приложение следующим образом ...

.config(['$stateProvider', '$urlRouterProvider', '$windowProvider', function($stateProvider, $urlRouterProvider, $windowProvider) { 
var $window = $windowProvider.$get(); 

Теперь для каждого изменения состояния, я использую OnEnter и OnExit выстрелить «событий» Я хочу, чтобы захватить:

.state('foo.bar', { 
     url:'/bar', 
     templateUrl: 'template.html', 
     controller: 'templateCtrl', 
     onEnter: function(){ 
      $window.fbq('track', "Page1Enter"); 
     }, 
     onExit: function(){ 
      $window.fbq('track', "Page1Exit"); 
     } 
    }) 

Я предполагаю, что, если бы я захотел, я мог бы просто переместить любой fbq('track', "PageView"); код в контроллер. Однако для моего варианта использования отслеживание изменений состояния отлично работает для мониторинга потока из моего приложения.

Надеюсь, это поможет кому-то еще.

1
!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'); 
    // initialize facebook pixel code 
    fbq('init', {SET-YOUR-ID}); // <-- replace {SET-YOUR-ID} with your facebook pixel convesion id 
    // disabled automatic push state for single web application 
    fbq.disablePushState = true; 
    // then call manually track PageView event 
    fbq('track', 'PageView'); 

В одного приложения Page (SPA) необходимо функция автоматического слушать на нажимной государства, поп-истории государства и окон, как Facebook библиотеки пикселей по умолчанию крюком в windows.history и толчке/поп государства.

согласно @lari ответ about another related question to your question и Josh's Post blog

Смежные вопросы