2012-07-06 51 views
-3

我正在尝试使用Facebook的JavaScript SDK让用户发送链接给其他用户,即使用FB.ui(data, callback)console.log(data)给出了这样的输出:Facebook发送对话框不适用于除谷歌以外的任何URL

link 
    "http://example.com/something/y3k62pg3t4" 

method 
    "send" 

to 
    "10000xxxxx(omitted)" 

的问题是,这是能够显示Facebook发送正确的对话框(即打开的对话框中,朋友的名字是预填充,链接选择出正确的URL,缩略图等)。然而,当我点击发送时,回调函数永远不会被调用,并且朋友也永远不会收到PM。

但是,如果我将url更改为google.com,那么这两件事情都有效,即回调被调用,PM也会被发送。

有什么不对?

编辑:

这是我发现。如果我有一个Facebook应用链接到一个域,例如example.com,那么从该应用我可以发送链接到任何网站EXCEPT example.com。因此,Facebook似乎采取了反垃圾邮件措施。

有人可以确认他们能够从与其应用相关联的相同域名发送链接,或者他们是否也遇到此问题?

+2

你的理论,为什么它的发生并不完全意义做到这一点,有关于应用程序的设置选项,以防止它发布到URL之外的而不是阻止应用发布自己的链接:/ – Igy 2012-07-09 18:08:30

+5

您是否可以使用完整的html/js页面更新问题,以重现您的问题?我有一种感觉,你只会在没有代码的情况下得到猜测。没有其他人似乎和你有同样的问题,这并不是Facebook API的晦涩难懂,这通常意味着你在代码中做了非常规的事情。 – 2012-07-11 15:14:22

+0

如果您使用您的应用程序ID设置了应用程序并初始化了FB,请检查您是否在应用程序设置中插入了网站URL。 – borisdiakur 2012-07-10 07:58:29

回答

1

一个长镜头的位,但你有没有试过把链接通过Facebook Debug tool,看看它会看到它将看到它将看到什么时,它会刮擦文件的元数据?它可能会显示一个错误。

另外我有使用指向我自己的内部服务器,我有一个动态的DNS在使用(在我的情况下从no-ip.com)的链接有问题。所以这也许是别的什么东西来排除名单。

祝你好运。

- 编辑 -

这里的JS代码我用来创建发送请求:

var obj = { 
     method: 'send', 
     to: '<test user ID>', 
     name: 'My Title', 
     caption: 'My Caption', 
     description: 'My Message', 
     link: 'http://apps.facebook.com/<app name>/', 
     picture: 'http://<no-ip domain>/images/testpos.jpg' 
    }; 

FB.ui(obj, callback); 
+0

谢谢,我只是试了一下,我得到了一些有关'og:title','og:image'等的警告,但是我得到了与google.com相同的警告,所以我不认为就是这样。但是,您是否可以在您的应用中发送链接? – 2012-07-09 14:19:51

+0

我只是给发送UI对话框一个镜头,它的工作。我在两个测试用户之间使用它,尽管我第一次看到验证码两次(?),但是我在第一次输入验证码文本后发了帖子。这是通过使用指向我的应用程序的Facebook网址(例如apps.facebook.com/...)和我的本地网络服务器上的图像的链接。我已将代码放在原始答案中,以便更好地格式化 – Snouto 2012-07-09 14:32:36

+0

好的,如果您可以尝试将链接更改为除Facebook或Google以外的其他某个网站,那么有没有机会?因为谷歌。com为我和我自己的网站不工作。你可以尝试与个人网站和非测试用户吗? (你不必在这里分享网址) – 2012-07-09 15:04:05

1

尝试这两个选项

一个。手动调用发送URL

​​

地址to现场为自己切出你的朋友。

如果成功,您应该点击重定向URI并在收件箱中查看邮件,如果没有,您应该会看到一个错误。

b。抓住回应

var data = { 
     method: 'send', 
     to: 'YOUR_ID', 
     name: 'My Title', 
     link: 'YOUR_DOMAIN', 
    }; 

function requestCallback (response) { 
    console.log(response); 
} 

FB.ui(data, requestCallback); 

如果成功,您应该得到一个空数组,并在收件箱中看到消息。如果没有,你应该得到一个对象返回的错误信息。

在这两个选项之间,您应该能够确定应用程序中未正确设置的内容。

0

有一些被阻止的域名。我知道所有.TK域名(例如,只是尝试向朋友发送http://dot.tk)(我自己已经遇到此问题)被标记为垃圾邮件,并且每当您尝试在邮件中发送邮件时,邮件都是 - 情况下,使用发送对话框 - 被拒绝。

Facebook也遵循位置标题重定向,这就是问题所在,你不能只使用URL缩写。

为了避免被标记为垃圾邮件,您可以使用页面隐藏功能。您唯一需要重定向的是一个列入白名单的域,您可以在其中放置以下脚本。

<?php 
$UserAgent=$_SERVER['HTTP_USER_AGENT']; //The user agent header 
$URL=$_GET["URL"]; //The URL to be redirected to 
if(preg_match("#(^facebookexternalhit/|\\(\\+http://(www\\.|[a-zA-Z0-9-]{1,}\\.)?facebook\\.com($|/))#i", $UserAgent)) //Is it a facebook agent? 
{ 
    //Deliver content prepared for facebook 
    echo '<html> 
    <head> 
     <meta name="og:image" content="http://example.com/logo.png" /> 
     <meta name="og:title" content="Page title for facebook" /> 
     <meta name="og:description" content="Any description of your page." /> 
     <meta name="og:url" content="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'" /> 
    </head> 
    <body> 
    </body> 
    </html>'; 
    exit(); 
} 
else 
{ 
    //This is not a facebook agent, redirect client to $URL 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: ".$URL); 
    exit(); 
} 
?> 

另一种可能性是JavaScript重定向,但这不适用于所有用户。

编辑:我已经使用你的代码,它适用于列入白名单的页面。

0

当尝试在fb.ui发送操作中引用FB应用程序URL时,我遇到了类似的问题。

原因在于FB使用了过期的网页副本(有错误)。

因此,如果您正在测试(并不断更改目标网址的内容),请确保FB使用您网页的最新副本。

你可以通过你的网址的一次通过FB调试器在https://developers.facebook.com/tools/debug