Jestem bardzo początkującym programistom iOS, więc wybaczcie mi, jeśli to jest pytanie dla początkujących. Mam prosty mechanizm uwierzytelniania dla mojej aplikacji, który pobiera adres e-mail użytkownika i hasło. Mam też przełącznik, który mówi "Zapamiętaj mnie". Jeśli użytkownik przełącza to ustawienie, chcę zachować adres e-mail/hasło, aby te pola mogły być automatycznie wypełniane w przyszłości.Zapisywanie adresu e-mail/hasła do pęku kluczy w systemie iOS
Zrobiłem to do pracy z zapisaniem do pliku plist, ale wiem, że to nie jest najlepszy pomysł, ponieważ hasło nie jest zaszyfrowane. Znalazłem przykładowy kod do zapisania w pęku kluczy, ale szczerze mówiąc, jestem trochę zagubiony. W przypadku poniższej funkcji nie wiem, jak ją nazwać i jak ją zmodyfikować, aby zapisać również adres e-mail.
Zgaduję zadzwonić byłoby: saveString(@"passwordgoeshere");
Dziękuję za wszelką pomoc !!!
+ (void)saveString:(NSString *)inputString forKey:(NSString *)account {
NSAssert(account != nil, @"Invalid account");
NSAssert(inputString != nil, @"Invalid string");
NSMutableDictionary *query = [NSMutableDictionary dictionary];
[query setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass];
[query setObject:account forKey:(id)kSecAttrAccount];
[query setObject:(id)kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];
OSStatus error = SecItemCopyMatching((CFDictionaryRef)query, NULL);
if (error == errSecSuccess) {
// do update
NSDictionary *attributesToUpdate = [NSDictionary dictionaryWithObject:[inputString dataUsingEncoding:NSUTF8StringEncoding]
forKey:(id)kSecValueData];
error = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)attributesToUpdate);
NSAssert1(error == errSecSuccess, @"SecItemUpdate failed: %d", error);
} else if (error == errSecItemNotFound) {
// do add
[query setObject:[inputString dataUsingEncoding:NSUTF8StringEncoding] forKey:(id)kSecValueData];
error = SecItemAdd((CFDictionaryRef)query, NULL);
NSAssert1(error == errSecSuccess, @"SecItemAdd failed: %d", error);
} else {
NSAssert1(NO, @"SecItemCopyMatching failed: %d", error);
}
}
Naprawiłem @ kodu anomii do pracy z ARC i umieścić go na Github (I związana z tym odpowiedź i wymienić swoją użytkownika w obu plikach, ale jeśli chcesz dalsze przyznawanie daj mi znać). Zmieniłem trochę formatowanie i uczyniłem nazwy metod nieco bardziej ogólnymi. https://github.com/jeremangnr/JNKeychain – jere