0

Как только пользователь вошел в систему, я получить информацию пользователя, используя этот код:Не удается получить информацию о пользователе из Facebook с OAuth 2.0

[_facebook requestWithGraphPath:@"me" andDelegate:self]; 

Он работал в течение первых нескольких раз, но в конце концов возвратила ошибку. Я думал, что это сеанс, так как у меня есть «offline_access» в моих разрешениях. Я вошел из Facebook и снова собран из чистой сборки и он по-прежнему возвращает эту ошибку:

Error Domain=facebookErrDomain Code=10000 UserInfo=0x54a2930 "Operation could not be completed. (facebookErrDomain error 10000.)"

Я предполагаю, что мой маркер доступа действителен, так как я могу сделать проводку. Правильно ли я предположить?

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

Может ли кто-нибудь сказать мне, что случилось?

+0

Хм .. у многих людей есть такая же проблема. Пока что принудительное isSessionValid возвращает TRUE или назначает вашу собственную дату истечения срока действия. – marie

ответ

1

Вот временное исправление, которое я использовал. Вы можете найти этот метод линии 46 в FBLoginDialog.m

- (void) dialogDidSucceed:(NSURL*)url { 
    NSString *q = [url absoluteString]; 
    NSString *token = [self getStringFromUrl:q needle:@"access_token="]; 
    NSDate *expirationDate = [NSDate distantFuture]; 

    if ((token == (NSString *) [NSNull null]) || (token.length ==0)) { 
    [self dialogDidCancel:url]; 
    [self dismissWithSuccess:NO animated:YES]; 
    } else { 
    if ([_loginDelegate respondsToSelector:@selector(fbDialogLogin:expirationDate:)]) { 
     [_loginDelegate fbDialogLogin:token expirationDate:expirationDate]; 
    } 
    [self dismissWithSuccess:YES animated:YES]; 
    } 
} 

ли все с этим запросом выдачи разрешения offline_access? Это единственная причина, по которой я могу видеть, что дата истечения не отправляется. Возможно, попробуйте не запрашивать разрешение offline_access.

+0

Эй, спасибо за это, это сработало. Btw, я также пытался не запрашивать офлайн-доступ, и он все равно возвращает нулевую дату истечения срока действия. – marie

+0

Facebook исправил это. Теперь он отлично работает. – marie

0

У меня была эта проблема, главным образом потому, что моя учетная запись Facebook имеет максимальную конфиденциальность.

Это, скорее всего, разрешения, которые вы прошли во время входа в систему. По умолчанию он будет предоставлять доступ только к общедоступной информации. Помните, что в Facebook все меньше и меньше информации.

Попробуйте изменить разрешение на что-то вроде "read_stream", ноль

Тогда вместо [_facebook requestWithGraphPath: @ "меня" andDelegate: само];

Попробуйте использовать [_facebook requestWithGraphPath: @ "me/home" andDelegate: self];

Это должно вернуть ваш канал новостей. Работал для меня 5 минут назад.

0

Здесь не много добавить, здесь не работает. Я использую SDK для iOS для публикации в потоке, и он работал до вчерашнего дня. Сегодня мой клиент позвонил мне и пожаловался. Тьфу.

Я просил автономного права доступа и, конечно, «publish_stream» разрешение ...

+0

ОК, поэтому я также заставил метод isSessionValid вернуть «ДА», и он действительно работает. Но я определенно не хочу грузить с таким взломом в моем коде, который может испортить вещи в будущем. Я надеюсь, что скоро будет сообщение от Facebook об этой проблеме. –

2

Ответ на команду авторизовать, кажется, по-другому. Теперь нет даты истечения срока, как было раньше. Я попытался с принудительным isSessionValid вернуть TRUE, и он работает.

isSessionValid проверяет accessToken AND expirationDate. Поскольку нет даты истечения срока действия, функция возвращает FALSE.

Не знаю, является ли это временной модификацией из facebook или окончательной. В этом случае SDK должен быть исправлен, я полагаю. И новый вызов должен получить expirationDate.

+0

Спасибо, что работает. – marie

+0

Сегодня, похоже, Facebook зафиксирован. Теперь есть expirationDate (expires_in = 'value'), если не запрашивается offline_access, и expires_in = 0 с помощью offline_access. – ze4

+0

Да .. он отлично работает сейчас. Спасибо за информацию. – marie

1

У меня была такая же проблема. Я проверил свои настройки конфиденциальности, разрешения, другой метод и т. Д., Но я не смог его решить. Многие сайты сказали «проверить разрешение на доступ к offline_access/read_stream/publish_stream», я думаю, что это тоже важно, но я не мог исправить это.

Тогда я нашел следующее решение, наконец, оно отлично работает.

Вы должны изменить «safariAuth: YES» на «safariAuth: NO» в файле «Facebook.m».

- (void)authorize:(NSArray *)permissions 
     delegate:(id<FBSessionDelegate>)delegate { 
      [_permissions release]; 
      _permissions = [permissions retain]; 
      _sessionDelegate = delegate; 

      //[self authorizeWithFBAppAuth:YES safariAuth:YES]; 
      //You can get auth_token in iOS App! 
      [self authorizeWithFBAppAuth:YES safariAuth:NO];  
} 

Затем вы можете использовать следующий метод, чтобы получить свой собственный информацию, если вы вошли в систему.

[facebook requestWithGraphPath:@"me" andDelegate:self]; 

если вы не вошли в систему, Вы должны войти в систему, следуя методу первого.

permissions = [[NSArray arrayWithObjects: 
      @"email", @"read_stream", @"user_birthday", 
      @"user_about_me", @"publish_stream", @"offline_access", nil] retain]; 
if (![facebook isSessionValid]) { 
    [facebook authorize:permissions delegate:self]; 
} 

Следующий пост спас меня. Большое вам спасибо. How to retrieve Facebook response using Facebook iOS SDK

Удача & Счастливое кодирование! Спасибо.

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