gpt4 book ai didi

ios - 检查 iOS 设备首次解锁以确定使用 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 存储的项目是否可用

转载 作者:行者123 更新时间:2023-12-03 18:36:30 28 4
gpt4 key购买 nike

假设以下情况:

  1. 用户重新启动他/她的 iPhone。
  2. 用户允许设备锁定,不解锁。
  3. 服务器发送一个(静默)推送通知设备(或者任何唤醒应用程序的事情发生)后台,例如 Apple Watch 扩展请求数据等)。
  4. 应用唤醒并尝试访问使用 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 辅助功能存储的钥匙串(keychain)项。

现在,钥匙串(keychain)项目应该无法访问,因为设备尚未解锁。如何正确检查这种情况?

注意:就我而言,钥匙串(keychain)中存储的项目的存在决定了应用程序是否“事件”,因此我需要一些东西来尽快停止此检查,否则我的应用程序将假设它不活动(无法读取值)并执行初始化步骤...

最佳答案

我在我的应用程序中遇到了同样的情况,以下是我检查钥匙串(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);
}

我基本上在钥匙串(keychain)中保存一个值并尝试再次读取它。如果它与我刚刚写的不同,则意味着钥匙串(keychain)不可用,这也意味着手机尚未完成第一次解锁,因为由于选项 kSecAttrAccessibleAfterFirstUnlock<,钥匙串(keychain)在第一次解锁后应该可用。/.

在这种情况下我最终做的是终止应用程序(如果它在后台启动并且钥匙串(keychain)不可用):

- (void) methodStartedInBackgroundThatNeedsKeychain {
if (!JNKeychain.isKeychainAvailable && [UIApplication sharedApplication].applicationState != UIApplicationStateActive) {
exit(0);
}
}

注意!请注意,Apple 强烈反对在应用程序处于前台模式时使用 exit(0),这就是为什么我确保只使用 [UIApplication sharedApplication].applicationState != UIApplicationStateActive 在后台调用它。以下是 Apple 关于该主题的 QA 讨论:https://developer.apple.com/library/archive/qa/qa1561/_index.html

关于ios - 检查 iOS 设备首次解锁以确定使用 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 存储的项目是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40614486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com