#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, которые шифруют конфиденциальную информацию для входа и тому подобное.
Комментарии:
1. Я только что прочитал об этом в справке, и это похоже на то, что мне нужно! Я предполагаю, что наряду с паролем вы также можете хранить другие виды информации в связке ключей?
2. Я сам не часто им пользовался, поэтому не могу дать окончательного ответа, но я почти уверен, что вы можете сохранить некоторую информацию о пользователе вместе с данными аутентификации. Если вы ищете пример, ознакомьтесь с образцом проекта из документации здесь .