iPhone:将用户数据保存在plist,SQLite或cookie中?

dco*_*bus 5 iphone user-data ios

我的应用程序(像大多数人一样)将利用许多远程服务......所以当用户验证自己时,我需要存储他们的用户名和密码(或某种标志),这样他们就不需要对所有人进行身份验证该应用程序.

存储此用户数据的最佳/最快/最简单的位置在哪里?

Lee*_*hro 11

您仍然可以使用NSUserDefaults存储用户名和服务器URL,但如果您要存储密码,则最好使用Keychain服务.它是基于C的安全框架的一部分,并且有一个很好的包装类SFHFKeychainUtils,为它提供一个Objective-C API.

要保存:

NSString *username = @"myname";
NSString *password = @"mypassword";
NSURL *serverURL = [NSURL URLWithString:@"http://www.google.com"];

[SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:[serverURL absoluteString] updateExisting:YES error:&error]
Run Code Online (Sandbox Code Playgroud)

恢复:

NSString *passwordFromKeychain = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:[serverURL absoluteString] error:&error];
Run Code Online (Sandbox Code Playgroud)


Ray*_*eck 8

NSUserDefaults的

像这样保存:

[[NSUserDefaults standardUserDefaults] setObject:username    forKey:@"username"];
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

像这样取:

    NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"];
    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];
Run Code Online (Sandbox Code Playgroud)

  • 是 - 不要使用用户默认值来保存/检索密码,使用钥匙串服务作为'sudo rm -rf'建议. (3认同)

sud*_*-rf 5

将安全数据存储在不安全的文件中(用户默认值)通常不是一个好主意.查看Keychain Services,它可以加密敏感的登录信息等.

http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html