【发布时间】:2012-05-19 04:39:49
【问题描述】:
我目前将用户名(电子邮件)以及电子邮件和密码的加盐哈希值存储在 iOS KeyChain 中。我正在使用 here 找到的 ARC'ified 版本。
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
当我需要在应用程序处于活动状态时为我的网络调用提取令牌时,这一切都很好。它适用于从干净的启动登录,以及整个网络调用。当应用程序在后台时,问题就开始了。
请记住,这只是偶尔发生,我还没有将其归结为特定的 iOS 版本或设备。
用户旅行了一个位置(区域监控),我想用他们的状态更新服务器。我尝试将令牌从钥匙串中拉出,就像我对其他所有网络调用所做的那样,并更新状态。但对于一些用户来说,价值为零。没有它,我无法更新网络内容。为什么这对大多数人有效,但对一小部分人无效?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
我已经回到钥匙链包装器的非 ARC 版本,但我仍然得到相同的结果。我将不胜感激对此的任何反馈。这只是我用户的一小部分,但这是我想解决而不是担心的问题。提前致谢。
另外,我所有的后台工作都设置在 backgroundTask 中,以防止事情超时。我对钥匙串周围的工作没有任何问题,但在我的令牌被填满之前我不会让事情继续进行。
编辑 我已经解决了他们的钥匙串没有从后台检索值的问题。我将在下面发布答案并接受它,因为我觉得这个问题以后可能对其他人有价值。
【问题讨论】:
标签: iphone ios background keychain lockscreen