Хранение токена Facebook для автономного доступа - PullRequest
1 голос
/ 07 марта 2011

Я ищу способ сохранить токен доступа, чтобы пользователь мог публиковать на Facebook без необходимости входа в систему для каждого вызова API графика:

Мне нужен токен offline_access, я его хранюв NSUserDefaults, но когда я пытаюсь использовать его снова, я получаю ошибку FacebookErrDomain 10000

Вот что я делаю:

В fbDidLogin я получаю access_token и сохраняю его в пользовательских настройках по умолчанию

- (void)fbDidLogin {
    NSString *token = self.facebook.accessToken;
    [[NSUserDefaults standardUserDefaults] setObject:token forKey:@"facebookToken"];

}

После этого, когда я снова запускаю приложение, я просто получаю токен от настроек пользователя по умолчанию и назначаю их объекту facebook:

NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"];
[_facebook setAccessToken:token];

Но это не работает..

Кто-нибудь знает, что я могу делать неправильно?

Спасибо, Винсент.

РЕДАКТИРОВАТЬ: Если я делаю NSlog после [[NSUserDefaults standardUserDefaults] objectForKey:@"facebookToken"];, я вижу, чтотокен был сохранен.

Ответы [ 3 ]

7 голосов
/ 26 марта 2011

У меня была такая же проблема, и я обнаружил, что проблема в том, что вы не сохраняете дату истечения срока действия.

Если вы сделаете это, это позволит вам повторно войти в систему в порядке.

Пример кода:

 [[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"fb_access_token"];
 [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"fb_exp_date"];

Получение такое же, просто установите _facebook.expirationDate.

3 голосов
/ 08 марта 2011

Ладно, похоже, что это iOS iOS SDK с ошибками.

Используя токен, сохраненный в настройках пользователя по умолчанию, я могу создать сообщение на моей стене, используя curl:

curl -F 'access_token=br69pK_lh0Xbj....plDRUdG97a55KIHzlaiw' \
     -F 'message=TEST API.' \
     https://graph.facebook.com/ME/feed

Так что я просто выполняю HTTPS POST, поэтому, используя ASIHTTPRequest, этот код работает как чудо:

NSURL* faceboobUrl = [NSURL URLWithString:@"https://graph.facebook.com/ME/feed"];
self.request = [ASIFormDataRequest requestWithURL:faceboobUrl];
[request setRequestMethod:@"POST"];
[request setPostValue:token forKey:@"access_token"];
[request setPostValue:msg forKey:@"message"];
[request setDelegate:self];
[request setTimeOutSeconds:TIMEOUT];
[request startAsynchronous];

Нет, спасибо facebook;)

Vincent

2 голосов
/ 07 марта 2011

Обязательно позвоните:

[[NSUserDefaults standardUserDefaults] synchronize];

Это «сохранит» ваши настройки на диск / флэш.

Также сделайте NSLog на токене, прежде чем сохранить его, чтобы убедиться, что он не равен нулю.

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