Подтвердить что ты не робот

Правильный поток для входа пользователя из приложения iOS в удаленный API

Здесь логический поток, который я пытаюсь ввести в свое приложение для iPhone:

enter image description here

Я думаю, что понимаю технические достижения для этого (используя AFNetworking, подключая Rails API с помощью Devise в качестве аутентификации). Auth_token будет сохранен в цепочке ключей после успешного входа в систему. То, что я не могу понять, это лучший способ настроить мое приложение так, как показано выше.

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

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

Я не использую раскадровки.

4b9b3361

Ответ 1

Я реализовал подобный, RootViewController был "SplashViewController" в навигационном контроллере, демонстрируя хороший логотип, индикатор активности и предоставляет информацию о состоянии аутентификации пользователя. Он содержит логику для проверки сохраненного маркера и реализации аутентификации. Если аутентификация прошла успешно, ShowUserController отображается путем нажатия на стек навигационной системы.

Если аутентификация происходит с ошибкой, LoginViewController представляется в виде модально. SplashViewController реализует делегат LoginViewController, который ничего не делает, кроме передачи имени пользователя и пароля SplashViewController. При успешном входе в систему LoginViewController отклоняется, и пользователь перенаправляется на ShowUserController.

Ответ 2

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

Ответ 3

Чтобы уточнить ответ @Owen Hartnett, поскольку этот текст не будет вписываться в комментарий; Вот как я видел работу SDK в Facebook. Если вы создаете приложение, использующее SDK Facebook iOS, как единственный механизм входа, то способ его работы выглядит следующим образом:

В моем делете делегата didFinishLaunchingWithOptions сначала проверяю токен доступа "уже по файлу", например, NSUserDefaults. Если он не найден, мне нужно его получить, и поэтому делегат приложения немедленно запустит модальный входной поток, который заканчивается действительным токеном доступа, который затем сохраняется в NSUserDefaults для использования в следующем приложении.

Если у меня уже есть токен доступа к файлу в моем didFinishLaunchingWithOptions, тогда я предполагаю счастливый путь и асинхронно открываю сеанс входа в систему, используя токен доступа, который я нашел в файле при открытии приложения. Если токен доступа, который у меня есть в файле, чтобы открыть сеанс с, является законным, тогда не отображается UX. Если токен доступа, который у меня есть в файле, является незаконным токеном доступа (например, сервер говорит, что он слишком старый), то мой открытый метод сеанса в моем делегате приложения, обнаружив это, отобразит надлежащий модальный входной поток.

Поскольку этот метод openSession выполняется асинхронно, вам может быть интересно, как будет работать ваш контроллер корневого представления, который нуждается в зарегистрированном пользователе, тем временем.

Ответ заключается в том, что он должен быть написан так, как будто он имеет зарегистрированного пользователя. Он должен предположить. Если он когда-либо запускает код, который не может выполнить или завершить выполнение успешно, потому что у него нет действительного токена доступа, тогда этот код должен инициировать пользовательский интерфейс входа в систему, если он еще не представлен (т.е. Проверка токена доступа на приложении открыта, к этому времени, уже предоставил пользователю модный интерфейс входа в систему).

Наконец, это переведенная версия потока входа в систему Facebook SDK. Например, если вы используете только свой SDK, вы никогда не будете взаимодействовать с NSUserDefaults, как я предлагаю. Я перевел свой поток в "пользовательскую реализацию" входа в удаленный API.