在我目前的基于.NET和FBML的脸书应用程序中,我有一些看起来像这样的代码:
<fb:request-form
action="http://mysite.com/InvitesSent.aspx"
method="POST"
invite="true"
type="SomeType"
content="Here is an invite to <fb:req-choice url='http://mysite.com?<%=Params %>' label='My site' />">
<fb:multi-friend-selector
max="20"
actiontext="Invite your friends!"
showborder="false"
rows="4"
bypass="cancel"
email_invite="false"
exclude_ids="" />
</fb:request-form>
这会在我的网站上弹出多朋友选择器,用户从中选择一些朋友并按“发送邀请”,此时用户将被重定向到http://mysite.com/InvitesSent.aspx。
在另一端,邀请的收件人会看到带有“接受”按钮的通知。按下按钮后,facebook会立即使用
重定向到我的网站http://www.facebook.com/l.php?u=http%3A%2F%2Fmysite.com%3F ...
这是facebook的外部链接重定向事物。此重定向包括我在fb:req-choice url属性中提供的参数。
我的问题是:由于FBML将停止使用,我如何在Javascript SDK中实现此行为?
我可以使用FB.ui和apprequest发送通知,但我似乎无法像在FBML中那样在URL上添加参数。我需要这个,因为我希望奖励邀请者,为此我需要能够跟踪个别请求。
新SDK中是否还有其他功能?文档令人困惑,有时会在请求和邀请之间做出区分,有时则不然。说实话,我不确定是否存在差异,我只是坚持FBML中的线索,例如'invite =“true”',这可能有助于我找到一个解决方案。
答案 0 :(得分:3)
这是不可能的,这从developer documentation
的以下段落中可以看出用户响应
如果用户在请求中单击“接受”,则会将其发送到发送请求的应用程序的画布URL。此URL将包含一个附加参数request_ids,该参数是用户尝试对其执行操作的请求ID的逗号分隔列表:
http://apps.facebook.com/ [APP_NAME] /?request_ids = [request_ids] 作为用户登陆应用程序的最佳做法,您应该阅读未完成的应用程序请求。如果用户点击了仪表板上的通知或请求,您将通过URL传递请求ID。然后,当用户处理请求时,您应该通过Graph API删除它们。
当用户点击Facebook的API中的接受时,不会删除请求2.0请求。您必须使用Graph API阅读并清除它们。
所以你可以尝试的是:
当用户向她的朋友发送邀请/请求时,请阅读javascript回调中的request_ids,并使用ajax将其存储到您的数据库中(这样您就可以调用InvitesSent.aspx
)。
当新用户来读取request_id并奖励发送请求的用户时。
如果您可以告诉我当用户从外部网站发送请求并且另一个用户接受时会发生什么,使用新的JS SDK,我可以更具体地使用该解决方案。基本上,如果你密切关注浏览器网址,你就会知道facebook如何重定向接受的新用户。在文档中,接受仅针对画布应用提及,因此我不确定外部网站会发生什么。如果你测试它我们可以弄明白。
编辑:
正如Igy建议的那样,我猜接受请求将始终重定向到画布。