我正在尝试使用Facebook的JavaScript SDK让用户向另一个用户发送链接,即使用FB.ui(data, callback)
。 console.log( data )
给出了这个输出:
link
"http://example.com/something/y3k62pg3t4"
method
"send"
to
"10000xxxxx(omitted)"
问题是,这能够正确显示Facebook发送对话框(即对话框打开,朋友的名字已预先填写,链接被选中,显示正确的网址,缩略图等)。但是,当我单击send时,永远不会调用回调函数,并且朋友也永远不会收到PM。
但是如果我将网址更改为google.com,那么两件事情都会正常工作,即调用回调并且PM也会被发送。
关于什么是错的任何想法?
修改:
这是我发现的。如果我有一个链接到域名的Facebook应用程序,例如example.com,那么从该应用程序我可以发送链接到任何网站,除了example.com。因此,Facebook似乎采取了反垃圾邮件措施。
有人可以确认他们能够发送与他们的应用相关联的同一域名的链接,或者他们是否也会遇到此问题?
答案 0 :(得分: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);
答案 1 :(得分:1)
尝试这两个选项
一个。手动调用发送网址
https://www.facebook.com/dialog/send?app_id=YOUR_APP_ID&name=TITLE_OF_POST&link=LINK_FOR_DOMAIN&redirect_uri=LINK_FOR_DOMAIN
将to
字段告诉自己以切断您的朋友。
如果成功,您应该点击重定向uri并在收件箱中看到该消息,否则您应该看到错误。
湾赶上回复
var data = {
method: 'send',
to: 'YOUR_ID',
name: 'My Title',
link: 'YOUR_DOMAIN',
};
function requestCallback (response) {
console.log(response);
}
FB.ui(data, requestCallback);
如果成功,您应该获得一个空数组并在收件箱中看到该消息。如果没有,您应该得到对象中返回的错误消息。
在这两个选项之间,您应该能够确定应用程序中未正确设置的内容。
答案 2 :(得分:0)
看起来可能存在Facebook BUG。使用我的应用程序我得到了
POST https://www.facebook.com/dialog/send 500 (Internal Server Error)
以下是您可以在此问题上订阅的错误:https://developers.facebook.com/bugs/426059697438651 https://developers.facebook.com/bugs/379191648801449
答案 3 :(得分:0)
有些域被阻止。我知道所有.TK-domains(只是尝试向朋友发送http://dot.tk
)例如(我自己已经有问题)被标记为垃圾邮件,每当您尝试在邮件中发送邮件时,邮件都是 - 在您的情况下,使用发送对话框 - 拒绝。
Facebook也遵循Location-header-redirects,这就是问题,你不能只使用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重定向,但这对所有用户都不起作用。
编辑:我使用了您的代码,它适用于白名单页面。
答案 4 :(得分:0)
尝试在fb.ui发送操作中引用FB App URL时出现类似问题。
原因是FB使用了过时的网页副本(其中有错误)。
因此,如果您正在进行测试(并不断更改目标网址的内容),请确保FB使用您网页的最新副本。
您可以通过https://developers.facebook.com/tools/debug上的FB调试器再次传递您的URL来实现此目的