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