【问题标题】:Android facebook sdk 3.0.1 using last sessionAndroid facebook sdk 3.0.1 使用最后一个会话
【发布时间】:2013-04-24 09:55:44
【问题描述】:

我有以下使用 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;
    }

信息1:

当我做第一个会话时 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(不确定为什么它不稳定),其余的都不会发生

【问题讨论】:

    标签: android facebook-android-sdk


    【解决方案1】:

    事实上,每次用户关闭应用时,会话都会关闭。
    所以如果Session.getActiveSession()返回一个空会话你只需要调用Session.openActiveSession(activity, true, sessionCallback)

    如果存在有效的令牌缓存,此方法将使用它来打开新会话,而无需用户插入任何数据。否则,这将显示具有基本权限的默认对话框。

    【讨论】:

    • 它对我不起作用,我一直在回调只是处于打开状态的会话,而不是打开状态
    • 如果这是您的问题,您只需在您的onActivityResult 上添加此Session session = Session.getActiveSession(); if (session != null) { session.onActivityResult(this, requestCode, resultCode, data)
    • 会话似乎没有将其 access_token 保存在令牌缓存中
    【解决方案2】:

    从我在您编辑后看到的情况来看,问题可能与您管理会话的方式有关。 我在我的项目中使用此代码:

        Session session = Session.getActiveSession();
    
        if (session == null){
            Session.openActiveSession(activity, true, sessionCallback);
        }
    
        else if (!session.getState().isOpened()){
            session.openForRead(new Session.OpenRequest(activity)
                    .setCallback(sessionCallback));
                        //this will open the session with basic read permissions
        }
    
        else {          
            //do what you want with the opened session
        } 
    

    此外,如果您使用UiLifecycleHelper,则不需要我在评论中建议您的两行代码,它们已经在助手的方法中。但一定要确保在activity的各个相关方法(onResume、onPause等)中调用了helper的所有方法

    如果没有令牌缓存,openActiveSession(activity, true, sessionCallback) 将自动调用一个新对话框,如果用户成功登录,一个新的令牌缓存将可供将来使用。

    【讨论】:

    • 你知道我是否需要从我打开它的同一活动中打开最后一个会话吗?
    • 有了你的代码,我刚刚获得了另一个状态为 CREATED 的会话,并出现了对话框。我不希望出现对话框,我只想检索最后一个会话。我不敢相信这个愚蠢的任务花了我这么长时间!愚蠢的脸书!
    • 您需要在每个想要向 Facebook 发出请求的活动中管理会话(请参阅my other answer)对于第一次登录和每次令牌过期都需要一个对话框。
    【解决方案3】:

    问题解决了。我不小心调用了 session.closeAndClearTokenInformation();在 onStop() 中(是的,太愚蠢了!)

    【讨论】:

    • 你学过哪个教程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多