2013-03-12 1 views
11

여기 내 아이폰 앱으로 코드에 노력하고있어 논리 흐름의 원격 API에 iOS 앱에서 사용자 로그인하기 AFNetworking, Devises를 인증으로 사용하여 Rails API에 연결). auth_token은 로그인이 성공하면 키 체인에 저장됩니다. 내가 알 수없는 것은 위와 같이 동작하도록 앱을 설정하는 가장 좋은 방법입니다.올바른 흐름은

물론 사용자에게 좋을 경험을 원합니다. 토큰을 확인하고 로그인하려고 시도하는 동안 일종의 '로드 중'화면이 표시됩니다.

어떻게해야합니까? 어떤 뷰 컨트롤러를 AppDelegate의 rootviewcontroller로 설정해야하는지, 또는 사용자가 로그인 한 후에 어떻게 설정해야하는지 모르겠습니다. Facebook 앱에서 이것을 시도해 보았습니다. 그리고 이것을 열 때 빈 탐색 컨트롤러가 표시됩니다. 내 프로필보기가로드 된 것 같습니다. 그들은 뒤에서 무엇을하고 있으며 이것이 최선의 방법인가?

스토리 보드를 사용하고 있지 않습니다.

답변

9

RootViewController는 navigationController의 "SplashViewController"였고 멋진 로고, 활동 표시기를 보여 주며 인증 상태에 대한 사용자 정보를 제공합니다. 거기에 저장된 토큰을 검사하고 인증 구현을위한 논리를 유지합니다. 인증이 성공적이면 ShowUserController는 navigationController 스택으로 푸시하여 표시됩니다.

인증에 실패하면 LoginViewController가 모달로 표시됩니다. SplashViewController는 LoginViewController 대리자를 구현합니다.이 대리자는 사용자 이름과 암호를 SplashViewController에 전달하는 것 외에는 아무것도 수행하지 않습니다. 로그인에 성공하면 LoginViewController가 닫히고 사용자는 ShowUserController로 이동합니다.

+0

나는이 길로 갔다. 나는 응용 프로그램이로드 될 때 rootViewController를 설정하는 PathFinderViewController를 만들었습니다. 이것은 어디로 갈지를 확인합니다. 로그인해야하는 경우 로그인 화면을 모달로 표시하고 로그인을 시도합니다. 성공하면 로그인 화면을 닫고 rootViewController를 UserViewController로 변경합니다. PathFinder가 Auth_Token이 유효하다면 rootViewController를 UsersViewController로 변경합니다. 감사! – sbonkosky

+0

@sbonkosky 기꺼이 도와 드리겠습니다. :). 어떻게 흐름도를 만들었습니까? – Anupdas

+0

[LucidChart] (http://www.lucidchart.com/)를 사용했습니다. – sbonkosky

4

성공적으로 로그인 한 후 사용자에게 표시되는 루트 컨트롤러로 앱을 시작한 다음 모달 호출로 로그인보기/컨트롤러를 맨 위에 겹쳐서 표시하십시오. 인증에 성공하면 사용자는 이미 원하는 위치에있게되고 그렇지 않으면 로그인 레이어를 모달 위에 호출합니다. 인증이 완료되면 더 이상 로그인보기가 필요하지 않습니다.

+0

사용자가 느린 데이터 연결을 사용하고 auth_token이 유효한지 확인하는 데 몇 초가 걸리는 경우 어떻게해야합니까? 그 동안 내가 무엇을 보여줄 수 있습니까? – sbonkosky

+0

원하는 모달보기를 지정할 수 있습니다. 토큰 유효성 검사가 완료되면 회 전자와 일부 텍스트가있는 모달보기를 표시하십시오. 예를 들어 인증이 완료 될 때까지 회 전자가있는 모달 "로드 중 ..."보기보다는 루트 컨트롤러를 설치하십시오. 좋지 않은 경우 회 전자보기를 닫고 로그인보기를 표시하십시오. 괜찮 으면 회 전자보기를 닫으십시오. 루트보기 컨트롤러에서 모든 것을 제어하면 훨씬 쉽게 생활 할 수 있습니다. –

+0

이것은 Facebook의 SDK 작업을 본 것입니다. –

2

@Owen Hartnett의 답변은이 텍스트가 주석에 맞지 않으므로 정교하게 설명하십시오. 이것은 Facebook의 SDK 작업을 본 것입니다. 유일한 로그인 메커니즘으로 Facebook iOS SDK를 사용하는 앱을 만드는 경우 작동 방식은 다음과 같습니다.

내 앱 대리인의 didFinishLaunchingWithOptions 메서드에서 먼저 "이미 파일에 있습니다"라는 액세스 토큰을 확인합니다 , NSUserDefaults. 찾지 못하면 하나를 가져와야하므로 내 앱 대리인이 즉시 유효한 액세스 토큰으로 끝나는 모달 로그인 흐름을 실행 한 다음 NSUserDefaults에 저장하여 다음 앱을 사용할 수 있도록해야합니다.

didFinishLaunchingWithOptions에 이미 파일에 액세스 토큰이있는 경우 응용 프로그램을 열 때 파일에서 찾은 액세스 토큰을 사용하여 행복 경로를 가정하고 비동기 적으로 "로그인 한 사용자 세션"을 엽니 다. 세션에서 파일을 여는 액세스 토큰이 합법적 인 경우 UX가 표시되지 않습니다. 파일에있는 액세스 토큰이 불법적 인 액세스 토큰 (예 : 서버가 너무 오래되었다고 말하면) 인 경우, 내 응용 프로그램 대리인의 내 공개 세션 메서드에서이를 발견하면 적절한 모달 로그인 흐름이 표시됩니다.

이 openSession 메서드는 비동기 적으로 실행되기 때문에 로그인 한 사용자가 필요한 루트보기 컨트롤러가 그동안 작동 할 것인지 궁금 할 수 있습니다.

답변은 로그인 한 사용자가있는 것처럼 작성해야한다는 것입니다. 그것은 가정해야합니다. 유효한 액세스 토큰이 없기 때문에 실행 또는 실행이 불가능한 코드를 실행하면 해당 코드는 로그인 UI 을 표시해야합니다. 아직 표시되지 않은 경우 (즉, 앱의 액세스 토큰 검사가 이번에는 이미 사용자에게 모달 로그인 UI가 제공되었습니다.)

마지막으로, Facebook SDK 로그인 흐름의 번역 버전입니다. 예를 들어 SDK 만 사용하는 경우 NSUserDefaults과 인터페이스하지 않을 것입니다. 저는 그들의 흐름을 원격 API에 로그인하는 "맞춤 구현"으로 번역했습니다.

관련 문제