Facebook iOS SDK 3.1.1 Метод "closeAndClearTokenInformation" не работает - программирование
Подтвердить что ты не робот

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.

4b9b3361

Ответ 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). Из этого состояния вы можете повторно открыть сеанс без проблем.

Надеюсь, что это поможет.