-3

我正在尝试使用 Facebook 的 JavaScript SDK 让用户将链接发送给另一个用户,即使用FB.ui(data, callback). console.log( data )给出这个输出:

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

method
    "send"

to
    "10000xxxxx(omitted)"

问题是,这能够正确显示 facebook 发送对话框(即对话框打开,朋友的名字是预先填写的,选择的链接显示正确的 url、缩略图等)。但是当我点击发送时,回调函数永远不会被调用,朋友也永远不会收到 PM。

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

关于有什么问题的任何想法?

编辑:

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

有人可以确认他们能够从他们的应用链接到的同一个域名发送链接,或者他们是否也遇到了这个问题?

4

5 回答 5

1

试试这两个选项

一个。手动调用发送 url

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);

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

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

于 2012-07-09T17:34:27.243 回答
1

有点远,但您是否尝试过将链接放入Facebook 调试工具,以查看它在抓取文件的元数据时会看到什么?它可能会显示错误。

此外,我在使用指向我自己的内部服务器的链接时遇到了麻烦,我在其中使用了动态 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);
于 2012-07-09T13:34:23.923 回答
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

于 2012-07-13T09:25:52.840 回答
0

有一些域被阻止。我知道所有 .TK 域(只是尝试发送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 重定向,但这不适用于所有用户。

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

于 2012-07-15T23:15:42.857 回答
0

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

原因是 FB 使用的是过时的网页副本(其中有错误)。

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

您可以通过https://developers.facebook.com/tools/debug上的 FB 调试器再次传递您的 URL 来实现此目的

于 2012-08-15T19:05:25.287 回答