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