3

アプリが起動したらすぐにログインを要求したくありません。代わりに、「必要に応じて」ログインするようにユーザーに促したいと思います。たとえば、ユーザーがログインを必要とするアプリの一部を操作した場合にのみ、ログイン プロンプトが表示されます。

いくつか質問があります。

1) 以前にこの種の「怠惰な」ログインをしたことがある人はいますか。管理がむずかしい?ユーザーにとって紛らわしい経験ですか?

2) これを実装する最良の方法は何ですか?

ユーザーのログインを求める LoginViewController があります。このView Controllerを、その時点で表示されているView Controllerのビューの上にモーダルに表示したいと思います。

また、結合を最小限に抑えるために、他のさまざまなView ControllerがLoginViewControllerについて何も知らないようにしたいと思います。

理想的には、ログインに関係するものをすべて管理する LoginManager シングルトンが必要です。

次に、たとえば、ランダム ビュー コントローラー MyCoolViewController が特定の機能 (ボタンが押されるなど) に対してユーザー認証を必要とする場合、次のように呼び出すことができます。

- (void)buttonPressed:(id)sender {
    // If the user isn't logged in, show the login modal view on top of this VC
    if (![[LoginManager sharedManager] requireLoginWithViewController:self]) {
        return;
    }

    // Code that is protected by login
}

しかし、ログインが成功したかどうかを知る方法が必要です。これは、委譲またはコールバックによって解決できますが、ビュー コントローラーはそれぞれ、避けたい LoginController について何かを知っていることを意味します。

もう 1 つの方法は、UIViewController の ProtectedViewController サブクラスを作成して、すべてのビュー コントローラーをサブクラス化し、保護された機能にアクセスするための機能を提供し、必要に応じてログイン コントローラーを提示することです。

これらのアプローチについてどう思いますか?もっと理にかなっているものは他にありますか?「遅延」ログインに関するあなたの経験をぜひお聞かせください。

4

3 に答える 3

0

最終的に、ログインの実装の詳細にとらわれずに、ネットワーク マネージャーのコンシューマーからログインの詳細を隠す実装を選択することになりました。

私は3つのクラスでこれを達成しました:

  • NetworkManager (Web サービスへのシングルトン インターフェイス)
  • LoginManager (シングルトン ログイン コーディネーター)
  • LoginViewController (ログイン ボタンなどのログイン インターフェイスを表示する vc)

NetworkManager には、アプリ固有のログイン UI の処理を​​担当する loginDelegate があります。この場合、LoginManager シングルトンはこの loginDelegate です。

一般的な流れは次のとおりです。

  1. アプリは、NetworkManager を介してサーバーからデータを要求します
  2. リクエストの認証が失敗した場合、NetworkManager は loginDelegate に何らかのログイン フローを処理する必要があることを伝えます。
  3. 次に、LoginManager は、ウィンドウの rootViewController にモーダルに LoginViewController を提示します。
  4. ログインボタンが押されると、LoginViewController は LoginManager にログインしたいことを伝えます。
  5. 次に、LoginManager は NetworkManager を使用して実際のサーバー ログインを実行します。
  6. ログインが完了すると、コールバック ブロックを介して LoginManager に通知されます。成功した場合、LoginViewController は閉じられます。

LoginManager と LoginViewController の間には多少のやり取りがありますが、これにより、ログイン フローに関する知識がなくても NetworkManager を使用できます。さらに、NetworkManager はアプリ固有のログイン ビジュアルについて何も知らないため、別のアプリで再利用できます (したがって、デリゲートが必要です)。

通常、委任はシングルトンでは使用されませんが、この場合は問題ないと思います。なぜなら、ログイン デリゲートは 1 つだけであるべきだからです (理論的には、アプリにログインするためのフローが 1 つあるはずです)。

これは最初のアプローチであり、時間の経過とともに改善される可能性があります。おそらく、通知を使用して、ユーザーがログインしたことをアプリの残りの部分に通知することが、次の良いステップになる可能性があります。

于 2013-04-13T22:14:04.247 に答える