Android 无需登录即可访问Facebook Graph API

Android 无需登录即可访问Facebook Graph API,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我已经看到,通过Javascript API和GET请求,可以从FanPages获取公开帖子。 我试图完成的是一个Android原生应用程序,它不要求用户登录,并使用FB应用程序访问令牌从FB页面获取和显示帖子。 我想知道这是否可以通过Android FB API实现,因为我可以通过URL实现,比如 https://graph.facebook.com/{page_id}/feed?fields=message,picture&limit=10&access_token={you

我已经看到,通过Javascript API和GET请求,可以从FanPages获取公开帖子。 我试图完成的是一个Android原生应用程序,它不要求用户登录,并使用FB应用程序访问令牌从FB页面获取和显示帖子。 我想知道这是否可以通过Android FB API实现,因为我可以通过URL实现,比如

https://graph.facebook.com/{page_id}/feed?fields=message,picture&limit=10&access_token={your_acces_token}
当我尝试使用Android Graph API时,没有用户登录

AccessToken.getCurrentAccessToken()

返回空值


谢谢

有两种方法可以做到这一点,它们都是

更简单的方法是将AppID和AppSecret(可在Facebook开发者仪表板中找到)连接成一个“|”字符,如:“AppID”+“|”+“AppSecret”

小心 如果有人决定仔细查看,这将在客户端代码中公开应用程序的私有凭据。因此,设置专用后端服务器作为移动应用程序对graph API的无用户访问的代理更安全

您可以使用您选择的任何语言设置一个API,该API只需复制它接收的请求,附加凭据,将请求发送到Facebook,并将Facebook的响应传回原始请求者

例如:

没有访问令牌:

移动应用程序-->{page_id}/feed?字段=消息、图片和限制=10

带有访问令牌:

您的服务器-->{page_id}/feed?fields=message,picture&limit=10&access_-token=AppID|AppSecret

响应管道


Facebook---->API结果---->您的服务器---->API结果---->移动应用程序

我曾为同样的问题苦苦挣扎过一段时间,经过数小时的研究,我得出了以下结论():

我假设您已经有一个页面访问令牌。我用facebook上的图形浏览器创建了我的。以下是关于如何创建永不过期的文档的教程: (寻找2016年的方法)

据我所知,只要使用扩展令牌,它就不会过期。但我对此不确定。我想我在facebook api文档中的某个地方把它涂红了,但是再也找不到了

您还可以设置许多其他参数。查看此处并查找“字段”


希望这个笨拙的解决方案对某些人有帮助。

所以它总是必须通过纯HTTP完成?没有办法通过Android FB SDK做到这一点?我不熟悉Android SDK,但看看文档,您可能可以这样做:String appToken=“AppID”+“|”+“AppSecret”;AccessToken token=新的AccessToken(appToken,“AppID”,null,null,null,null,null,null);GraphRequest req=新的GraphRequest(标记,“页面id/提要”);查看此处的文档:是否有任何公共服务器实现了无访问令牌的
方式?
@Override
protected void onCreate(Bundle savedInstanceState) {

  FacebookSdk.sdkInitialize(getApplicationContext());
  AppEventsLogger.activateApp(getApplication());

  AccessToken at         = new AccessToken(getString(R.string.facebook_access_token), getString(R.string.facebook_app_id), getString(R.string.facebook_page_id), null, null, null, null, null);
  Bundle      parameters = new Bundle();
  parameters.putString("fields", "message,created_time,link,full_picture");
  new GraphRequest(at, "/" + at.getUserId() + "/feed", parameters, HttpMethod.GET, new GraphRequest.Callback() {

    public void onCompleted(GraphResponse response) {

      Log.i(this.getClass().getName(), "onCompleted " + response.getRawResponse());
    }
  }).executeAsync();
}