iOS--TouchID和FaceID调用(附demo)

作者: 这个汤圆没有馅 | 来源:发表于2017-12-05 14:41 被阅读530次
    自从公司的PM买了iPhone X后,于是就走上了适配这条不归路。原先项目里有接入TouchID,一切都是那么的完美。直到某天PM拿着手机给我看了张图.
    FaceID权限
    PM说iPhoneX是高端用户,就不要让他们看到TouchID字眼。嗯好的,你都是对的。然后我把这个功能模块封装了一下,后面会提供demo。

    开启权限

    在info.plist文件里设置NSFaceIDUsageDescription就ok。这个可以理解为开启FaceID权限,就相当于调定位、相册那些权限一样。

    引入框架

    #import <LocalAuthentication/LocalAuthentication.h>

    验证方式

    • LAPolicyDeviceOwnerAuthenticationWithBiometrics(只有指纹/FaceID验证功能)
    • LAPolicyDeviceOwnerAuthentication(包含指纹/FaceID验证和密码验证)

    调用前判断

        NSString *message = IS_IPHONE_X ? @"面容 ID 短时间内失败多次,需要验证手机密码" : @"请把你的手指放到Home键上";// 当deviceType为LAPolicyDeviceOwnerAuthentication的时候,iPhone X会需要前面这段描述
    NSInteger deviceType = LAPolicyDeviceOwnerAuthenticationWithBiometrics;//单纯指纹或FaceID,LAPolicyDeviceOwnerAuthentication会有密码验证
        LAContext *laContext = [[LAContext alloc] init];
        laContext.localizedFallbackTitle = @""; // 隐藏左边的按钮(默认是忘记密码的按钮)
        NSError *error = nil;
        BOOL isSupport = [laContext canEvaluatePolicy:(deviceType) error:&error];
    

    调用FaceID或者TouchID(方法是同一个,系统会自己判断)

    if (isSupport) {
            [laContext evaluatePolicy:(deviceType) localizedReason:message reply:^(BOOL s, NSError * _Nullable error) {
                if (s) {
                    success();
                }else {
                    failure(error, LAContextErrorAuthorFailure);
                }
            }];
        }else {
            failure(error, LAContextErrorAuthorNotAccess);
        }
    
    • localizedReason:这个参数不可为空,否则会crash

    回调失败的处理(只记录了几个我在项目中测试出来的)

    error.code == -8 :出TouchID尝试次数或FaceID尝试次数,已被锁
    error.code == -7 :未开启TouchID权限(没有可用的指纹)
    error.code == -6 :iPhoneX设置里面没有开启FaceID权限/非iPhoneX手机且该手机不支持TouchID(如iPhone5、iPhone4s)
    

    大体上就是这些,这里是demo。如果有表述错误的,欢迎指正😬

    相关文章

      网友评论

      • HanOBa:兄弟 你这demo用iphone X跑起来报错:未开启TouchID权限(没有可用的指纹)========
        HanOBa:@这个汤圆没有馅 我知道原因了,在iphone X未设置面容id的情况下会出现这种情况。
        这个汤圆没有馅:没有iPhone X可能调试的不够全面,那iPhone X的话error.code = -7 是什么场景下出现的?:sweat_smile:

      本文标题:iOS--TouchID和FaceID调用(附demo)

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