Facebook发送对话框不适用于除Google以外的任何网址

时间:2012-07-06 19:36:19

标签: facebook facebook-javascript-sdk facebook-ui

我正在尝试使用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似乎采取了反垃圾邮件措施。

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

5 个答案:

答案 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来实现此目的