SSO требует нескольких попыток входа в систему

Когда пользователь пытается войти в мое приложение iOS с помощью единого входа в систему Facebook Connect (SSO), он несколько раз терпит неудачу, прежде чем позволить пользователю войти в приложение. Это происходит не каждый раз, но происходит в первый раз, когда пользователь пытается войти в систему с помощью Facebook.

Шаги по воспроизведению:

  • Пользователь должен иметь последнюю версию приложения iOS для Facebook, установленного на своем iPhone.
  • В многозадачности убедитесь, что приложение Facebook и ваше базовое приложение закрыты.
  • Нажмите на кнопку "Подключиться к Facebook" в базовом приложении.
  • Это открывает ваше приложение Facebook и перенаправляет обратно на ваше базовое приложение без каких-либо действий.

Ожидаемое поведение:

  • (void)fbDidLogin должен быть вызван метод, который будет аутентифицироваться в базовом приложении.

Фактическое поведение:

  • (void)fbDidNotLogin:(BOOL)cancelled вызывается в первый раз.

Ответ 1

Очень хорошая стартовая точка будет эта ссылка. Теперь вы можете загрузить новый SDK для facebook и интегрировать этот SDK в приложение iOS. Ссылка описывает поэтапное решение. Нет необходимости использовать методы делегирования входа, такие как fbdidlogin и т.д.

Вы можете проверить погоду, когда пользователь вошел в систему с помощью события sessionStateChanged.

- (void)sessionStateChanged:(FBSession *)session
                  state:(FBSessionState) state
                  error:(NSError *)error
{
switch (state) {
    case FBSessionStateOpen:
        if (!error) {
            // We have a valid session
            NSLog(@"User session found");
        }
        break;
    case FBSessionStateClosed:
        NSLog(@"session state closed");
        break;
    case FBSessionStateClosedLoginFailed:
        [FBSession.activeSession closeAndClearTokenInformation];
        break;
    default:
        break;
}

[[NSNotificationCenter defaultCenter] postNotificationName:FBSessionStateChangedNotification
                                                    object:session];
 }

в вашем контроллере просмотра вы можете следить за пользователем, чтобы проверить погоду, когда пользователь выполнил вход:

if (FBSession.activeSession.isOpen) { 
     // your code here
 }

Все описано в приведенной ссылке.

Ответ 2

Вам просто нужно работать с файлами API FBConnect. Просто посмотрите на этот файл в файле Facebook.m. В этом методе есть метод authorizeWithFBAppAuth, который написан для кода "другое приложение открыто". Вам просто нужно прокомментируйте этот код и запустите приложение. Он не перенаправит вас на приложение facebook по умолчанию, установленное на вашем устройстве.