Сохранение access_token Facebook в NSUserDefaults на iOS

iOS новичок здесь. Я использую следующий код, чтобы сохранить мой доступ к facebookToken и expireDate в NSUserDefaults:

facebook = [[Facebook alloc] initWithAppId:@"225083222506272"];
    [facebook authorize:nil delegate:self];
    NSString *access=[facebook accessToken];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:access, @"accessToken",[facebook expirationDate], @"expirationDate",nil];
    [defaults registerDefaults:appDefaults];

И я пытаюсь получить accessToken и expireDate в более позднем вызове с помощью:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *access=[defaults valueForKey:@"accessToken"];
    NSDate *date=[defaults objectForKey:@"expirationDate"];
    [facebook fbDialogLogin:access expirationDate:date];

но доступ и дата нулевые. Что я делаю неправильно?


person John    schedule 17.05.2011    source источник
comment
NSLog ваш доступ NSString. Возвращает значение?   -  person shabbirv    schedule 17.05.2011
comment
почему он возвращает ноль? Он должен возвращать значение...   -  person bobbypage    schedule 17.05.2011


Ответы (1)


Код здесь не синхронный. Это означает, что он не блокируется после вызова [facebook authorize:nil delegate:self];. Вместо этого вы должны реализовать метод делегата fbDidLogin, чтобы получать уведомления об успешном входе пользователя в систему. В этот момент извлеките токены доступа и сохраните их по умолчанию.

Вот частичный образец:

- (void)userClickedFacebookLogin {
    [facebook authorize:nil delegate:self]; // delegate is self
}

// Delegate method that you should implement to get notified
// when user actualy logs in.
- (void)fbDidLogin {
    // now get the access token and save to user defaults
    NSString *access = [facebook accessToken];
    // ..
}

Также убедитесь, что класс с приведенным выше кодом реализует как минимум протокол FBSessionDelegate.

@interface MyClass <FBSessionDelegate> {

}

@end

Посмотрите на пример DemoApp и, в частности, на DemoAppViewController из Facebook, чтобы улучшить идея.

person Anurag    schedule 17.05.2011
comment
Спасибо, что сохраняет его в NSUserDefaults. Если я перезапущу проект, он будет с нуля, и мне придется снова войти в систему, верно? - person John; 17.05.2011
comment
не уверен - я думаю, Facebook может кэшировать статус авторизации в папке Documents/, но вы можете проверить. - person Anurag; 17.05.2011