Facebook FB.ui发送对话框间歇性地返回无效链接错误

时间:2013-07-31 22:36:10

标签: facebook facebook-graph-api facebook-javascript-sdk

这已经工作了一个多星期了。

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

上周我最初有一个错误,如果网址在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调用以刷新它,然后启动发送对话框。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题,自上周以来一直停止工作。

以下是我的解决方案:

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

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

  

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

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

注意: Facebook October breaking change会自动使用这些og元素而不是自定义FB.ui参数,因此您现在可以激活更改以准备好并从代码中删除名称/图片/说明。

<强>更新 即使我上面提到的内容正确实现,这个问题也会再次发生。

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

你不会在与JavaScript SDK相关的Facebook文档中找到这个(或者你很幸运),所以为了节省你找到这个令人难以置信的问题的所有日子(请记住Facebook只说你的链接无效)你可以有关this page的更多详情。

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

答案 1 :(得分:5)

我可以确认,在我尝试通过FB UI对话框发送相同的URL之前,我强迫Facebook首先抓取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]'
    });
});

答案 2 :(得分:0)

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

这样做的方法是在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
    }
?>