Android 每次用户打开应用程序并已登录时,都会调用OnSessionStateChange

Android 每次用户打开应用程序并已登录时,都会调用OnSessionStateChange,android,facebook-android-sdk,android-facebook,Android,Facebook Android Sdk,Android Facebook,我使用的是适用于android的fb SDK v2.2,我遵循了教程,所以我不打算在这里重复代码。我正在使用AndroidSDK的loginbutton,我将uiHelper设置为在会话启动时进行回调,如下所示 uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() { @Override public void call(Session session, SessionStat

我使用的是适用于android的fb SDK v2.2,我遵循了教程,所以我不打算在这里重复代码。我正在使用AndroidSDK的loginbutton,我将uiHelper设置为在会话启动时进行回调,如下所示

   uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    });
当用户通过点击fb登录按钮登录时,onSessionStateChange将被调用,我将调用某个代码初始化用户信息

现在,如果用户杀死应用程序。然后再次打开应用程序,首先是用户登录非常好。问题发生在再次调用onSessionStateChange,然后我又做了一项繁重的工作,因为会话状态被打开,就像用户再次登录一样。我不想要这种行为。我只想在用户点击登录并实际执行登录场景时完成这项繁重的工作,而不是每次他打开应用程序并且已经登录时

你知道怎么做到吗?基本上不需要调用sessionStateChange,也不需要在他点击登录和实际登录时区分情况。我肯定sdk有,但我似乎找不到


谢谢

每次会话状态更改时都会调用StatusCallback.call方法。当您冷启动一个应用程序并创建一个会话对象时,它将经历几个状态更改,每个状态更改都将触发StatusCallback.call

你可以:

在您的登录按钮上设置OnClickListener,并侦听click事件可能会设置一些状态,告知您的应用程序未来的会话更改是由按钮单击触发的,或者 将UserInfoChangedCallback添加到LoginButton,并将您的重担放在该回调中。注意,您还需要将LoginButton的fetch_user_info属性设置为true,请参阅 构造会话时,请查看会话是否处于已创建令牌加载状态,在这种情况下,它将继续打开,而用户无需单击任何内容,请参阅
谢谢你的解决方案。如果我在第二种情况下执行第二种操作,那么按钮单击的登录生命周期是否正常启动,或者我是否必须像onclick那样手动调用登录api。对于第三种情况,你能多加一点硼酸盐吗?你所说的构建会话是什么意思?我通常从回调方法获取会话。。。再次感谢在第二种情况下,您不需要手动调用任何东西。对于3,如果您没有显式地创建会话,即您只使用LoginButton获取会话,那么它实际上并不适用。谢谢。。我将尝试一下,如果不起作用,请告知: