11

这已经运行了一个多星期。

FB.ui({
  method: 'send',
  to: connectionid,
  name: subject,
  picture: staticurl + 'images/logoformysite.png',
  link: homeurl + '/' + username + '/something=' + var1 +'&somethingelse=' + encodeURI(var2) + '&evenmore=' + encodeURI(var3),
  description: invitemessage,
});

上周我最初遇到了一个错误,如果 URL 在 Facebook 域内,Facebook 会阻止它。我解决了这个问题,现在图片和链接都不属于 Facebook 域并且来自我的网站。但这从今天开始发生,没有任何改变。它是间歇性的。

An error occurred. Please try again later.

API Error Code: 100 API Error Description: Invalid parameter Error Message: 'link' is invalid.

即使我将它发送给同一个用户,也不清楚为什么它有时会起作用而不是其他时候。想知道我是否错过了一个通知。但我希望它至少会一直失败,但事实并非如此。


更新: 我不确定如何在页面上全局设置我在对话框中设置的链接。它将向消息的收件人发送错误的链接。看看上面的例子如何在新的开放图形世界中工作,这将非常有帮助。

回答 2013 年 8 月 12 日

问题围绕着我们的 url 是动态的并且每次都需要强制缓存。我现在对“ https://developers.facebook.com/tools/debug/og/object ”进行 ajax 调用以刷新它,然后启动发送对话框。

4

3 回答 3

9

我有同样的问题,从上周开始就停止工作了。

这是我的解决方案:

转到Facebook 调试器并添加您的 URL。单击“调试”并修复 Facebook 显示的所有警告。

要修复我的问题,我必须og.url在我的页面中添加元标记。该值应与您要共享的值完全相同(无重定向)。然后 Facebook 向我发送了此通知(警告):

您的应用 XXX 现在符合 Stream post URL 安全迁移。不需要采取进一步行动。

尝试再次分享您的链接,FB.ui现在您的帖子应该会自动显示您的og值。

注意: Facebook 十月重大更改将自动使用这些og元数据而不是自定义FB.ui参数,因此您现在可以激活重大更改以做好准备并从您的代码中删除名称/图片/描述。

更新: 即使我上面提到的正确实施,这个问题也可能再次发生。

如果是您的情况,那是因为您必须强制 Facebook “抓取”您的页面。当您使用 Facebook 对象调试器或复制/粘贴链接到您的时间线/私人消息时,此过程由 Facebook 自动完成。如果您使用 JavaScript SDK,您必须要求 Facebook 索引和缓存您的页面。

你不会在与 JavaScript SDK 相关的 Facebook 文档中找到这个(或者你很幸运),所以为了节省你所有的时间,我发现这个令人难以置信的问题(记住 Facebook 只说你的链接无效)你可以找到更多细节在这个页面上

我尝试使用 Graph API 来强制我新创建的页面被 Facebook 抓取,如果它对你有用,你很幸运。第二种未提及但产生相同结果的方法是向 Facebook 对象调试器页面发送请求,并在 URL 中添加您的页面链接(例如https://developers.facebook.com/tools/debug/og/object?q=YourPageUrlHere)。通过这样做,Facebook 这次将抓取您的页面,现在您可以使用 Facebook API 共享您的链接,现在一切正常。

于 2013-08-05T09:55:10.300 回答
5

我可以确认,当我强制 Facebook 在尝试通过 FB UI 对话框发送相同的 URL 之前先抓取 URL 时,这对我来说是固定的。

示例代码:

FB.api('https://graph.facebook.com/', 'post', {
    id: '[URL]',
    scrape: true
}, function(response) {
    FB.ui({
        method: 'send',
        name: '[name]',
        picture: '[Picture URL]',
        link: [URL]',
        description: '[description]'
    });
});
于 2013-08-13T19:39:04.403 回答
0

确保当 facebook 请求您的 url 时,它永远不会被转发。

一种方法是向 facebook 展示一个自己的特殊页面,其中包含所有正确的成分。

这是一个示例(基于 php + symfony 1.4):

<?php
    if(preg_match('/facebookexternalhit/i', $request->getHttpHeader('User-Agent')))
    { ?>
        <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <meta property="fb:app_id" content="<?php echo sfConfig::get('app_facebook_app_id'); ?>" />
        <meta property="og:url" content="<?php echo sfContext::getInstance()->getRequest()->getUri(); ?>" />
        <meta property="og:title" content="<?php echo $title; ?>" />
        <meta property="og:description" content="<?php echo $description; ?>" />
        <meta property="og:image" content="<?php echo $image; ?>" />
      </head>
      <body>
        hello Facebook!
      </body>
    </html>
    <?php
    }
?>
于 2013-08-05T15:13:30.490 回答