Я обновляю приложение, использующее facebook sdk, но у меня возникли проблемы, а официальная документация слишком плохая. В моем приложении пользователь может войти в систему с помощью facebook или с помощью обычной учетной записи (хранящейся на моем сервере), и эти параметры отображаются при запуске приложения. Очевидно, что пользователь также может выйти и войти в систему с другой учетной записью (facebook или нет), и у меня проблема с выходом из facebook. На самом деле я не могу выйти из системы пользователя, связанного с учетной записью facebook. Как я заметил после множества попыток, все изменения статуса facebook отслеживаются AccessTokenTracker и ProfileTracker, которые должны быть созданы только один раз при запуске. Я показываю (и объясняю) свой код. Это код моего входа в систему FragmentActivity, который проверяет, был ли пользователь уже вошел в систему (с помощью facebook или с выделенной учетной записью), и если да, показать следующую активность, иначе показать фрагмент для выбора параметров доступа:
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
if (currentAccessToken != null) {
Log.i("LOGINACTIVITY", "token tracker, current token valid");
AccessToken token = AccessToken.getCurrentAccessToken();
//already logged with facebook, show next activity
} else {
//check if current visible activity is logout activity
// that contains logout button
ActivityManager am = (ActivityManager) LoginActivity.this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
String top_activity = taskInfo.get(0).topActivity.getClassName();
if (top_activity.equals(getApplicationContext().getPackageName() + ".LogoutActivity")) {
//launch new login activity
LoginManager.getInstance().logOut();
getApplicationContext().startActivity(new Intent(getApplicationContext(),
LoginActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
}
};
accessTokenTracker.startTracking();
Теперь случилось так, что, когда я нажимаю кнопку выхода, трекер accesstoken выполняет ветвь else, чтобы показать параметры входа, которые он показал, но по какой-то причине приложение автоматически снова входит в систему с помощью facebook (оно вызывается, если ветвь TokenTracker), поэтому пользователь не может выйти из facebook. Что случилось?