0

大家好,我已经搜索了这些问题,但无法找到答案。我走到了死胡同,我的公司分析团队开始担心他们收集的跟踪数据。

我们目前使用 sitecatalysts 活动代码来跟踪和收集网站上的数据。有一个非常小的占用空间查询参数随机放置在整个站点的链接上。

例如:?cmp=23-42

该查询已正确附加到共享按钮,据我所知,该查询已在表单提交中传递。通过检查页面上的 iframe,我在隐藏的表单字段中看到以下值。

<input type="hidden" autocomplete="off" name="href" value="http://my-site.com/some-post-or-article-name?cmp=23-42">

发帖后发送的标头。使用 chrome 开发工具。

fb_dtsg:AQCabg9S
href:http://my-site.com/some-post-or-article-name?cmp=23-42
ref:
nobootload:
action:like
comment_text:test posts
comment:test posts
__user:181...
__a:1
__dyn:7w
__req:7
phstamp:165816797981035783273

在我发布喜欢和任何我想要的评论后,我打开 Facebook 并点击我刚刚发布的链接。我将我的独特跟踪查询替换为 facebook 查询参数。

http://my-site.com/some-post-or-article-name?fb_action_ids=4184...&fb_action_types=og.likes&fb_source=aggregation&fb_aggregation_id=2883...

我们列出的每篇文章和事件都会发生这种情况,这些文章和事件目前在 60k 范围内,这就是我的问题所在。所以我的问题是...

facebook 文档中是否有我遗漏的内容,例如向我的 fbml 标签添加一个看起来像这样的属性query="cmp=23-42&more_stuff=more-custom-stuff"?这样,当添加我的唯一查询参数时,可以自动附加到 facebook 查询参数的末尾。

有没有人遇到过这个问题,你是怎么解决的?

如果我不能使用自定义跟踪,是否有任何创造性但非 hacky 的方式将返回的 fb_action_ids 或 fb_aggregation_id 与自定义广告系列代码相关联?

有解决方法吗?

我可以分享有关我们的网络应用程序的更多信息。平台:RoR(我愿意使用解决此问题的 gem,如果有的话)

4

1 回答 1

0

ref选项允许用户将自定义数据附加到位于fb_ref参数中的返回查询字符串。

在这里找到 https://developers.facebook.com/docs/reference/plugins/like/

不幸的是,对于视觉催化剂标签来说,这不是很有帮助,因为处理数据报告的脚本会通过 onload 方法自动在 url 中查找活动代码。fb_ref这是我为从参数中提取值而编写的一些有用的 js 。根据需要随意填写。

facebookCustomQueryString: function(){
 if( window.location.href.indexOf( 'fb_ref=' ) == -1 ) return;
 var location = window.location.href,
     params = location.split('?').pop().split('&'),
     refCode, iframe, container;

 for(var i=0, m=params.length; i<m; i++){
  if( params[i].indexOf('fb_ref') > -1 ){
    var ref = params[i];
    refCode = ref.replace('fb_ref=','');
    break;
  }
 }
}

解释::

  1. fb_ref=如果不在 url 中,则第一个条件从函数中返回

  2. 接下来设置一些局部变量(我不想继续写 window.location 所以我也抓住了)

  3. 遍历 params 数组,找到我的匹配项并删除 [key]。将值存储到 refCode 变量中。

这就是你恢复价值观所需要的一切。我确信有更优雅的解决方案,但这个脚本在 jQuery 加载之前运行。

如果您处于我的位置并且仍需要触发对站点催化剂代码或您使用的任何内容的跟踪,请将以下内容添加到上述方法中。这将在页面上创建一个 iframe 并将其源设置为基本 url 加上您最初需要返回的任何自定义查询。

iframe = document.createElement('iframe');
iframe.setAttribute('class',''); // I added absolute positioning -9999px left/top .01em height/width
iframe.setAttribute('id',''+Math.random()); // any random id name here optional for some browsers
iframe.setAttribute('src',location.split('?').shift()+'?'+refCode);
iframe.setAttribute('onload', 'foo.remove(this)' ); // added the onload function to remove the iframe, reporting should be done by this time. Make sure your method foo.remove() is accessible in the DOM 

container = document.createElement('div'); // create a container to hold the iframe, optional, depends on your site markup
container.setAttribute('id',''+Math.random()); // another random id
document.getElementsByTagName('body')[0].appendChild(container); // add the container to the body
container.appendChild(iframe); // add the iframe to the container

最后,我的删除方法.. 再次填写免费以根据需要进行修改。

remove: function(ui){
 ui.parentNode.innerHTML = '';
 ui.remove(ui.selectedIndex);
}

对于 IE 浏览器,您可能需要稍微修改 remove 方法。我还没有测试过这些,但你可以试试

remove: function(ui){
 ui.parentElement.removeChild(ui);
  // or
 var parent = ui.parentElement;
 parent.removeNode(true);
}

我希望这对我这种情况的任何人都有帮助......

于 2013-05-20T09:01:08.167 回答