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

时间:2014-12-08 05:48:50

标签: android facebook-android-sdk android-facebook

我正在使用fb SDK v2.2 for android,我遵循了教程,所以我不打算在这里重复代码。我正在使用Android sdk的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调用OR以某种方式区分他点击登录时和他实际登录时的情况。我确定sdk有它但我似乎无法找到它

谢谢

1 个答案:

答案 0 :(得分:0)

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

你可以:

  1. 在LoginButton上设置一个OnClickListener,并监听点击事件(可能会设置一些状态告诉你的应用,点击按钮会触发将来的会话更改),或者
  2. 将一个UserInfoChangedCallback添加到LoginButton,并将您的繁重工作放在该回调中(请注意,您还需要将login_user_info属性设置为对于LoginButton为true),请参阅https://developers.facebook.com/docs/reference/android/current/interface/LoginButton.UserInfoChangedCallback/
  3. 构建会话时,看看它是否处于CREATED_TOKEN_LOADED状态,在这种情况下,它将继续打开而用户不必点击任何内容,请参阅https://developers.facebook.com/docs/reference/android/current/class/SessionState/