gpt4 book ai didi

ios - 访问钥匙串(keychain)中的安全项目有时会在 iOS 中返回错误 -25308 (errSecInteractionNotAllowed)

转载 作者:行者123 更新时间:2023-12-01 16:29:01 30 4
gpt4 key购买 nike

我发现有时在尝试获取以前使用 Keychain 成功存储的安全项目时会出现该错误。 API。当我的设备中运行的应用程序处于后台状态并且我锁定了屏幕时,我发现了它。该设备没有设置锁定代码,这是我正在调用的函数:

+ (NSString *)findValueForKey:(NSString *)keyStr
{
NSString *valueStr = @"";

if ((keyStr != nil) && (![keyStr isEqualToString:@""])) {
NSString *service = [[NSBundle mainBundle] bundleIdentifier];

NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService : service,
(__bridge id)kSecAttrAccount : keyStr,
(__bridge id)kSecReturnData : (__bridge id)kCFBooleanTrue};

CFDataRef cfValue = NULL;
OSStatus results = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&cfValue);

if ([self checkIfNoError:results]) {
valueStr = [[NSString alloc] initWithData:(__bridge_transfer NSData *)cfValue encoding:NSUTF8StringEncoding];
}

else {
NSLog(@"%@", [self getErrorMessageForStatus:results]);
}
}

return valueStr;
}

并通过调用此方法存储该项目:
+ (BOOL)storeInKeychainWithKey:(NSString *)keyStr withValueStr:(NSString *)valueStr
{
if ((keyStr != nil) && (![keyStr isEqualToString:@""]) &&
(valueStr != nil) && (![valueStr isEqualToString:@""])) {

NSData *valueData = [valueStr dataUsingEncoding:NSUTF8StringEncoding];
NSString *service = [[NSBundle mainBundle] bundleIdentifier];

NSDictionary *secItem = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService : service,
(__bridge id)kSecAttrAccount : keyStr,
(__bridge id)kSecValueData : valueData};

CFTypeRef result = NULL;

OSStatus status = SecItemAdd((__bridge CFDictionaryRef)secItem, &result);

NSLog(@"%@", [self getErrorMessageForStatus:status]);

return [self checkIfItem:status];
}
else {
return NO;
}
}

我认为在 iOS 中总是可以访问钥匙串(keychain)项目...这个 post似乎是关于类似的东西,但我不确定它是否已被弃用以及我应该如何解决这个问题......

提前致谢

最佳答案

我们有同样的问题,@AppsDev,你提到的帖子是准确的。我们通过将钥匙串(keychain)作为我们需要的东西的最后手段来解决这个问题,即使我们卸载/重新安装应用程序也是如此。

我们现在循环回应用程序默认值(在 Swift 3 中,这将是 UserDefaults.standard)以在安装生命周期未达到“卸载”阶段时保持该信息方便。

如果卸载,下次安装时我们会转到钥匙串(keychain)(根据定义,刚刚安装的应用程序不在后台,因此不会失败)。检索到数据后,我们刷新应用程序默认值,然后我们只使用应用程序默认值。

关于ios - 访问钥匙串(keychain)中的安全项目有时会在 iOS 中返回错误 -25308 (errSecInteractionNotAllowed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33218998/

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