首页 文章

在Android中处理Facebook SDK 3.0会话生命周期

提问于
浏览
0

我正在尝试将我的Android应用程序从Facebook SDK 2.0(异步API)更新到新的SDK 3.0 . Facebook不是这个应用程序中唯一的身份验证方法 . 该应用程序的先前版本在SharedPreferences中存储了Facebook access_token . 我正在尝试设置涵盖所有可能的身份验证案例的工作流程,但文档不完整 .

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登录 .

1 回答

  • 1

    首先是关于你的代码的评论:你根本不需要做if(myPreferences.getFacebookToken)块 . SDK已经为您存储了访问令牌,并将使用存储的数据(如果可用) . 您无需将其显式传递给Session .

    现在,回答你的问题 . 调用openActiveSessionFromCache几乎就是您正在寻找的内容 . 如果用户之前已经使用facebook授权,并且您没有调用closeAndClearTokenInformation,那么调用openActiveSessionFromCache将会安静地记录它们 . 因此,如果您从该呼叫获得非空会话,那么您知道他们是Facebook用户,并且他们已经授权您的应用 . 如果你得到一个空会话,那么他们还没有认证你的应用程序,你应该向他们提供所有的登录选择 .

相关问题