我将用户名和密码存储在钥匙串中。 这是我的代码
保存和提取
我正在尝试使用服务存储多个用户名和密码
单击登录按钮时
[keychain setObject:@"facebookLogin" forKey:(id)kSecAttrService];
[keychain setObject:username forKey:(id)kSecAttrAccount];
[keychain setObject:password forKey:(id)kSecValueData];
[keychain setObject:@"appLogin" forKey:(id)kSecAttrService];
[keychain setObject:username forKey:(id)kSecAttrAccount];
[keychain setObject:password forKey:(id)kSecValueData];
单击显示按钮时
NSLog(@"%@", [keychain objectForKey:(id)kSecAttrAccount]);
NSLog(@"%@", [keychain objectForKey:(id)kSecValueData]);
如何获取为Facebook登录和应用程序登录存储的用户名和密码?
我想存储饼干的价值。
[keychain setObject:@"cookieString" forKey:(id)kSecAttrService];
[keychain setObject:myCookie forKey:(id)kSecValueData];
这是存储值的正确方法吗?
任何帮助感谢...
这应该有效:
将项目存储到钥匙串:
KeychainItemWrapper *login = [[KeychainItemWrapper alloc] initWithIdentifier:@"login" accessGroup:nil];
[wrapper setObject:username1 forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:password1 forKey:(__bridge id)kSecValueData];
[wrapper setObject:kSecAttrAccessibleAlwaysThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];
KeychainItemWrapper *facebookLogin = [[KeychainItemWrapper alloc] initWithIdentifier:@"facebooklogin" accessGroup:nil];
[wrapper setObject:username2 forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:password2 forKey:(__bridge id)kSecValueData];
[wrapper setObject:kSecAttrAccessibleAlwaysThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];
从钥匙串检索项目:
// Create respective KeychainItemWrapper objects with identifiers you want to retrieve from
KeychainItemWrapper *login = [[KeychainItemWrapper alloc] initWithIdentifier:@"login" accessGroup:nil];
NSData *passwordData1 = [login objectForKey:(__bridge id)kSecValueData];
NSString *passwordString1 = [[NSString alloc] initWithData:passwordData1 encoding:NSUTF8StringEncoding];
NSLog(@"%@", passwordString1);
KeychainItemWrapper *facebookLogin = [[KeychainItemWrapper alloc] initWithIdentifier:@"facebooklogin" accessGroup:nil];
NSData *passwordData2 = [facebookLogin objectForKey:(__bridge id)kSecValueData];
NSString *passwordString2 = [[NSString alloc] initWithData:passwordData2 encoding:NSUTF8StringEncoding];
NSLog(@"%@", passwordString2);
使用initWithIdentifier
根据需要存储不同类别的项目。您可以选择包含或省略kSecAttrService
,就像您在问题中使用的那样。 initWithIdentifier
就够了,很好。
注意
在这里,kSecAttrAccessible
非常重要,因为钥匙串项目具有不同级别的访问安全性。如果您的手机启用了 touchId/密码,请使用此常量(kSecAttrAccessAlwaysThisDeviceOnly(从任何地方访问钥匙串项目,即无需解锁设备。
从 iOS 10.3 beta 2 开始,卸载应用时,应用的钥匙串条目将被删除。在苹果开发者论坛中得到确认。