使用Facebook即时文章自定义跟踪代码op-tracker和CSP违规

问题描述:

我创建了一个类似于Google Analytics的脚本(在加载时创建脚本,将数据推送到数组,在托管脚本中使用以存储跟踪数据一个数据库)用于Facebook的即时文章,这样我就可以在我的软件内部跟踪统计数据。但问题是,Facebook的提供有关我的脚本CSP错误:使用Facebook即时文章自定义跟踪代码op-tracker和CSP违规

Refused to load the script 'https://My-Domain.com/js/w_analytics.js' 
because it violates the following Content Security Policy directive: 
"script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com 
*.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* 
'unsafe-inline' 'unsafe-eval' fbstatic-a.akamaihd.net 
fbcdn-static-b-a.akamaihd.net *.atlassolutions.com blob: data: 'self'". 

即时文章标记与代码预期块内的所有脚本正确:

<figure class="op-tracker"> 
    <iframe> [code] </iframe> 
</figure> 

我目前正在调试这种通过Facebook的调试页面:http://ww.ia-tracker.fbsbx.com/instant_article_test?url=<share_url>

奇怪的是,偶尔我得到一些统计数据,通过从即时文章,BU我的数据库只是不一致或每个页面视图。

Facebook的文档说你可以做一个直接的URL到您的跟踪,就像这样:

<figure class="op-tracker"> 
     <iframe src="http://my-url-tracker.com/"> 
      <!-- 
      The request to http://my-url-tracker.com/ will be rewritten to 
      include the following query parameters: 

      ia_share_url: The URL the user shared 
      ia_title: The article title 
      --> 
     </iframe> 
</figure> 

但问题是,它说,它仅发送这两个参数,当我自己的跟踪需要更多的信息这是我的软件(如UA字符串)是必需的,所以理想情况下我想避免这种方法。

是否有其他人有过使用自定义跟踪脚本的经验?

这个乱搞几天后,我得到了它使用op-trackeriframe src到我的自定义跟踪脚本工作,像这样:

<figure class="op-tracker"> 
     <iframe src="http://my-url.com/tracker.php"></iframe> 
</figure> 

Facebook的文档不太多走给出有关这种方法,他们忽略信息的小点点:有送出一第三个参数是引荐ia_referrer(这将返回为ia.facebook.com

然后,您可以用您的“tracker.php”的$_GET$_SERVER组合脚本来抓取任何东西你需要为你的脚本其他细节,如:

$instantArticleURL = urldecode($_GET['ia_share_url']); 
    $HTTPreferrer = $_GET['ia_referrer']; 
    $userAgent = $_SERVER['HTTP_USER_AGENT']; 
    $visitorIP = $_SERVER['REMOTE_ADDR']; 

您可能还需要包括这个header()tracker.php以确保Facebook能够访问脚本(修改以适应您的网站的需求,显然):

header("Access-Control-Allow-Origin: https://www.facebook.com");

希望这将节省别人头疼了几天:)