11

iPhoneアプリにコーディングしようとしているロジックフローは次のとおりです。

ここに画像の説明を入力してください

これを実現するための技術を理解していると思います(AFNetworkingを使用し、認証としてDeviseを使用してRails APIに接続します)。ログインが成功すると、auth_tokenはキーチェーンに保存されます。私が理解できないのは、上記のように動作するようにアプリを設定するための最良の方法です。

もちろん、ユーザーにとって良い体験をしたいので、トークンをチェックしてログインしようとすると、ある種の「ロード」画面が表示される可能性があります。

これを達成するにはどうすればよいですか?AppDelegateでrootviewcontrollerとして設定する必要があるビューコントローラー、またはユーザーがログインした後に設定する方法がわかりません。Facebookアプリでこれを試しましたが、開くと空白のナビゲーションコントローラーが表示されます。どうやら、私の縦断ビューが読み込まれます。彼らは舞台裏で何をしていますか、そしてこれは行くための最良の方法ですか?

ストーリーボードを使用していません。

4

3 に答える 3

9

私は同様のものを実装しました。RootViewControllerはnavigationControllerの「SplashViewController」であり、素敵なロゴ、アクティビティインジケーターを表示し、認証ステータスに関するユーザー情報を提供します。そこに保存されているトークンをチェックし、認証を実装するためのロジックを保持しています。認証が成功すると、navigationControllerスタックにプッシュすることでShowUserControllerが表示されます。

認証が失敗した場合、LoginViewControllerはモーダルで表示されます。SplashViewControllerは、LoginViewControllerのデリゲートを実装します。これは、ユーザー名とパスワードをSplashViewControllerに渡すだけです。ログインに成功すると、LoginViewControllerは閉じられ、ユーザーはShowUserControllerに誘導されます。

于 2013-03-12T02:10:52.077 に答える
4

ユーザーが正常にログインした後に表示されるルートコントローラーを使用してアプリを起動し、モーダル呼び出しを使用してログインビュー/コントローラーを上に重ねます。認証が成功した場合、ユーザーはすでに目的の場所にいることになります。そうでない場合は、ログインレイヤーをモーダルに呼び出します。認証されると、ログインビューは不要になります。

于 2013-03-12T02:59:42.010 に答える
2

このテキストはコメントに収まらないため、@OwenHartnettの回答について詳しく説明します。これが私がFacebookのSDKが機能するのを見た方法です。Facebook iOS SDKを唯一のログインメカニズムとして使用するアプリを作成する場合、その動作は次のようになります。

私のアプリデリゲートのdidFinishLaunchingWithOptions方法では、最初に「すでにファイルにある」アクセストークンをチェックしますNSUserDefaults。見つからない場合は、取得する必要があるため、アプリデリゲートにモーダルログインフローをすぐに起動させます。このフローは、有効なアクセストークンで終了し、NSUserDefaults次のアプリを開くときに使用するために保存されます。

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

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

答えは、ログインしているユーザーがいるかのように書く必要があるということです。想定する必要があります。有効なアクセストークンがないために実行できない、または正常に実行を終了できないコードを実行した場合、そのコードがまだ表示されていない場合は、そのコードがログインUIをトリガーする必要があります(つまり、この時点でアプリが開いているときにアクセストークンをチェックします) 、すでにモーダルログインUIをユーザーに提示しています)。

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

于 2014-02-25T18:26:42.353 に答える