【问题标题】:Facebook Custom Audience pixel on SinglePageApplication SPASinglePageApplication SPA 上的 Facebook 自定义受众像素
【发布时间】:2014-10-07 12:37:40
【问题描述】:

我有一个使用 AngularJs 构建的 SinglePageApplication。我也想全局添加 Facebook 自定义受众跟踪像素,并在每次用户更改页面(url)时手动更新它。

有可能吗?如果有,怎么做?

参考:https://developers.facebook.com/docs/reference/ads-api/custom-audience-website-faq/

【问题讨论】:

    标签: facebook angularjs single-page-application


    【解决方案1】:

    我设法通过加载 _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 正确地跟踪了我的受众。

    【讨论】:

    • 你什么时候调用'PixelInitialized'?状态变化?
    • 另外,这会触发PixelInitialized 多次。在每次状态变化时。
    • 我在每次 url 更改时调用它。你可以在 $routeChangeSuccess
    • 我这样做了,但是像素助手 chrome 扩展程序说我多次调用事件“pixelinitialized”,即使 url 发生变化。
    • 是的,因为 url 改变了,但是页面没有重新加载。只需忽略该警告:)
    【解决方案2】:

    这就是我正在做的事情,到目前为止似乎还在工作:

    在我的 index.html 文件中,我删除了 PageView 函数并注释掉了像素本身,如下所示。

    <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"); 代码移动到控制器中。不过,对于我的用例,跟踪状态变化非常适合从我的应用程序中监控流程。

    希望这对其他人有所帮助。

    【讨论】:

    • 如果我需要根据 index.html 中的端点动态设置像素 ID 怎么办?因为两个绑定似乎在那里不起作用,对吗?
    【解决方案3】:
    !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');
    

    在单页应用程序 (SPA) 中,您必须禁用自动侦听推送状态、弹出状态和 windows 历史作为 Facebook 像素库默认挂钩到 windows.history 和推送/弹出状态。

    根据@lari回答about another related question to your questionJosh's Post blog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2021-08-24
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多