繁体   English   中英

iOS 中的钥匙串真的有效吗?

[英]Does the Keychain in iOS actually work?

我一直在尝试使用 iOS 中的钥匙串来存储一些小信息——密码字符串、OAuth 令牌等。我正在使用 Apple 在此处提供的 KeychainItemWrapper 示例代码: Z5E056C500A1C407A7110B5。库/ios/#samplecode/GenericKeychain/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007797

我发现它非常有问题,有时它可以工作,有时我的应用程序在尝试将字符串值存储在钥匙串中时崩溃。 特别是当某些东西已经设置时,其他时候。 完全相同的调用工作得很好,错误发生在实际设备上。 不在模拟器中。

我通常写入钥匙串的方式是这样的:

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"password" accessGroup:nil];
[wrapper setObject:thePasswordString forKey:(id)kSecValueData];
[wrapper release];

所以,我想知道的是:我做错了什么,是苹果公司的示例代码,还是实际的底层 iOS 钥匙串 API 坏了?

我发现 SFHFKeychainUtilities 是一个非常有用的包装器。 它提供了一个非常简单的 API,如下所示:

[SFHFKeychainUtils storeUsername:usernameInput andPassword:passwordInput forServiceName:@"foo" updateExisting:TRUE error:&error];

这是一个有用的教程: http://gorgando.com/blog/tag/sfhfkeychainutils

一直为我工作。

祝你好运!

我对这个 Wrapper 有很多问题。 我不知道为什么,但是您必须使用相同的标识符保存到 KSecAttrAccount,然后才能保存 kSecValueData。

像这样保存:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyIdentifier" accessGroup:nil];

[keychain setObject:@"MyIdentifier" forKey:(id)kSecAttrAccount];

[keychain setObject:[passwordFirst text] forKey:(id)kSecValueData];

Apple 的KeychainItemWrapper确实有效 - 我在我的一个应用程序中使用它来存储 IAP 数据。 但是,我发现如果您的设备越狱,它似乎并不总是有效。 不确定设备越狱时钥匙串会发生什么,但我的一些 beta 测试人员报告说,当他们的设备越狱时,IAP 并不总是适用。

您似乎正在正确使用 class 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM