Не могу получить информацию о пользователе из Facebook с OAuth 2.0 - PullRequest
0 голосов
/ 09 сентября 2010

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

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

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

Ошибка домена = код facebookErrDomain = 10000 UserInfo = 0x54a2930 «Операция не может быть завершена. (FacebookErrDomain ошибка 10000.)»

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

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

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

Ответы [ 5 ]

2 голосов
/ 09 сентября 2010

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

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

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

1 голос
/ 06 мая 2011

У меня была такая же проблема. Я проверил мои настройки конфиденциальности, разрешения, другой метод и т. Д., Но я не мог решить это. На многих сайтах сказано «проверьте разрешение на доступ к 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];
}

Следующая запись спасла меня. Большое вам спасибо! Как получить ответ Facebook с помощью Facebook iOS SDK

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

1 голос
/ 09 сентября 2010

Вот временное исправление, которое я использовал. Вы можете найти эту строку метода 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 голосов
/ 09 сентября 2010

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

Я запросил разрешение на автономный доступ и, конечно, разрешение "publish_stream" ...

0 голосов
/ 09 сентября 2010

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

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

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

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

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

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

...