2017-09-29 8 views
1

Alamofireを使用してAPIと相互作用するiOSを作成しており、ほとんどのリクエストでトークンが必要です。 MVCパターンを使用してアプリケーションを構築しましたが、うまくいきましたが、APIを統合しようとしたときに問題が発生しました。ビューコントローラ/モデルからアクセスできるように、トークンをどのように共有/保存する必要がありますか?私はシングルトンやUserDefaultsを使用することについて、かなり読んで、否定的な意見を見つけましたが、まだ簡単な答えに遭遇していません。これは簡単な答えがないかもしれない非常に広範な質問であると理解していますが、私はこれにはかなり新しく、誰かが私を正しい方向に向けるのを助けることができるのだろうかと思っていました。ありがとう!iOSアプリケーションにトークンを保存するためのベストプラクティス

+0

これは役に立ちますか? https://stackoverflow.com/questions/16795506/storing-authentication-tokens-on-ios-nsuserdefaults-vs-keychain – Jon

+0

@Matthew Harriesは、セキュリティ目的のためにUserDefaultsにトークンを保存することはありません。そのためにAppleキーチェーンを使用できます。 UserDefaultsは重要でない情報を保存するために使用されます。 –

答えて

2

ビューコントローラでこのトークンが必要な場合は、MVCが壊れています。 View Controllerがネットワークと直接通信する理由はありません。それはモデルレイヤーで処理する必要があります。ビューコントローラは、画面上にある間にビューを調整します。それは他のことをしません。

あなたのトークンはモデルに保存されます。ビューコントローラはどのようにモデルにアクセスしますか?それはあなたの経験レベルに依存します:

  • あなたはココアの開発にかなり新しいしている場合(実際に、それはシングルトンではないのですけれども、「シングルトン、」;それだけstatic let shared財産です)、共有インスタンスを使用します。このパターンは、何十年もの間、Cocoa開発者によって非常にうまく使用されてきました。私たちはそれを使う理由があります。それだけで動作し、あなたはそれと戦う必要はありません。しかし、それには次のオプションがあります:

  • 実際に共有インスタンスの問題に遭遇するほどのiOS経験がある場合(通常は単体テストやコード再利用に関係することがあります)あなたは、近年人々が適用している(そして時には発明している)他の多くのパターンすべてについて意見を述べるのに十分なことを知っています。しかし、これらのより複雑なパターンに飛び乗ることは、私の意見では、新しい開発者のための良いアプローチではありません。彼らは、Appleが私たちの仕事の意図から離れてしまう傾向があります(特に、Storyboardsを使用しないことを前提としており、AppleはStoryboardsを非常に難しくしています)。 Appleのガイダンスに反する理由はありますが、それは必ずしも正しいとは言えず、新しいパターンのいくつかは非常に興味深いものです。しかし、あなたがCocoaアプリケーションの開発についてAppleよりも多くを知っていることを決める前に、あなたがいくつかの経験があるまで待ってください。

トークンをメモリに保存する必要がある場合は、完了です。それを維持する必要があり、それが機密扱いと考えられる場合、正しい場所はKeychainです。ラッパーを使用します。 Keychain APIは説明を超えて恐ろしいです。すべてのラッパーが行います。最近ではKeychainAccessが人気がありますが、実際にはいずれも問題ありません。

NSUserDefaultsとの主な問題は、誰かが電話を盗んで脱獄すると、キーチェーンよりもNSUserDefaultsを読みやすくなります。ポリシーの問題として、機密情報をNSUserDefaultsに入れないでください。

関連する問題