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


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

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是动态的并且每次都需要强制缓存。我现在打电话给“ajax”https://developers.facebook.com/tools/debug/og/object“刷新它然后启动发送对话框。


11348
2017-07-31 22:36


起源

安全地假设你有信心 homeurl + '/' + username + '/something=' + var1 +'&somethingelse=' + encodeURI(var2) + '&evenmore=' + encodeURI(var3) 总是创建相同(有效)的url字符串?您可能希望将其提取到变量中 console.log() 它出来之前 fb.ui() 称为理智检查 - Zach Lysobey
我在Chrome控制台中仔细检查了它,它是完整的URL。 MYDOMAIN.... - k c
我在过去的两天里一直面临着这个问题 - rdsoze
是的 - 同样在这里。到目前为止我们没有运气。 - k c
检查我对这个问题的回答 stackoverflow.com/questions/7539659/... - shady sherif


答案:


我有同样的问题,自上周以来停止了工作。

这是我的解决方案:

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

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

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

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

注意: Facebook十月突破变化 会自动使用那些 og metas而不是自定义 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分享你的链接,现在一切正常。


9
2017-08-05 09:55



有意思...但我使用对话框共享的URL是使用一些查询字符串参数自定义的。 sendDialog由具有动态值的多个锚启动。这将不再受支持吗?我不能只在页面标记中放入一个og.url,因为它不起作用。 - k c
我认为迁移发生在十月,但似乎已经打破了我们。我在这里添加了一个新问题来解决这个问题。 stackoverflow.com/questions/18088472/... - k c
我通过向页面添加og标签来修复所有警告。现在facebook调试器很高兴。使用发送对话框适用于我的帐户(我能够发送消息)但它仍然无法为我的团队中的其他成员使用相同的链接无效错误。 - k c
@kc:我已经更新了我的答案,我的所有网站都能正常运行,我的客户对此感到满意。如果问题得到解决,请接受答案。 - glautrou
嗨 - 我的问题没有解决。 Facebook调试器中的链接很好。没什么好抱怨的。我仍然使用send Dialog间歇性地使链接无效。有时甚至是同一个人。 - k c


当我试图通过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]'
    });
});

5
2017-08-13 19:39



有同样的问题,同样的解决方案似乎仍然有效。如果您计划让用户共享的网址之前不太可能被删除(特别是如果它是为用户定制的,那么就是在那里生成的)这种类型的调用会启动泵,因为它更有可能分享时,你不会得到100错误。 - Dtipson
@Dtipson,它仍然可以使用他们今天发布的新的Graph API 2.0吗? - Scott


确保在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
    }
?>

0
2017-08-05 15:13



我们没有任何网址转发。传递给发送Dialog的url是显示页面呈现时间的URL。 - k c
@hexiecode:你不应该这样编码, og 不仅仅是Facebook使用,对于像Twitter这样的人来说,最好也不要重定向。如果Facebook用户代理发生变化或者他想要实施Twitter,他将不得不维护这段代码,而且会更复杂。如果您查看新闻网站,您可以在源代码中看到 og+ fb+ twitter 元数据生成。 - glautrou