检索钥匙串中的数据,用于在ios中不起作用的特定服务



我将用户名和密码存储在钥匙串中。 这是我的代码

保存和提取

我正在尝试使用服务存储多个用户名和密码

单击登录按钮时

[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 开始,卸载应用时,应用的钥匙串条目将被删除。在苹果开发者论坛中得到确认。

最新更新