我有以下使用 facebook sdk 3.0.1 的场景。当用户首次登录并选择“FB 登录”时,SSO 启动,新会话打开,一切正常。但是,当用户关闭应用程序并重新启动它时 - 我不明白如何获取最后一个打开的会话,目前我正在打开一个新会话并且用户再次看到 FB 进度条(当它连接到再次使用 FB,即使用户在上次运行时已经批准了 FB)。有人知道如何跳过此操作吗?
编辑1:
这就是我检索会话的方式:
public void tryRetrievFacebookSession() {
Session session = Session.getActiveSession();
if (session != null && session.isOpened())
return;
session = Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
MobliLog.d("SplashScreen", "Inside call() with session with state: " + session.getState());
// onSessionStateChanged(session, state, exception);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session session = Session.getActiveSession();
if (session != null)
session.onActivityResult(this, requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
会话通常是通过 LoginButton 或以下行创建的:
session = Session.getActiveSession();
if (session.getState().isClosed())
session = new Session(this);
if (session.isOpened()) {
onAuthenticationEndListener.onSuccessfullAuthentication();
return;
} else {
this.onFacebookAuthenticationEndListener = onAuthenticationEndListener;
Session.setActiveSession(session);
session.openForRead(new Session.OpenRequest(SocNetwksCompatScreen.this).setCallback(null));
return;
}
资料一:
当我做第一个 Session session = Session.getActiveSession(); 在 sso 身份验证后的登录中,我的会话状态为 CLOSED 而不是 OPENED
信息2:我正在使用uiHelper并像这样初始化它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
twitter = SocialPluginsUtils.getTwitterClient();
uiHelper = new UiLifecycleHelper(this, statusCallback);
uiHelper.onCreate(savedInstanceState);
}
现在,我知道在我执行 Session.getActiveSession(); 之后 会话状态应该打开,然后打开,然后应该调用 uiHelper 的回调。在我的代码中,状态是 CLOSED 或 CLOSED_LOGIN_FAILED 或 CREATED(不确定为什么它不稳定),其余的不会发生