广告
我是jpg欢迎大家一起交流 QQ群 139852091 公众号
译文篇:
Face ID和Touch ID
尽可能支持生物识别。Face ID和Touch ID是人们信任的安全,熟悉的身份验证方法。如果用户启用了生物认证,您可以假定他们了解其工作原理,欣赏其方便性,并且希望尽可能使用它。请记住,人们可能会选择在其设备上禁用生物识别身份验证,因此您的应用程序应该准备好处理这种情况。
现在人们用单一的方式认证。当人们不必选择如何进行身份验证时,这是最直观的。只要给他们一个单一的选项,如Face ID。提供替代方案,例如要求用户名和密码,只有在初始方法失败时才作为备用。
仅在响应用户操作时启动身份验证。明确的操作,例如点击按钮,确保用户想要进行身份验证。在脸部识别码的情况下,还可以提高用户面对照相机的可能性。
始终识别身份验证方法。例如,使用Face ID登录到您的应用程序的按钮应标题为“使用Face ID登录”而不是“Touch ID登录”。
参考认证方法准确。不要在支持Face ID的设备上引用Touch ID。相反,请勿在支持Touch ID的设备上引用Face ID。检查设备的功能并使用适当的术语。有关开发人员的指导,请参阅LABiometryType。
一般来说,避免提供在您的应用程序中选择生物认证身份验证的设置。如果在系统级别启用生物特征认证,则假定用户想要使用它。如果您实施特定于应用程序的设置,用户可能会进入生物认证认证在您的应用程序中被启用的状态,但在全系统范围内确实已被禁用。
不要使用自定义图标来识别系统身份验证功能。当人们看到像系统的Touch ID(指纹图标)和Face ID图标的图标时,他们认为它们应该进行身份验证。这些图标的自定义变体会导致不一致,并导致混乱,特别是当着色,大尺寸显示,并呈现为上下文(如按钮标签)或应用程序的“设置”屏幕时。
对于开发人员指南,请参阅本地验证。
集成篇
iOS 11之前集成TouchID
- (void)touchId
{
//初始化上下文对象
LAContext* context = [[LAContext alloc] init];
//错误对象
NSError* error = nil;
NSString* result = @"Authentication is needed to access your notes.";
//首先使用canEvaluatePolicy 判断设备支持状态
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
if (success) {
//验证成功,主线程处理UI
}
else
{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorSystemCancel:
{
NSLog(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
case LAErrorUserCancel:
{
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
break;
}
case LAErrorUserFallback:
{
NSLog(@"User selected to enter custom password");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,LOG出错误详情
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
{
NSLog(@"TouchID is not enrolled");
break;
}
case LAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}
}
#pragma mark -- Touch ID 错误对照
//typedef NS_ENUM(NSInteger, LAError)
//{
// //授权失败
// LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
//
// //用户取消Touch ID授权
// LAErrorUserCancel = kLAErrorUserCancel,
//
// //用户选择输入密码
// LAErrorUserFallback = kLAErrorUserFallback,
//
// //系统取消授权(例如其他APP切入)
// LAErrorSystemCancel = kLAErrorSystemCancel,
//
// //系统未设置密码
// LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
//
// //设备Touch ID不可用,例如未打开
// LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
//
// //设备Touch ID不可用,用户未录入
// LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
//} NS_ENUM_AVAILABLE(10_10, 8_0);
iOS 11之前集成Face ID and TouchID 合为一体
- (void)FaceIDandTouchID
{
LAContext *myContext = [[LAContext alloc] init];
NSError *authError = nil;
NSString *myLocalizedReasonString = @"我想要访问FaceID或者TouchID";
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
[myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:myLocalizedReasonString
reply:^(BOOL success, NSError *error) {
if (success) {
//验证成功
} else {
}
}];
} else {
}
}
//typedef NS_ENUM(NSInteger, LAError)
//{
// 身份验证不成功,因为用户无法提供有效的凭据。
// LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
//
// 认证用户取消(例如点击取消按钮)。
// LAErrorUserCancel = kLAErrorUserCancel,
//
// 已取消身份验证,因为用户已单击后退按钮(输入密码)。
// LAErrorUserFallback = kLAErrorUserFallback,
//
// 系统取消了身份验证(例如,另一个应用程序进入前台)。
// LAErrorSystemCancel = kLAErrorSystemCancel,
//
// 认证无法启动,因为密码没有设置在设备。
// LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
//
// 验证无法启动,因为设备上的Touch ID不可用。本方法以弃用
// LAErrorTouchIDNotAvailable NS_ENUM_DEPRECATED(10_10, 10_13, 8_0, 11_0, "use LAErrorBiometryNotAvailable") = kLAErrorTouchIDNotAvailable,
//
// 验证无法启动,因为Touch ID没有注册的手指。本方法以弃用
// LAErrorTouchIDNotEnrolled NS_ENUM_DEPRECATED(10_10, 10_13, 8_0, 11_0, "use LAErrorBiometryNotEnrolled") = kLAErrorTouchIDNotEnrolled,
//
// 身份验证不成功,因为有太多失败的触摸ID尝试和触摸ID现在被锁定。本方法以弃用
// LAErrorTouchIDLockout NS_ENUM_DEPRECATED(10_11, 10_13, 9_0, 11_0, "use LAErrorBiometryLockout")
// __WATCHOS_DEPRECATED(3.0, 4.0, "use LAErrorBiometryLockout") __TVOS_DEPRECATED(10.0, 11.0, "use LAErrorBiometryLockout") = kLAErrorTouchIDLockout,
//
// /// 应用程序取消了身份验证(例如在进行身份验证时调用了无效)。
// LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
//
// /// LAContext通过这个已经失效。
// LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext,
//
// /// 认证无法启动,因为数据不可用的设备。beta版本
// LAErrorBiometryNotAvailable NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotAvailable,
//
// /// 认证无法启动,因为没有登记身份。 beta版本
// LAErrorBiometryNotEnrolled NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotEnrolled,
//
// /// 认证是不成功的,因为有太多的失败的尝试和生物统计学生物现在锁定。beta版本
// LAErrorBiometryLockout NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryLockout,
//
// /// 身份验证失败,因为它需要显示已被禁止 beta版本
// LAErrorNotInteractive API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0), tvos(10.0)) = kLAErrorNotInteractive,
//} NS_ENUM_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);
小结:
因还无真机测试,目前只能这样,等有真机,或者哪位大神出测试方法后会及时补全
网友评论