2013-03-12 3 views
11

ここで私は私のiPhoneアプリにコーディングしようとしている論理の流れだ:正しい流れ

enter image description here

私は私が使用して(これを達成するために専門的に理解して考えますAFNetworking、Devisesを認証として使用してRails APIに接続)。ログインが成功すると、auth_tokenはキーチェーンに保存されます。私が理解できないことは、上記のように振舞うように私のアプリを設定する最良の方法です。

私は経験がそう多分それはトークンをチェックし、それがある種の「読み込み」画面を示してログインしようとている間、当然のユーザーのために良いことにしたいです。

これを達成するにはどうすればよいですか?私はAppDelegateのrootviewcontrollerとしてどのView Controllerを設定すべきか、あるいはユーザーがログインした後にどのように設定すべきか分かりません。Facebookのアプリでこれを試してみました。それは、私のプロファイルビューが読み込まれているようです。彼らは舞台裏で何をしているのですか?これは最善の方法ですか?

私は、ストーリーボードを使用していません。私は同様のものを実装している

答えて

9

、RootViewControllerは、素敵なロゴを示す、活動の指標navigationControllerで「SplashViewController」だったとの認証ステータスに関するユーザ情報を提供します。そこに格納されたトークンと認証の実装をチェックするロジックを保持します。認証が成功した場合、ShowUserControllerはnavigationControllerスタックにプッシュすることで表示されます。認証が失敗である場合は

LoginViewControllerは、モーダルモードで表示されます。 SplashViewControllerはLoginViewControllerのデリゲートを実装しています。これは、ユーザー名とパスワードをSplashViewControllerに渡すだけです。正常にログインすると、LoginViewControllerは終了し、ユーザーはShowUserControllerに送られます。

+0

私はこのルートを行った。私はPathFinderViewControllerを作成して、アプリケーションのロード時にrootViewControllerを設定しました。これにより、どこに行くかがチェックされます。ログインする必要がある場合は、ログイン画面をモーダルに表示してログインを試みます。成功すると、ログイン画面を閉じてrootViewControllerをUserViewControllerに変更します。 PathFinderがAuth_Tokenが有効であると判断した場合、rootViewControllerをUsersViewControllerに変更するだけです。ありがとう! – sbonkosky

+0

@sbonkosky嬉しいことに:)。どのように流れ図を作成しましたか? – Anupdas

+0

私は[LucidChart](http://www.lucidchart.com/)を使用しました – sbonkosky

4
は、モーダル呼び出しで、上のログインビュー/コントローラレイヤ、それらが正常にログインした後に、ユーザが表示されます一つとして、ルートコントローラを使用してアプリを起動し

。認証が成功した場合、ユーザーはすでにどこにいても構いません。そうでなければ、ログインレイヤーをモーダルで上に呼び出します。認証されると、ログインビューはもう必要ありません。このテキストはコメントに収まらないので、@Owenハートネットの答えについては詳しく説明し

+0

しかし、ユーザーのデータ接続が遅く、auth_tokenが有効かどうかを確認するのに数秒かかる場合はどうすればよいですか?その間に何を表示するのですか? – sbonkosky

+0

好きなモーダルビューを置くことができます。トークンの検証が完了すると、スピナーとテキストを含むモーダル表示を解除します。たとえば、認証が完了するまで、スピンナーを持つモーダルの「読み込み中...」ビューよりも、ルートコントローラを配置します。悪い場合は、スピナービューを閉じ、ログインビューを表示します。それが良いのであれば、スピナービューを閉じるだけです。あなたのルートビューコントローラーからすべてを制御することで、あなたの人生はよりシンプルになります。 –

+0

これは私がFacebookのSDKの仕事を見た方法です。 –

2

。これが私がFacebookのSDKの仕事を見た方法です。

私のアプリデリゲートのdidFinishLaunchingWithOptionsメソッドでは、まず「既にファイル上にある」というアクセストークンがないかどうかをチェックします、NSUserDefaults。見つからなければ、私は1つを取得する必要があるので、私のアプリケーションの代理人はすぐに次のアプリを開くために使用するためにNSUserDefaultsに保存されている有効なアクセストークンで終了するモーダルログインフローを起動させる必要があります。

didFinishLaunchingWithOptionsのファイルにアクセストークンが既にある場合、私はアプリケーションパスを開いた時点で見つかったアクセストークンを使用して、幸せなパスを想定し、非同期的に「ログインしたユーザーセッション」を開きます。セッションを開くためにファイル上にあるアクセストークンが正当であれば、UXは表示されません。私がファイル上に持っているアクセストークンが不正なアクセストークンである場合(サーバーはそれが古すぎると言っています)、私のアプリケーションデリゲートの私のオープンセッションメソッドは、これを見つけると適切なモーダルログインフローを表示します。

このopenSessionメソッドは非同期で実行されるため、ログインしたユーザーを必要とするルートビューコントローラがその間にどのように機能するのか疑問に思うかもしれません。

答えは、ログインしたユーザーがいるかのように記述する必要があるということです。それは仮定する必要があります。有効なアクセストークンを持たないため、実行できないコードや実行に成功したコードを実行した場合、そのコードはログインUI を表示する必要があります。(アクセストークンのチェックは、今度はモーダルログインUIをユーザに提示しています)。

最後に、これはFacebook SDKログインフローの翻訳版です。たとえば、SDKのみを使用する場合は、私が提案するように、NSUserDefaultsとインターフェースすることはありません。私は、その流れをリモートAPIにログインする「カスタム実装」に変換しました。

関連する問題