我目前在iOS KeyChain中存储用户名(电子邮件)和电子邮件和密码的盐渍散列。我正在使用ARC'ified版本号为here。iOS KeyChain不从后台检索值
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];
,我又回到了keychainwrapper的非ARC版本,但我仍然得到同样的结果。我将不胜感激这方面的任何反馈。这只是我用户的一小部分,但这是我想解决的问题,不用担心。提前致谢。
此外,我所有的背景工作都是在backgroundTask中设置的,以防止事情超时。我对围绕钥匙链的工作没有任何问题,但我不会让事情继续下去,直到我的令牌被填满。
编辑 我已经找出了我的问题,他们的keychain没有从背景中检索值。我会在下面发表答案并接受它,因为我觉得这个问题以后可能对其他人有价值。
谢谢!这非常有帮助。 –
很高兴我能帮到你。它让我困惑很长时间。 –
非常感谢你分享这个! – pxlshpr