我想知道是否可以在不传递他/她的访问令牌的情况下访问用户的墙信息?
例如,我将传递我的应用程序秘密令牌和应用程序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客户端。 如果没有访问令牌,您可以查看和搜索公共图表数据,但不能做其他事情。
我怀疑没有访问令牌它会起作用。 大家可以分享我的想法或任何可能的类似方法吗?
感谢。
答案 0 :(得分:1)
您需要让用户授权您的应用进行离线访问。即使用户处于脱机状态,您也可以访问用户的墙,但仍需要访问令牌。这是Facebook安全措施的一部分。
有两种类型的访问令牌:
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)
如果没有令牌,您只能访问公共信息。
// 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来执行此操作。
希望有所帮助!