2013-04-05 3 views
1

Я использую sample program для изучения facebook-ios-sdk, я обнаружил проблему: если я вошел в систему Facebook на своем устройстве и запустил это приложение-образец, все в порядке, однако, когда я удаляю свою учетную запись на Facebook с моего устройства и снова запустите это приложение-образец, я все равно могу пройти процесс входа в систему, и SCViewController все еще можно увидеть (есть приложение быстрого доступа к приложениям Facebook, но мне нужно только нажать кнопку «OKey», я не нужно заполнять любую информацию по электронной почте/паролю для входа в Facebook).Как очистить токен, используя facebook-ios-sdk v3.2.1?

Я проверил код и обнаружил, что после того, как моя учетная запись удалена с устройства, токен в FBSession.activeSession.accessToken по-прежнему считается действительным. Есть какие-либо проблемы? и как я могу очистить токен и сделать диалог входа в журнал? Я уже вызвал [FBSession.activeSession closeAndClearTokenInformation] при выходе из системы, токен должен быть очищен, в соответствии с документом sdk Facebook, но это не так.

Окружающая среда, которую я использую: XCode 4.6.1, iPad 6.1 simulator и facebook-ios-sdk v3.2.1.

обновление: вставить код здесь: в SCAppDelegate.m, я добавил 3 функции, которая не в пример кода, но в SDK онлайн документа:

- (void)showLoginView 
{ 
    UIViewController* topViewController = [self.navigationController topViewController]; 
    UIViewController* modalViewController = [topViewController modalViewController]; 
    // If the login screen is not already displayed, display it. If the login screen is 
    // displayed, then getting back here means the login in progress did not successfully 
    // complete. In that case, notify the login view so it can update its UI appropriately. 
    if (![modalViewController isKindOfClass:[SCLoginViewController class]]) { 
     SCLoginViewController* loginViewController = [[SCLoginViewController alloc] 
                 initWithNibName:@"SCLoginViewController" 
                 bundle:nil]; 
     [topViewController presentModalViewController:loginViewController animated:NO]; 
    } else { 
     SCLoginViewController* loginViewController = (SCLoginViewController*)modalViewController; 
     [loginViewController loginFailed]; 
    } 
} 

- (void)sessionStateChanged:(FBSession*)session state:(FBSessionState)state error:(NSError*)error 
{ 
    switch (state) { 
     case FBSessionStateOpen: { 
      UIViewController* topViewController = [self.navigationController topViewController]; 
      if ([[topViewController modalViewController]isKindOfClass:[SCLoginViewController class]]) { 
       [topViewController dismissModalViewControllerAnimated:YES]; 
      } 
     } 
      break; 
     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
      [self.navigationController popToRootViewControllerAnimated:NO]; 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      [self showLoginView]; 
      break; 

     default: 
      break; 
    } 
    if (error) { 
     UIAlertView* alertView = [[UIAlertView alloc]initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 

- (void)openSession 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession* session, FBSessionState status, NSError* error){ 
     [self sessionStateChanged:session state:status error:error];}]; 
} 

Тогда в SCLoginViewController.m, я добавьте кнопку, вместо использования существующего объекта FBLoginView, чтобы выполнить задание на вход. Функция обработчика для этой кнопки выглядит следующим образом:

- (IBAction)performLogin:(id)sender { 
    //[self.spinner startAnimating]; 
    SCAppDelegate* appDelegate = [UIApplication sharedApplication].delegate; 
    [appDelegate openSession]; 
} 

Тогда в SCViewController.m, я добавляю еще одну кнопку, чтобы сделать бревно из работы. Функцией обработчика для этой кнопки является следующее:

- (IBAction)logoutButtonWasPressed:(id)sender { 
    [FBSession.activeSession closeAndClearTokenInformation]; 
} 

другой код почти такой же, как в примере кода.

+0

ли вы пробовали сбросить IPad симулятор? Я использую его в своем приложении, и он работает нормально. Откройте сафари на ipad и выйдите из учетной записи facebook. –

+0

Да, я попытался удалить файлы симулятора в ~/Liberary/Application Support/iPhone Simulator/6.1/Applications, очистить проект и перестроить его с нуля, по-прежнему та же проблема. –

+0

Можете ли вы опубликовать код, чтобы узнать, есть ли у вас какие-либо ошибки? –

ответ

0

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

Следующие работы для меня с Facebook SDK 3+ на прошивке 5.1 +:

[FBSession.activeSession closeAndClearTokenInformation]; 

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for(NSHTTPCookie *cookie in [storage cookies]) 
{ 
    NSString *domainName = [cookie domain]; 
    NSRange domainRange = [domainName rangeOfString:@"facebook"]; 
    if(domainRange.length > 0) 
    { 
     [storage deleteCookie:cookie]; 
    } 
} 
+0

Что это такое, пролетать вниз без комментариев? Молодец, это (wo) человек! лол –

Смежные вопросы