关闭生物识别后,如何判断iOS设备是Face ID还是Touch ID?
解决生物识别类型判断问题
当关闭Face ID后,调用canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics返回的authError仅提示“No identities are enrolled.”,无法区分设备支持的是Face ID还是Touch ID,可通过以下两种方案解决:
方案一:利用LAContext的biometryType属性(推荐)
iOS 11及以上版本中,LAContext新增了biometryType属性,可直接获取设备支持的生物识别类型,无需依赖授权结果:
LAContext *myContext = [[LAContext alloc] init]; NSError *authError = nil; // 先执行评估操作,不影响后续类型判断 [myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]; LABiometryType biometryType = myContext.biometryType; if (biometryType == LABiometryTypeFaceID) { NSLog(@"设备支持Face ID"); } else if (biometryType == LABiometryTypeTouchID) { NSLog(@"设备支持Touch ID"); } else { NSLog(@"设备不支持生物识别"); }
即使未录入生物识别信息,只要设备硬件支持,biometryType依然会返回对应的类型(FaceID/TouchID),仅当硬件不支持时返回LABiometryTypeNone。
方案二:通过设备型号判断(兼容iOS 11以下)
若需适配iOS 11之前的版本,可通过读取设备型号来判断:
#import <sys/utsname.h> NSString *getDeviceModel() { struct utsname systemInfo; uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; } BOOL isFaceIDSupportedDevice() { NSString *model = getDeviceModel(); NSArray *faceIDDeviceModels = @[ @"iPhone10,1", @"iPhone10,2", @"iPhone10,3", @"iPhone10,4", // iPhone X @"iPhone10,5", @"iPhone10,6", // iPhone XS @"iPhone11,2", // iPhone XS Max @"iPhone11,4", @"iPhone11,6", // iPhone XR // 后续新发布的Face ID设备型号需持续补充 ]; return [faceIDDeviceModels containsObject:model]; }
此方法需维护支持Face ID的设备型号列表,随新设备发布更新,但能覆盖低版本系统场景。
注意:优先使用方案一,这是苹果官方提供的标准判断方式,仅在必须兼容iOS 11以下时才考虑方案二。
内容的提问来源于stack exchange,提问作者user7021848
相关产品推荐
相关产品推荐

