我已阅读此处的文档和源代码以及其他相关问题,但我仍然在使用适用于 Android 的 Facebook SDK 3 授权/登录我的应用程序时遇到问题。
我不想使用提供的“登录”按钮。
以下是相关代码:
在 Activity.onCreate 我开始会话:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Session session = Session.getActiveSession();
mPrefs = getSharedPreferences("facebook_storage", MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (session == null) {
if (access_token != null) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", null);
editor.commit();
AccessToken accessToken = AccessToken.createFromExistingAccessToken(access_token, null, null, null, null);
session.open(accessToken, this);
} else {
session = new Session(getApplicationContext());
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(this));
} else if (session.getState().equals(SessionState.CREATED)) {
System.out.println("Session created, no token. I guess");
session.openForRead(new Session.OpenRequest(this).setCallback(this));
}
}
这会触发:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
这又会触发下一个块,输入 at if (session.isOpened())
:
public void call(Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if (session == null) {
MmfLogger.error("FacebookLogin session == null in call()");
} else if (session.isOpened()) {
System.out.println("Session.StatusCallback success: " + session.getState());
Request request = new Request(session, REQUEST_FIELDS, null, null, this);
request.executeAsync();
}
if (!session.isOpened()) {
System.out.println("session failed to open");
}
if (session.isOpened() && session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
Request request = new Request(session, REQUEST_FIELDS, null, null, this);
request.executeAsync();
} else if (session.isOpened() && session.getState().equals(SessionState.CREATED)) {
System.out.println("session isOpened and state is created");
}
}
从这里我得到一个错误,指出我需要一个活动令牌。但是,在发出请求之前,我可以看到令牌。会议有一个。我哪里错了?
感谢您的时间。