#iphone #objective-c
#iPhone #objective-c
Вопрос:
Я вижу во многих приложениях, что вам нужно войти в приложение только один раз, а затем при следующем открытии приложения вам не нужно снова вводить имя пользователя и пароль. Как я могу это сделать с помощью SFHFKeychainUtils?
Ответ №1:
Вы уже в значительной степени ответили на свой вопрос. Вы можете сохранить учетные данные в связке ключей приложения, используя оболочку SFHFKeychainUtils. При загрузке приложения оно проверяет, есть ли пароль. Если нет, предложите пользователю войти в систему и соответствующим образом сохранить имя пользователя и пароль.
// Application Loads...
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
NSString *username = [standardDefaults stringForKey:@"kApplicationUserNameKey"];
if (username) {
NSError *error = nil;
NSString *password = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:@"com.company.app" error:amp;error];
// Check password...
} else {
// No username. Prompt the user to enter username amp; password and store it
username = @"userEnteredUsername";
NSString *password = @"userEnteredPassword";
[standardDefaults setString:username forKey:@"kApplicationUserName"];
NSError *error = nil;
BOOL storeResult = [SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:@"com.company.app" updateExisting:YES error:amp;error];
}
Очевидно, что это неполно и организовано неподходящим образом, но вы должны быть в состоянии понять основной поток.
Комментарии:
1. проблема в том, что SFHF требуется имя пользователя, чтобы проверить, существует ли пароль с этим именем пользователя … итак, как мне обойти это
2. Вы могли бы использовать постоянное имя пользователя. Также, для дальнейшего использования, поясните, с чем именно у вас возникли проблемы. В вашем исходном сообщении вы ссылаетесь на схему имени пользователя / пароля.
3. да, на самом деле это правильно.. на странице входа в систему мы всегда видим правильные имя пользователя и пароль… итак, в этом случае вы предлагаете жестко закодировать имя пользователя?
4. Я не понимаю, что вам нужно сейчас… Не могли бы вы, пожалуйста, прояснить, с чем у вас возникли проблемы? С помощью SFHFKeychainUtils вы можете сохранить имя пользователя и пароль. Если ваше приложение собирается каким-либо образом использовать имена пользователей, они должны быть сохранены там. Если нет, и будет просто ввод пароля, используйте постоянное имя пользователя.
5. Хорошо .. представьте, что вы запускаете приложение в первый раз, у вас есть два текстовых поля, имя пользователя и пароль, постоянное значение равно null. Я ввожу эти два поля и сохраняю имя пользователя / пароль в связке ключей. При следующем запуске приложения коду необходимо проверить постоянное значение (то, что вы здесь называете именем пользователя).. которое равно нулю. Вы сказали использовать константу. Если это так, то при самом первом запуске приложения пользователем .. оно уже должно знать, каково его имя пользователя?
Ответ №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. Учетные данные не должны храниться в
NSUserDefaults
; они должны храниться в безопасном месте, таком как связка ключей.2. Полезно знать, только что нашел статью, в которой говорится, что пользовательские настройки по умолчанию сохраняются открытым текстом в файле plist, который синхронизируется при выполнении резервного копирования. Спасибо Дилану.