Вход Выход из системы с Facebook iOS SDK - PullRequest
6 голосов
/ 02 февраля 2012

Мы столкнулись с проблемой выхода из системы на Facebook. Когда я захожу на Facebook через приложение, оно запрашивает разрешение пользователя с помощью кнопок «Войти» и «Отмена». Но этот экран появляется только в самый первый раз. т.е. после того, как мы вошли в систему с помощью Safari или приложения и даже если мы вышли из Facebook, на экране приложения, запрашивающем разрешение пользователя, отображается только кнопка «ОК». Это не позволяет войти в систему как другой пользователь. Почему экран с кнопками «Войти» и «Отмена» не отображается при каждом запуске приложения? Я попытался удалить куки и удалить NSUserDefaults, но безуспешно.

Проблема в том, что после выхода из системы я не могу войти в Facebook как другой пользователь. Это все еще показывает как тот же пользователь.

Я вызываю приведенную ниже функцию выхода из системы в SDK

(void)logout:(id<FBSessionDelegate>)delegate {

  self.sessionDelegate = delegate;
 [_accessToken release];
 _accessToken = nil;
 [_expirationDate release];
 _expirationDate = nil;

 NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
 NSArray* facebookCookies = [cookies cookiesForURL:
 [NSURL URLWithString:@"http://login.facebook.com"]];
 for (NSHTTPCookie* cookie in facebookCookies) {
   [cookies deleteCookie:cookie];
 }

if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
  [_sessionDelegate fbDidLogout];
}
}

Также в делегатской функции fbDidLogout я удалил все объекты NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]) {
    [defaults removeObjectForKey:@"FBAccessTokenKey"];
    [defaults removeObjectForKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

regrds Шихаб

Ответы [ 5 ]

7 голосов
/ 21 февраля 2013

Вы можете очистить сеанс, а также очистить куки с помощью следующего кода:

FBSession* session = [FBSession activeSession];
[session closeAndClearTokenInformation];
[session close];
[FBSession setActiveSession:nil];

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"https://facebook.com/"]];

for (NSHTTPCookie* cookie in facebookCookies) {
    [cookies deleteCookie:cookie];
}
5 голосов
/ 18 декабря 2013

FBSession openWithBehavior: завершениеХандлер: может использоваться ..

FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"email",@"publish_actions",@"publish_stream", nil]];
 [fbSession openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session,FBSessionState state, NSError *error){
    [FBSession setActiveSession:fbSession]; // Retain the Active Session.        
}];

Для выхода из системы, Ans by Ellen S .. отлично работала для iOS.

5 голосов
/ 03 июля 2012

Я изменил fbDidLogout метод, и он работал, вот код:

-(void) fbDidLogout
{
    NSLog(@"Logged out of facebook");
    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies])
    {
        NSString* domainName = [cookie domain];
        NSRange domainRange = [domainName rangeOfString:@"facebook"];
        if(domainRange.length > 0)
        {
            [storage deleteCookie:cookie];
        }
    }
}//End of Method

Метод успешно завершает сеанс пользователя. Надеюсь, это поможет!

2 голосов
/ 10 октября 2012

Я просто понял, что я вошел в настройки своего iPhone и попал в режим конфиденциальности, выбрал вкладку Facebook и выключил там, где написано, что Приложения, которые запросили доступ к вашей учетной записи Facebook, появятся здесь.Оно работает!!!

0 голосов
/ 29 апреля 2016

При входе в систему установить значение loginBehavior, поэтому при выходе с другим входом в учетную запись он не будет отображаться только авторизованным без экрана входа в систему login.loginBehavior = FBSDKLoginBehaviorWeb; Я использую Facebook 4.11, это работа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...