无需登录即可创建Facebook访问令牌

时间:2015-01-08 08:54:41

标签: android facebook-graph-api facebook-access-token

我想在我的应用中收到已定义的Facebook页面的公开信息。我已经集成了FacebookSDK并在Facebook开发者控制台中创建了一个新应用程序。我的请求看起来像这样:

new Request(
                null,
                "/176063032413299/feed",
                null,
                HttpMethod.GET,
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        tv.setText(response.getRawResponse());
                    }
                }
        ).executeAsync();

服务器回答,我需要一个acceess令牌。但是当我们使用我的应用时,我不希望我的用户登录。那么是否可以选择在不登录的情况下获取访问令牌?我只想阅读公共数据。我对发布或阅读私人帖子不感兴趣。

如果我像这样使用app访问令牌,它仍然不起作用:

new Request(
                null,
                "/176063032413299/feed?access_token=xxx",
                null,
                HttpMethod.GET,
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        tv.setText(response.getRawResponse());
                    }
                }
        ).executeAsync();

我收到回复: "无效的OAuth访问令牌签名"

3 个答案:

答案 0 :(得分:2)

即使是公开帖子,您也必须授权用户才能获得访问权限。使用read_stream获取所有帖子或使用user_status获取用户的帖子。

read_stream很可能不会被Facebook批准,请参阅此文档:https://developers.facebook.com/docs/facebook-login/permissions/v2.2

请注意,“公开”并不意味着您可以在未经用户授权的情况下抓取它。应用程序无法抓住他们想要的东西 - 无论如何都不允许抓取:https://www.facebook.com/apps/site_scraping_tos_terms.php

此外,当然,如果没有用户交互(登录和授权),您无法创建用户令牌(这是您需要的)。有关访问令牌的详细信息,请访问以下链接:

顺便说一下,文档提到“查看公共链接需要任何有效的访问令牌”。 - 所以你可能只能获得链接。

来源:https://developers.facebook.com/docs/graph-api/reference/v2.2/user/feed

要调试访问令牌,请使用Facebook调试器:https://developers.facebook.com/tools/debug/

编辑:我刚刚意识到您只想获取Facebook页面的公共提要,而不是用户个人资料。为此,您可以使用App Access Token。它永远不会过期且易于创建:App-ID|App-Secret。查看文档以获取更多信息。请注意,如果页面受年龄或国家/地区限制,则需要使用用户令牌或页面令牌。

答案 1 :(得分:0)

查看https://developers.facebook.com/docs/graph-api/reference/v2.2/page/feed/

能够请求/{page_id}/feed的权限:

  
      
  • 查看公开分享的帖子需要访问令牌。
  •   
  • 需要用户访问令牌才能检索该人可见的帖子。
  •   
  • 需要使用网页访问令牌来检索任何其他帖子。
  •   

这意味着您可以生成一个长期存在的页面访问令牌,以便能够检索公共页面帖子。由于您不想在应用中存储过期的访问令牌,因此您必须创建一个后端Web服务来代理Graph API与您的应用之间的请求。

您还应该能够使用无限期有效的App Access令牌。

答案 2 :(得分:-1)

使用client token.

您也可以生成并签署自己的个人令牌,但不想分发。