iOS开发 技术集锦iOS

Face ID和Touch ID 译文and集成篇

2017-09-15  本文已影响382人  1ace156a39cd

广告

欢迎大家一起交流 QQ群 139852091 公众号

我是jpg

译文篇:

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);

小结:

因还无真机测试,目前只能这样,等有真机,或者哪位大神出测试方法后会及时补全

上一篇下一篇

猜你喜欢

热点阅读