是否可以访问用户的墙信息而无需传递他/她的访问令牌?

时间:2011-05-30 07:13:30

标签: facebook facebook-graph-api

我想知道是否可以在不传递他/她的访问令牌的情况下访问用户的墙信息?

例如,我将传递我的应用程序秘密令牌和应用程序ID。并且FB用户已经允许从我的应用程序访问他/她的信息。 Facebook通过使用我的应用程序秘密令牌和应用程序ID来检查和匹配我的应用程序和我的应用程序的用户。

因为我发现了一些类似的主题。 http://forum.developers.facebook.net/viewtopic.php?pid=9172

当我查看Rest FB doc时,就是这样说的。 http://restfb.com/javadoc/index.html public DefaultFacebookClient() 创建没有访问令牌的Facebook Graph API客户端。 如果没有访问令牌,您可以查看和搜索公共图表数据,但不能做其他事情。

我怀疑没有访问令牌它会起作用。 大家可以分享我的想法或任何可能的类似方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要让用户授权您的应用进行离线访问。即使用户处于脱机状态,您也可以访问用户的墙,但仍需要访问令牌。这是Facebook安全措施的一部分。

有两种类型的访问令牌:

  • 基于会话:短期到期,每当您需要执行操作时用户将登录到FB时使用。
  • 离线访问:不会过期,并允许应用随时为用户执行操作。这需要在授权应用时获得offline_access权限。

点击此处:http://developers.facebook.com/docs/authentication/了解oauth机制,此处:http://developers.facebook.com/docs/authentication/permissions/表示权限列表。

不推荐使用REST API,强烈建议您不再使用它。此外,从今年10月起,您将只能使用Oauth2身份验证(请参阅When is Facebook turning off their session based auth?

答案 1 :(得分:-1)

如果没有令牌,您只能访问公共信息。

公共数据

来自RestFB homepage

// It's also possible to create a client that can only access
// publicly-visible data - no access token required. 

FacebookClient publicOnlyFacebookClient = new DefaultFacebookClient();

如果用户不保护自己的帖子,那么您可以无需令牌即可访问所有内容。但是大多数用户确实保护了他们的数据,然后你需要一个有效的用户访问令牌来读取数据。

私人数据

当你说“FB用户已经允许从我的应用程序访问他/她的信息”时,这意味着用户已经在网络浏览器中点击了“允许应用”,此时Facebook会给你一个令牌。您可以在使用RestFB后使用该令牌:

FacebookClient facebookClient = new DefaultFacebookClient(USER_ACCESS_TOKEN);
User user = facebookClient.fetchObject("me", User.class);
out.println("User name: " + user.getName());

默认情况下,令牌将在几个小时后过期。如果您要求offline_access权限,则该令牌将永久有效(只要用户未在其设置中删除您的应用的权限)。您应该将该令牌存储在数据库中,以便在需要时使用它。

获取用户令牌

您无法使用RestFB获取用户令牌。在RestFB homepage上,您可以阅读:

  

非目标:[...]提供获取会话密钥或OAuth访问令牌的机制

因为您需要一个浏览器来执行此操作:用户必须在Facebook网站上验证并授权您的应用(显示的弹出窗口)。

您可以做的是拥有一个PHP页面,您的用户必须在该页面上授权您的应用。您可以阅读此stackoverflow answer that explains how to use the Facebook PHP SDK来执行此操作。

希望有所帮助!