3

私は .Net 開発者で、Xcode は初めてです。サーバー側のプロセスにWCFを使用しており、iPhoneアプリとWCFの間でJSONデータを送受信しています。ネイティブのiPhoneアプリで以下を実行したい:

  1. 登録とログイン画面
  2. ユーザーがログイン ボタンをクリックすると、JSON 形式で入力されたユーザー名とパスワードが WCF サービスに送信されて認証されます。ログインが有効な場合、WCF は有効なメンバー GUID とトークン文字列を返します。
  3. iPhone アプリはメンバー GUID とトークンを受け取り、それらを「永続変数」に格納します。認証されたユーザーの新しいビューを読み込みます。したがって、メンバーはすべての機能/ビューにアクセスできます。
  4. Iphone アプリと WCF の間でデータを投稿するたびに、そのメンバー GUID と変数からのトークンを使用して、WCF サービスがどのメンバーがデータを要求しているかを認識できるようにする必要があります。
  5. ユーザーがiPhoneをシャットダウンまたは再起動するたびに、アプリがメンバーGUIDを記憶できることを願っています。これにより、再度ログインする必要がなくなります。
  6. ユーザーがログアウト ボタンをクリックすると、変数がクリアされ、ログイン ビューに戻ります。

これがiPhoneアプリのログインプロセスの正しい方法であるかどうかわかりませんか?

既に WCF 認証を行って JSON を送り返していますが、メンバー GUID を保存する必要があります。誰かが正しい方向に向けてくれますか? 後で使用できる情報を保存するには、何を使用すればよいですか? 例は素晴らしいでしょう!

4

3 に答える 3

5

NSUserDefaults にとって完璧な種類のように思えます。次のように使用します。

NSUserDefaults *myUserDefaults = [NSUserDefaults standardUserDefaults];
[myUserDefaults setObject: @"the key" forKey: @"key"];

setInteger:forKey:や など、他の関数を使用してさまざまな種類のデータを設定することもできますsetValue:forKey:。データを呼び出すには、次の関数を使用します。

NSString *theKey = [myUserDefaults objectForKey:@"key"];

戻り値は、格納したオブジェクトになります。integerForKey:他のデータ型は、 や などの関数と同様に機能しvalueForKey:ます。

于 2012-08-12T01:05:12.707 に答える
4

アプリケーションのサンドボックスを尊重する必要があることを知っておく必要があります。つまり、デバイスに何かを「永続的に」保存することはできません。

通常、この種のロジック (トークンの保存など) は、そのデータをNSUserDefaults.

これNSUserDefaultsはアプリケーションのプロパティ リストであり、キーと値のペアとしてデータを格納できます。

たとえば、次のようにして何かを保存できます。

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:@"mylongtoken" forKey:@"com.myapp.apitoken"];
[ud synchronize];

アプリを削除すると、このデータも消えます。このデータは、アプリが App Store 経由で更新されると保持され、デバイス バックアップの一部として iTunes/iCloud にバックアップされます。

このプロパティ リストを iCloud と同期することもできますが、それについては、次の投稿をご覧ください: iCloud を使用して NSUserDefaults plist ファイルを同期できますか?

于 2012-08-12T01:22:53.780 に答える
1

実際、資格情報を保存している場合は、おそらくそれをキーチェーンに入れる必要があります。NSUserDefaults はデバイスから簡単にロードでき、平文で保存されます。

役立つはずの素敵なキーチェーン ユーティリティ ライブラリを次に示します: https://github.com/ldandersen/STUtils/tree/master/Security

次のように資格情報を保存できます。

[STKeychain storeUsername:@"username" andPassword:@"password" forServiceName:@"namespace" updateExisting:YES error:&error];

そして、次のように取得します。

NSString *password = [STKeychain getPasswordForUsername:@"username" andServiceName:@"namespace" error:&error];
于 2012-12-04T22:36:57.923 に答える