2011-10-27 112 views
2

在我目前的.NET和基于FBML,Facebook的应用程序,我有一些代码,看起来像这样:如何发送链接到外部网站的Facebook请求?

<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”',这可能会帮助我找到一个解决方案。

回答

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读取并清除它们。

那么,你可以尝试是这样的:

  1. 当用户发送邀请/请求她的朋友

    ,阅读在JavaScript回调request_ids,并将它们存储到您的分贝阿贾克斯(所以你可以拨打InvitesSent.aspx)。

  2. 当新用户来读取request_id并奖励发送请求的用户。

如果你能告诉我,当用户从外部网站发送请求,另一个用户接受,随着新的JS SDK会发生什么,我可以更具体与解决方案。基本上,如果你关注浏览器的网址,你就会知道Facebook如何重定向接受的新用户。在文档接受仅提及画布应用程序,所以我不知道外部网站会发生什么情况。如果你测试它,我们可以弄明白。
编辑:
正如Igy建议,我认为接受请求将始终重定向到画布。

+1

只处理您的画布网址上的请求,然后将用户发送回Facebook的主应用程序;我强烈建议不要默默/自动执行,因为它会导致糟糕的用户体验。接受请求的期望是它会带你到facebook.com上的某个地方,因此在大多数情况下自动转发到别处是意想不到的。如果您根本不想拥有画布应用程序,请求可能不是使用 – Igy

+1

@Igy的好渠道,因此如果没有画布应用程序并且只有一个网站,是否可以跟踪Feed帖子,就像用户访问Feed帖子中的链接时一样,post_id是否附加到url? –

+0

为了记录,我没有画布应用程序。 – izb