我正在开发一个Android应用程序,您可以在其中查看Facebook用户的photoalbums。当我将访问令牌添加到通过facebook developer tools手动生成的 HttpGet请求时,我有一个解决方案。
通过android / java创建这样的访问令牌的正确方法是什么?有没有办法在不使用 facebook android sdk 的情况下获得一个?
答案 0 :(得分:2)
根据您的评论,让我提出一些建议。在我谈到这一点之前,让我在你当前的情况中澄清一些事情。
只要访问令牌有效,当前通过手动输入Access Token
来提取数据的方式就可以正常工作。访问令牌有一个到期。之后,分配新的访问令牌。只要它有效,一切都很好。您的应用可以正常运行,您的用户将能够根据查询查看photoalbums。
当访问令牌过期时,难度将开始。 Facebook在到期时不会与您保持密切关系,因此,您无法知道何时采取纠正措施。
现在,因为您正在对Activity
中的访问令牌进行硬编码,所以每次访问令牌到期时,您都必须使用更新的访问令牌进行推送和更新。
你可以看到,我希望能够实现这一目标。
建议:
一:
保持现状,我怀疑,当访问令牌过期时,您必须面对用户的愤怒(阅读,否定评级和评论)。更不用说,必须推送更新,用户不会看到任何更改,添加或改进只是为了修复过期的访问令牌。我不知道这将是一项富有成效的练习。
两个的
最简单的方法是将Facebook SDK集成到您的应用程序中,即使这对于像访问令牌这样简单的事情来说听起来也太重要了。对您的用户而言,直接的好处是,您的用户将始终拥有与您的应用程序无缝的体验。对你来说,它会省去我早些时候已经说过的很多麻烦。
底线
如果不使用与平台相关的SDK,则无法获得动态访问令牌。在这种情况下,android。您可以继续使用相同的方法来提取数据,但使用动态访问令牌。
要了解有关访问令牌的更多信息并了解其工作原理,请访问以下链接:https://developers.facebook.com/docs/concepts/login/access-tokens-and-types/
答案 1 :(得分:-1)
您是否阅读过新SDK的文档?它自动完成。
public class MainActivity extends FacebookActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.openSession();
}
@Override
protected void onSessionStateChange(SessionState state, Exception exception) {
// user has either logged in or not ...
if (state.isOpened()) {
// make request to the /me API
Request request = Request.newMeRequest(
this.getSession(),
new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("Hello " + user.getName() + "!");
}
}
}
);
Request.executeBatchAsync(request);
}
}
}