我在Java中使用了用于facebook的canvas FBML应用程序。我试图在控制器中使用facebook java api获取当前用户ID,但不通过facebook.com/login.php强制每个用户访问应用程序。
麻烦的是我不懂facebook应用程序的工作流程。为了获得用户ID,我需要提供fb sessionid。为了获得会话,似乎我必须将所有用户转发到http://www.facebook.com/login.php?api_key= ...这将提示他们获得额外的权限。问题是我不想强迫每个人给我额外的权限或登录。客人应该也能够使用功能有限的应用程序。
如何在没有会话的情况下始终将所有人重定向到权限页面的客户和那些未向我提供权限的客户?
感谢。
答案 0 :(得分:1)
我对Java API的细节一无所知,但我可以告诉你有关获取用户ID的两种方法。第一,正如您所知,要求用户对应用程序进行身份验证。如果您使用FBML并将requirelogin="1"
放在某些HTML链接或表单元素上,则不一定需要将用户重定向到任何位置,并且会出现页面内的“授权此应用程序”弹出窗口。一旦他们授权应用程序,您将获得每个请求中传递的fb_sig_user
参数。
其次,如果没有他们授权您的应用,您可能会获得另一个参数传递给您的访问者的用户ID。它以fb_sig_canvas_user
的形式出现,一旦用户以某种方式与您的应用程序进行交互,您就会得到它。这可能是通过单击FBML画布页面中的链接或单击其他用户发布的订阅源故事。 fb_sig_canvas_user
允许您识别用户,但不代表他们进行任何API调用。您仍然可以提示他们发布故事并发送邀请。
但是,使用这两种方法,会有一些用户到达您的应用程序而您无法知道他们是谁 - 甚至不知道他们的用户ID。这是为了保护用户的隐私,而且无法绕过它 - 你要么让他们点击某些东西,要么让他们进行授权。