iPhone: сохранить пользовательские данные в plist, SQLite или cookie?

#iphone #ios #user-data

#iPhone #iOS #пользовательские данные

Вопрос:

Мое приложение (как и большинство) будет использовать множество удаленных сервисов… итак, когда пользователь аутентифицирует себя, мне нужно сохранить его имя пользователя и пароль (или какой-то флаг), чтобы ему не приходилось проходить аутентификацию по всему приложению.

Где лучшее / быстрое / простое место для хранения этих пользовательских данных?

Ответ №1:

Вы все еще можете сохранить имя пользователя и URL-адрес сервера с помощью NSUserDefaults, но службы Keychain services — лучшая идея, если вы сохраняете пароль. Это часть платформы безопасности на основе 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:amp;error]
  

Для восстановления:

 NSString *passwordFromKeychain = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:[serverURL absoluteString] error:amp;error];
  

Комментарии:

1. У меня есть проект, который использует общую библиотеку между OSX и iOS. Мое управление входом в систему в основном содержится в этой общей библиотеке. Я удалил #import <UIKit /UIKit.h> из файла заголовка, и это отлично компилируется как для OSX, так и для iOS. ** Я еще не тестировал клиент OSX. 1 за повторно используемый код.

Ответ №2:

NSUserDefaults

Сохранять следующим образом:

 [[NSUserDefaults standardUserDefaults] setObject:username    forKey:@"username"];
[[NSUserDefaults standardUserDefaults] setObject:password forKey:@"password"];
[[NSUserDefaults standardUserDefaults] synchronize];
  

Извлекать вот так:

     NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"];
    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];
  

Комментарии:

1. И это автоматический объект приложения, который был разработан именно для этой цели?

2. Да, NSUserDefaults предназначены для хранения одноразовых значений, связанных с пользователем.

3. да — не используйте пользовательские настройки по умолчанию для сохранения / извлечения паролей, используйте службы связки ключей, как предлагает ‘sudo rm -rf’.

Ответ №3:

Хранение защищенных данных в небезопасном файле (пользовательские настройки по умолчанию) обычно не является хорошей идеей. Посмотрите на службы Keychain, которые шифруют конфиденциальную информацию для входа и тому подобное.

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

Комментарии:

1. Я только что прочитал об этом в справке, и это похоже на то, что мне нужно! Я предполагаю, что наряду с паролем вы также можете хранить другие виды информации в связке ключей?

2. Я сам не часто им пользовался, поэтому не могу дать окончательного ответа, но я почти уверен, что вы можете сохранить некоторую информацию о пользователе вместе с данными аутентификации. Если вы ищете пример, ознакомьтесь с образцом проекта из документации здесь .