К сожалению, SDK Facebook не обрабатывает это автоматически для нас. Кроме того, чтобы встроить его в SDK самостоятельно, самый простой способ таков:
Каждый раз, когда вы выделяете _facebook:
_facebook = [[Facebook alloc] initWithAppId:@"SuperDuperAppID"];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [prefs stringForKey:@"facebook-accessToken"];
NSString *expirationDate = [prefs stringForKey:@"facebook-expirationDate"];
_facebook.accessToken = accessToken;
_facebook.expirationDate = expirationDate;
Если вы никогда ничего не сохраняли в NSUserDefaults, тогда будут установлены значения nil. Ничего не случилось В противном случае будут установлены истинные значения, и [_facebook isSessionValid];
должен возвращать ИСТИНА, указывая на хорошие значения. Идите и делайте вызовы Facebook SDK, как будто они вошли (что они и есть). Если false, то позвоните
[facebook authorize:permissions delegate:self];
как обычно.
Затем убедитесь, что поддерживается следующий метод делегата Facebook:
- (void)fbDidLogin {
NSString *accessToken = _facebook.accessToken;
NSString *expirationDate = _facebook.expirationDate;
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:accessToken forKey:@"facebook-accessToken"];
[prefs expirationDate forKey:@"facebook-expirationDate"];
[prefs synchronize];
}
Я использую этот код в своем приложении, и он отлично работает. Я сделал это по памяти, поэтому я прошу прощения, если это не работает на копировать и вставить. Где-то может быть опечатка, а также неправильное управление памятью. Не забывайте, что маркеры доступа истекают, если вы не получите разрешение в автономном режиме. В любом случае код выше обрабатывает все.