Сохранение Facebook access_token в NSUserDefaults на iOS - PullRequest
0 голосов
/ 17 мая 2011

iOS для начинающих здесь.Я использую следующий код, чтобы сохранить свои facebook accessToken и expirationDate в 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 и expirationDate при более позднем вызове с:

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

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

1 Ответ

2 голосов
/ 17 мая 2011

Код здесь не является синхронным. Это означает, что он не блокируется после вызова [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, чтобы получить лучшую идею.

...