我正在尝试将我的 Android 应用从 Facebook SDK 2.0(异步 API)更新到新的 SDK 3.0。Facebook 不是此应用程序中唯一的身份验证方法。该应用程序的先前版本将 Facebook access_token 存储在 SharedPreferences 中。我正在尝试设置一个涵盖所有可能的身份验证案例的工作流程,但文档并不完整。
Session session = null;
//already authenticated in another Activity, so reuse session:
session = Session.getActiveSession(getApplicationContext())
//app resumed/rotated, so reopen session:
if (session == null) {
session = Session.openActiveSessionFromCache(getApplicationContext())
}
if (session == null) {
session = new Session(getApplicationContext());
//access_token from SDK 2.0 (async API), stored in SharedPreferences
if (myPreferences.getFacebookToken != null) {
AccessToken access_token = AccessToken.createFromExistingAccessToken(myPreferences.getFacebookToken(), null, null, null, null);
session.open(access_token, new Session.StatusCallback(){
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
myPreferences.deleteFacebookToken();
}
});
}
}
//user previously logged in (app restarted), or SSO
if (!session.isOpen()) {
session.openForRead(new Session.OpenRequest(getApplicationContext()).setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK));
}
Session.setActiveSession(session);
Request.newMeRequest(session, ... // etc
我相信这涵盖了我的应用程序中 Facebook 的所有身份验证案例。我想知道的是如何最好地确定我的用户是否是 facebook 用户,以便首先调用此代码?我可以检测到以前用户的 SDK 2.0 access_key,但新用户将没有有效的会话供我检查。如果用户有 SSO,或者如果 Session 对象已经有他们的访问令牌,我想登录没有交互的用户,但如果用户选择了另一种登录身份验证机制,则不运行任何此操作。如果没有访问令牌(在不使用 Facebook 登录的用户的情况下),似乎 Session 对象的检查将弹出 FB 登录。