iOS开发日记iOS学习笔记iOS学习开发

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

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

开启权限

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

引入框架

#import <LocalAuthentication/LocalAuthentication.h>

验证方式

调用前判断

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读