前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Face ID和Touch ID 译文and集成篇Face ID和Touch ID

Face ID和Touch ID 译文and集成篇Face ID和Touch ID

作者头像
GuangdongQi
发布2018-05-24 17:43:36
3.4K0
发布2018-05-24 17:43:36
举报
文章被收录于专栏:Guangdong QiGuangdong Qi

译文篇:

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

代码语言:javascript
复制
- (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 合为一体

代码语言:javascript
复制
- (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);

小结:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 译文篇:
  • Face ID和Touch ID
    • 集成篇
      • 小结:
      相关产品与服务
      多因子身份认证
      多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档