/**
* .h 继承自 LAContext
* TouchID/FaceID 状态
*/
typedef NS_ENUM(NSUInteger, XyAuthIDState){
/**
* 当前设备不支持TouchID/FaceID
*/
XyAuthIDStateNotSupport = 0,
/**
* TouchID/FaceID 验证成功
*/
XyAuthIDStateSuccess = 1,
/**
* TouchID/FaceID 验证失败
*/
XyAuthIDStateFail = 2,
/**
* TouchID/FaceID 被用户手动取消
*/
XyAuthIDStateUserCancel = 3,
/**
* 用户不使用TouchID/FaceID,选择手动输入密码
*/
XyAuthIDStateInputPassword = 4,
/**
* TouchID/FaceID 被系统取消 (如遇到来电,锁屏,按了Home键等)
*/
XyAuthIDStateSystemCancel = 5,
/**
* TouchID/FaceID 无法启动,因为用户没有设置密码
*/
XyAuthIDStatePasswordNotSet = 6,
/**
* TouchID/FaceID 无法启动,因为用户没有设置TouchID/FaceID
*/
XyAuthIDStateTouchIDNotSet = 7,
/**
* TouchID/FaceID 无效
*/
XyAuthIDStateTouchIDNotAvailable = 8,
/**
* TouchID/FaceID 被锁定(连续多次验证TouchID/FaceID失败,系统需要用户手动输入密码)
*/
XyAuthIDStateTouchIDLockout = 9,
/**
* 当前软件被挂起并取消了授权 (如App进入了后台等)
*/
XyAuthIDStateAppCancel = 10,
/**
* 当前软件被挂起并取消了授权 (LAContext对象无效)
*/
XyAuthIDStateInvalidContext = 11,
/**
* 系统版本不支持TouchID/FaceID (必须高于iOS 8.0才能使用)
*/
XyAuthIDStateVersionNotSupport = 12
};
@interface XyAuthID : LAContext
typedef void (^XyAuthIDStateBlock)(XyAuthIDState state, NSError *error);
/**
* 启动TouchID/FaceID进行验证
* @param describe TouchID/FaceID显示的描述
* @param block 回调状态的block
*/
- (void)xy_showAuthIDWithDescribe:(NSString *)describe block:(XyAuthIDStateBlock)block;
@end
#import <UIKit/UIKit.h>
#define iPhoneX (UIScreen.mainScreen.bounds.size.width == 375.f && UIScreen.mainScreen.bounds.size.height == 812.f)
@implementation XyAuthID
+ (instancetype)sharedInstance {
static XyAuthID *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[XyAuthID alloc] init];
});
return instance;
}
- (void)xy_showAuthIDWithDescribe:(NSString *)describe block:(XyAuthIDStateBlock)block {
if(!describe) {
if(iPhoneX){
describe = @"验证已有面容";
}else{
describe = @"通过Home键验证已有指纹";
}
}
if (NSFoundationVe