Facebook iOS SDK 3.1.1 Метод "closeAndClearTokenInformation" не работает
Я только что обновил с помощью iOS SDK 3.0.X до 3.1.1 и переписал код...
В соответствии с документацией в Facebook для рабочего процесса выхода (https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/#step3), я вызываю closeAndClearTokenInformation метода объекта FBSession.activeSession.
Это, похоже, не влияет на состояние сеанса Facebook, поскольку проверяет его сразу же после того, как вызов по-прежнему возвращает открытый сеанс.
Как и в случае с тем, как только мое приложение входит в систему с Facebook, оно не выходит из системы.
[ОБНОВЛЕНИЕ 1]
В соответствии с запросом, здесь код, который я использую для проверки состояния сеанса:
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded && FBSession.activeSession.isOpen)
//logged in
else
//not logged in
[ОБНОВЛЕНИЕ 2]
Немного изменила мою логику... Изменен исходный код:
if (FBSession.activeSession.isOpen)
//logged in
else
//not logged in
Поскольку FBSession.activeSession.state возвращал FBSessionStateOpen, а не FBSessionStateCreatedTokenLoaded.
Ответы
Ответ 1
Возможно, это поможет.
https://developers.facebook.com/bugs/497294866962479?browse=search_507cb8ebc4f025673237228
Я вызываю все эти методы вместе, чтобы убедиться, что это действительно выход из системы. Сумасшедшие ошибки.
[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];
Ответ 2
Я знаю, что это может быть запоздалым, но на Android (3.0 SDK) Session.getActiveSession() может возвращать null, если вы не в том же Контексте, где вы его создали (или если приложение было закрыто, а сеанс не был " t получить как-то восстановлено). Это происходит, и он обрабатывается SDK, поэтому вы не можете этого сделать.
В таких случаях вызов closeAndClearTokenInformation() не делает многого (если вы посмотрите на исходный код, вы поймете, почему). Решение для меня было чем-то вроде этих строк (на Java):
Session session = Session.getActiveSession();
if (session != null) {
Session.getActiveSession().closeAndClearTokenInformation();
Session.getActiveSession().close();
Session.setActiveSession(null);
} else {
// construct a new session (there are different ways to do this, this is how I do it because I need to pass the FACEBOOK_API_KEY programmatically).
session = new Session.Builder(MyApp.getInstance()).setApplicationId(Constants.FACEBOOK_API_KEY).build();
if (session != null) {//to be safe
//beware with the case of Session vs sesssion.
Session.setActiveSession(session);
session.closeAndClearTokenInformation();
session.close();
Session.setActiveSession(null);
}
}
Это фактически оставляет мою сессию как:
{Session state:CREATED, token:{AccessToken token: permissions:[]}, appId:xxxxx}
Помните, что создано не то же самое, что Closed (или Open).
Из этого состояния вы можете повторно открыть сеанс без проблем.
Надеюсь, что это поможет.