Pet*_*řák 8 iphone keychain ios
假设以下情况:
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly辅助功能的Keychain项目.现在,钥匙串项目不应该是可访问的,因为设备尚未解锁.我该如何正确检查这种情况?
注意:在我的情况下,存储在钥匙串中的项目的存在确定应用程序是否"活动",因此我需要一些东西来尽快停止此检查,否则我的应用程序将认为它不活动(值不能是阅读)并执行初始化步骤...
我在我的应用程序中遇到了同样的情况,这里是我如何检查钥匙串是否可用(objective-c 代码):
+ (BOOL)isKeychainAvailable {
NSString *testVal = @"testVal";
NSString *testKey = @"testKey";
[JNKeychain saveValue:testVal forKey:testKey];
NSString *validatedValue = [JNKeychain loadValueForKey:testKey];
[JNKeychain deleteValueForKey:testKey];
return (validatedValue == testVal);
}
Run Code Online (Sandbox Code Playgroud)
我基本上在钥匙串中保存一个值并尝试再次读取它。如果它与我刚刚写的不一样,这意味着钥匙串不可用,这也意味着手机没有通过第一次解锁,因为钥匙串应该在第一次解锁后可用,感谢选项kSecAttrAccessibleAfterFirstUnlock。
如果应用程序在后台启动并且钥匙串不可用,我在这种情况下最终做的是终止应用程序:
- (void) methodStartedInBackgroundThatNeedsKeychain {
if (!JNKeychain.isKeychainAvailable && [UIApplication sharedApplication].applicationState != UIApplicationStateActive) {
exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
注意力!请注意,exit(0)当应用程序处于前台模式时,Apple 强烈不鼓励使用,这就是为什么我确保只在后台使用[UIApplication sharedApplication].applicationState != UIApplicationStateActive. 这是 Apple 关于该主题的 QA 讨论:https : //developer.apple.com/library/archive/qa/qa1561/_index.html
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |