美文网首页iOS开发 技术集锦iOS
Face ID和Touch ID 译文and集成篇

Face ID和Touch ID 译文and集成篇

作者: 1ace156a39cd | 来源:发表于2017-09-15 16:01 被阅读382次

    广告

    欢迎大家一起交流 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);
    
    

    小结:

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

    相关文章

      网友评论

      • 心语风尚:这个是指纹的 不 人脸的啊
        EchoZuo:TouchID和FaceID权限判断和调用是同一套API ,调用同样的系统方法,逻辑也基本一样。先通过canEvaluatePolicy:error:方法判断设备是否支持生物识别,也就是否支持TouchID或者FaceID。此时在iOS11下就会有一个特定参数可以判断设备是支持TouchID,还是FaceID,参数为LABiometryType biometryType。是个枚举,参考官网文档https://developer.apple.com/documentation/localauthentication。之后的逻辑处理就和TouchID一样,需要去调用evaluatePolicy:localizedReason:myLocalizedReasonString reply:^(BOOL success, NSError * _Nullable error)方法去进行验证即可。当然如果项目中使用的是第三方厂商的安全SDK的话,就根据他们的逻辑走就ok。很简单的,因为调用方法一直,除了特定判断逻辑外,除非特别需要,几乎都不需要去进行改动即可从TouchID验证过渡到FaceID。
        心语风尚:@GuangdongQi 要人脸识别怎么做
        1ace156a39cd:文档给出两个密码拾给器集成方式是一样的,只不过参数返回参数改了
      • 心语风尚:为什么两个功能合在一起啊

      本文标题:Face ID和Touch ID 译文and集成篇

      本文链接:https://www.haomeiwen.com/subject/giwssxtx.html