SecItemAdd未提示触摸ID

时间:2016-01-07 13:49:10

标签: ios touch-id

我有一个奇怪的问题,SecItemAdd()似乎在iOS 8和9之间有所不同。对于iOS 8,将某些内容保存到安全区域将提示Touch ID身份验证(除非我已将kSecUseNoAuthenticationUI指定为@YES)。这就是我所期待的。但是,在iOS 9上,我似乎从来没有在SecItemAdd上获得Touch ID身份验证。

我意识到在8到9之间对属性进行了更改,现在不推荐使用kSecUseNoAuthenticationUI来支持kSecUseAuthenticationUI,但无论是否省略kSecUseAuthenticationUI,还是使用@YES指定它,我都不会收到提示。

应该 SecItemAdd()做什么?

以下是我正在尝试的代码片段:

CFErrorRef error = NULL;  
  SecAccessControlRef sacObject;  

  sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,  
       kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,  
       kSecAccessControlUserPresence, &error);  

  NSDictionary *attributes =  
  @{  
    (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,  
    (__bridge id)kSecAttrService: @"Zenbanx",  
    (__bridge id)kSecAttrAccount: tokenKey,  
    (__bridge id)kSecValueData: [tokenValue dataUsingEncoding:NSUTF8StringEncoding],  
    /  
    (__bridge id)kSecUseNoAuthenticationUI: @NO,  
    (__bridge id)kSecUseAuthenticationUI: @YES,  
    (__bridge id)kSecAttrAccessControl: (__bridge_transfer id)sacObject  
    };  

  OSStatus status = SecItemAdd((__bridge CFDictionaryRef) attributes, nil);

我的目标是让代码在iOS 8和9之间呈现相同的用户交互。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

kSecUseAuthenticationUI只接受kSecUseAuthenticationUIAllow,kSecUseAuthenticationUIFail和kSecUseAuthenticationUISkip。在您的情况下,您应该使用kSecUseAuthenticationUIAllow。