91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS指紋驗證TouchID的示例分析

發布時間:2021-08-04 11:17:19 來源:億速云 閱讀:128 作者:小新 欄目:移動開發

這篇文章主要介紹iOS指紋驗證TouchID的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

app喚醒的時候出現的畫面

iOS指紋驗證TouchID的示例分析

點擊取消按鈕出現的頁面

iOS指紋驗證TouchID的示例分析

    這里我先掛上github的鏈接地址,畢竟本文的篇幅較長,也沒什么人有耐心有時間看到最后,頂多看下demo,快速的知道怎么調用啥的就可以了。(popViewForTouchID)

    因為我之前沒遇到個這種情況,所以我做的都是自己瞎搞搞出來的,也不知道平時大家做的時候是怎么做的,就搞出來這樣的,這里我打算用兩種方法來實現,不過這個東西放進app中貌似是需要適配的。還是有些許問題的。可能要調下。

    在app被喚醒的時候,出現頁面我用了兩種方式,一種是present出來一個單獨的頁面,一種方式是自定義彈出view。

    但是本文呢,主要就介紹一下彈出式view的方式,因為present的方式跟這種方式差別就是在于一個是view一個是Controller,主要的思想還是一樣的。

第一部分

第一步

    引入需要用的文件,以及創建pch文件,因為是小demo,所以一些宏定義直接丟進去就可以了。

iOS指紋驗證TouchID的示例分析

第二步

    創建pch文件,引入一些需要用到的文件以及宏定義,這里要是有問題的話可以參照我之前一篇文章寫的引入pch文件,當然也可以老老實實的每個文件里都去引入頭文件啥的,這個很隨意的,畢竟是demo。

#import "AppDelegate.h"
#import "WJTouchID.h"
#import "MBProgressHUD.h"
#import "MBProgressHUD+Add.h"

// 屏幕bounds
#define YLSScreenBounds [UIScreen mainScreen].bounds
//位置
#define ZLRect(x, y, w, h) CGRectMake([UIScreen mainScreen].bounds.size.width * x, [UIScreen mainScreen].bounds.size.height * y, [UIScreen mainScreen].bounds.size.width * w, [UIScreen mainScreen].bounds.size.height * h)
//字體大小
#define ZCFont(f) [UIScreen mainScreen].bounds.size.width * f

第三步

    實現基礎頁面,如下圖

iOS指紋驗證TouchID的示例分析

聲明變量,遵守指紋驗證控件的協議

@interface ViewController ()<WJTouchIDDelegate>
/** NoticeLabel */
@property (nonatomic,strong) UILabel *label;
/** UISwitch */
@property (nonatomic,strong) UISwitch *touchIDSwitch;
@property (nonatomic, strong) WJTouchID *touchID;
@end

懶加載

-(UISwitch *)touchIDSwitch
{
 if (!_touchIDSwitch)
 {
 self.touchIDSwitch = [[UISwitch alloc]init];
 }
 return _touchIDSwitch;
}

添加子控件

-(void)setSubViews
{
 self.label = [[UILabel alloc]init];
 [self.view addSubview:self.label];
 [self.label setFrame:ZLRect(0, 100/667, 1, 20/667)];
 [self.label setText:@"指紋解鎖"];
 [self.label setTextAlignment:NSTextAlignmentCenter];
 [self.label setFont:[UIFont systemFontOfSize:ZCFont(18/375)]];

 self.touchIDSwitch = [[UISwitch alloc]init];
 [self.touchIDSwitch setFrame:ZLRect(160/375, 200/667, 50/375, 28/667)];
 [self.view addSubview:self.touchIDSwitch];
 if ([[[NSUserDefaults standardUserDefaults]objectForKey:@"TouchID"] isEqualToString:@"1"])
 {
 self.touchIDSwitch.on = YES;
 }else
 {
 self.touchIDSwitch.on = NO;
 }
 [self.touchIDSwitch addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];

}

    這里要說一下

    [[[NSUserDefaults standardUserDefaults]objectForKey:@"TouchID"] isEqualToString:@"1"]   

這個我是將是否設置了指紋驗證存到了本地,因為當你進入設置頁面的時候,必須知道你本機是否已經設置了指紋驗證,這里存在著設置與未設置的一個頁面UI差別,我這邊就是用switch的開關來打開關閉指紋驗證,也是用開關狀態來表示指紋驗證是否打開。

第四步

    在viewdidload方法中調用設置子控件的方法,并且實現開關切換的方法。

- (void)viewDidLoad {
 [super viewDidLoad];
 [self setSubViews];
}

切換方法里呢,就是需要調用者會問驗證,一般軟件設置指紋驗證的時候都會要求你先驗證一下子,我在這里設置成只要你開或關閉都需要驗證一下。

-(void)changeSwitch:(id)sender
{
 NSLog(@"------changeSwitch-------");

 WJTouchID *touchid = [[WJTouchID alloc]init];
 [touchid startWJTouchIDWithMessage:WJNotice(@"自定義信息", @"The Custom Message") fallbackTitle:WJNotice(@"", @"Fallback Title") delegate:self];
 self.touchID = touchid;
}

第五步

在上述調用指紋驗證成功后,必須得實現它的回調函數,在成功或者失敗的方法中寫上你需要執行的代碼。

//TouchID驗證成功
- (void) WJTouchIDAuthorizeSuccess {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES)
 {
 [MBProgressHUD showText:@"成功開啟指紋解鎖" view:self.view];
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }else{
 [MBProgressHUD showText:@"指紋解鎖關閉成功" view:self.view];
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }
}

//TouchID驗證失敗
- (void) WJTouchIDAuthorizeFailure {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES){
 self.touchIDSwitch.on = NO;
 [MBProgressHUD showText:@"指紋解鎖開啟失敗" view:self.view];
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }else
 {
 self.touchIDSwitch.on = YES;
 [MBProgressHUD showText:@"指紋解鎖關閉失敗" view:self.view];
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }
}

//取消TouchID驗證 (用戶點擊了取消)
- (void) WJTouchIDAuthorizeErrorUserCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES){
 self.touchIDSwitch.on = NO;
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }else
 {
 self.touchIDSwitch.on = YES;
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }
}

//在驗證的TouchID的過程中被系統取消 例如突然來電話、按了Home鍵、鎖屏
- (void) WJTouchIDAuthorizeErrorSystemCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES){
 self.touchIDSwitch.on = NO;
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }else
 {
 self.touchIDSwitch.on = YES;
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }
}

//多次連續使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖
- (void) WJTouchIDAuthorizeLAErrorTouchIDLockout {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 [MBProgressHUD showText:@"驗證失敗" view:self.view];
}

//當前軟件被掛起取消了授權(如突然來了電話,應用進入前臺)
- (void) WJTouchIDAuthorizeLAErrorAppCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES){
 self.touchIDSwitch.on = NO;
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }else
 {
 self.touchIDSwitch.on = YES;
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }
}

//當前軟件被掛起取消了授權 (授權過程中,LAContext對象被釋)
- (void) WJTouchIDAuthorizeLAErrorInvalidContext {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
 if (self.touchIDSwitch.on == YES){
 self.touchIDSwitch.on = NO;
 [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:@"TouchID"];
 }else
 {
 self.touchIDSwitch.on = YES;
 [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"TouchID"];
 }
}

    以上呢,我是沒有判斷是否支持touchid來寫,是直接按照可以支持的來寫的,大家在實際操作工程中還是需要加一下判斷條件,因為現在還是有不支持touchid的機型的。然后就是要說一下下面這個。

[[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];

    這個值我也不知道我是用來干嘛的,好像就是告訴我你設置了指紋驗證了,然后在app喚醒的時候要根據一個值來判斷是否需要調用指紋驗證服務,我后來想了想,好像只要

[[[NSUserDefaults standardUserDefaults]objectForKey:@"TouchID"] isEqualToString:@"1"]

    這個就可以了,但是仔細想想還是再加上一個好分辨一點,畢竟就把一個當做判斷switch是否打開,一個判斷喚醒的時候要不要調用的吧。在不同的回調函數里面需要寫的東西還是有差別的。這樣上面寫完之后,就等于實現一個簡單的基礎頁面,當然這個還不是什么大問題,因為這個很簡單,下面就是要實現彈出view了。篇幅好像有點長了,我自己看的也有點煩了都。。。。。

第二部分

第一步

 創建自定義的view。在.h文件中寫入方法

@interface YLSTouchidView : UIView

/**
 * 快速創建
*/
+(instancetype)touchIDView;

/**
* 彈出
*/
-(void)show;
-(void)showInView:(UIView *)view;

@end

第二步

    在.m文件中聲明控件,設置頁面大小,以及遵守協議,在頁面出來的同時就要調用驗證服務。

@interface YLSTouchidView()<WJTouchIDDelegate>

/** 指紋解鎖的button */
@property (nonatomic,strong) UIButton *touchIdBtn;
/** 頭像 */
@property (nonatomic,strong) UIImageView *iconView;
/** 用戶名 */
@property (nonatomic,strong) UILabel *nameLabel;
/** 提示信息 */
@property (nonatomic,strong) UILabel *noticeLabel;
/** 手機號 */
@property (nonatomic,strong) NSString *phoneNumber;
/** 退出按鈕 */
@property (nonatomic,strong) UIButton *quitBtn;

@property (nonatomic, strong) WJTouchID *touchID;

@end




-(instancetype)initWithFrame:(CGRect)frame
{
 self = [super initWithFrame:YLSScreenBounds];

 if (self)
 {
 self.backgroundColor = [UIColor orangeColor];

 }
 //調用指紋解鎖
 WJTouchID *touchid = [[WJTouchID alloc]init];
 [touchid startWJTouchIDWithMessage:WJNotice(@"自定義信息", @"The Custom Message") fallbackTitle:WJNotice(@"", @"Fallback Title") delegate:self];
 self.touchID = touchid;
 return self;
}

第三步

設置控件的位置大小等等屬性。

- (void)layoutSubviews
{
 [super layoutSubviews];
 self.iconView = [[UIImageView alloc]init];
 [self.iconView setFrame:ZLRect(128/320, 54/568, 65/320, 65/568)];
 [self.iconView setImage:[UIImage imageNamed:@"icon_myinformation"]];
 [self addSubview:self.iconView];

 self.nameLabel = [[UILabel alloc]init];
 [self.nameLabel setFrame:ZLRect(0, 125/568, 1, 28/568)];
 [self.nameLabel setText:@"151****1234"];
 [self.nameLabel setFont:[UIFont systemFontOfSize:ZCFont(15/375)]];
 [self.nameLabel setTextColor:[UIColor whiteColor]];
 [self.nameLabel setTextAlignment:NSTextAlignmentCenter];
 [self addSubview:self.nameLabel];

 self.touchIdBtn = [[UIButton alloc]init];
 [self.touchIdBtn setFrame:ZLRect(120/320, 250/568, 80/320, 80/568)];
 [self.touchIdBtn setImage:[UIImage imageNamed:@"touchImg"] forState:UIControlStateNormal];
 [self.touchIdBtn addTarget:self action:@selector(clickToCheckTouchID) forControlEvents:UIControlEventTouchUpInside];
 [self addSubview:self.touchIdBtn];

 self.noticeLabel = [[UILabel alloc]init];
 [self.noticeLabel setFrame:ZLRect(0, 339/568, 1, 22/568)];
 [self.noticeLabel setText:@"點擊進行指紋解鎖"];
 [self.noticeLabel setTextColor:[UIColor whiteColor]];
 [self.noticeLabel setTextAlignment:NSTextAlignmentCenter];
 [self.noticeLabel setFont:[UIFont systemFontOfSize:ZCFont(16/375)]];
 [self addSubview:self.noticeLabel];

 self.quitBtn = [[UIButton alloc]init];
 [self.quitBtn setFrame:ZLRect(0, 520/568, 1, 30/568)];
 [self.quitBtn setTitle:@"退出" forState:UIControlStateNormal];
 [self.quitBtn addTarget:self action:@selector(quitContent) forControlEvents:UIControlEventTouchUpInside];
 [self addSubview:self.quitBtn];

}

第四步

實現控件的點擊方法,以及在.h文件中聲明的彈出方法

//快速創建
+ (instancetype)touchIDView
{
 return [[self alloc]init];
}

/** 彈出 */
- (void)show
{
 [self showInView:[UIApplication sharedApplication].keyWindow];
} 

- (void)showInView:(UIView *)view
{
 // 浮現
 [view addSubview:self];
}


-(void)clickToCheckTouchID
{
 NSLog(@"點擊了指紋解鎖");
 [self.touchID startWJTouchIDWithMessage:WJNotice(@"自定義信息", @"The Custom Message") fallbackTitle:WJNotice(@"", @"Fallback Title") delegate:self];
}

-(void)quitContent
{
 NSLog(@"點擊了quit");
 [UIView animateWithDuration:3 animations:^{
 self.alpha = 0;
 } completion:^(BOOL finished) {
 [self removeFromSuperview];
 }];
}

    上面再退出的時候我還加了一個小小的特效,就是顏色漸漸變成無色,這樣有時候可以遮蓋你app里面的一些小問題。偷個懶。

第五步

    這里也是跟第一部分一樣,實現驗證的回調函數。這邊的回調函數呢,跟之前的差不多,但是里面的內容就不一樣了。而且我這里把不支持touchid的方法加進來,按理說這邊是不需要加的,但是我前面沒加進來,這里就硬塞進來吧。。。大家就湊合著看,自己用的時候可以直接刪掉,不刪掉也沒事,就是增加點代碼量而已。。。

/**
* TouchID驗證成功
*/
- (void) WJTouchIDAuthorizeSuccess {
 [MBProgressHUD showText:@"解鎖成功" view:self];
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
// [self dismissViewControllerAnimated:YES completion:nil];
 [self removeFromSuperview];
}

/**
* TouchID驗證失敗
*/
- (void) WJTouchIDAuthorizeFailure {
 [MBProgressHUD showText:@"解鎖失敗" view:self];
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}
/**
* 取消TouchID驗證 (用戶點擊了取消)
*/
- (void) WJTouchIDAuthorizeErrorUserCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 在驗證的TouchID的過程中被系統取消 例如突然來電話、按了Home鍵、鎖屏...
*/
- (void) WJTouchIDAuthorizeErrorSystemCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 無法啟用TouchID,設備沒有設置密碼
*/
- (void) WJTouchIDAuthorizeErrorPasscodeNotSet {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 設備沒有錄入TouchID,無法啟用TouchID
*/
- (void) WJTouchIDAuthorizeErrorTouchIDNotEnrolled {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 該設備的TouchID無效
*/
- (void) WJTouchIDAuthorizeErrorTouchIDNotAvailable {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 多次連續使用Touch ID失敗,Touch ID被鎖,需要用戶輸入密碼解鎖
*/
- (void) WJTouchIDAuthorizeLAErrorTouchIDLockout {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 當前軟件被掛起取消了授權(如突然來了電話,應用進入前臺)
*/
- (void) WJTouchIDAuthorizeLAErrorAppCancel {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

/**
* 當前軟件被掛起取消了授權 (授權過程中,LAContext對象被釋)
*/
- (void) WJTouchIDAuthorizeLAErrorInvalidContext {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}
/**
* 當前設備不支持指紋識別
*/
-(void)WJTouchIDIsNotSupport {
 [[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];
}

第三部分

    這里呢,是最重要的地方,也是最簡單的地方,只要在appdelegate.m文件中加上幾句話就可以實現了。
在下面這個方法里面寫,下面這個方法是呢app被喚醒進入活躍狀態的方法

- (void)applicationDidBecomeActive:(UIApplication *)application

    這邊的知識點其實還挺多的,就是一個生命周期的問題,一個app運行完成,即將進入活躍狀態,已經進入活躍狀態,即將進入后臺,已經進入后臺狀態,這幾種狀態,在之前我還想著聲明一個變量讓app在后臺運行的時候,也跟著運行,類似于一個計時器,但是我看了網上的一些想要讓app后臺掛起的時候還能運行一些東西,設置過程就好幾種,而且很多都說上架的時候審核是不給過得,想著有時間的話可以好好研究下那些方法,這里我就沒有弄,所以才有了上面的

[[NSUserDefaults standardUserDefaults]setObject:@"YES" forKey:@"touchIDISon"];

    這個值,本來也是設置成計時器的,但是這樣好像更方便點,就這么設置了,因為為了全局都可以取到這個值。
    在喚醒方法中寫下代碼

- (void)applicationDidBecomeActive:(UIApplication *)application {
 NSString *touchIDExist = [[NSUserDefaults standardUserDefaults]objectForKey:@"TouchID"];
 NSString *touchISOn = [[NSUserDefaults standardUserDefaults]objectForKey:@"touchIDISon"];
 if ([touchIDExist isEqualToString:@"1"] && [touchISOn isEqualToString:@"NO"])
 {
 YLSTouchidView *yls = [[YLSTouchidView alloc]init];
 [yls show];
 }
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 [[NSUserDefaults standardUserDefaults]setObject:@"NO" forKey:@"touchIDISon"];
 });
}

以上是“iOS指紋驗證TouchID的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤水市| 景德镇市| 清水县| 高邑县| 盐城市| 隆化县| 靖州| 水富县| 涡阳县| 五家渠市| 新化县| 德兴市| 太保市| 安阳市| 历史| 滕州市| 盐边县| 铜川市| 凌海市| 镇平县| 庆元县| 泰顺县| 吴江市| 鄂尔多斯市| 泰宁县| 锡林浩特市| 石城县| 太谷县| 马龙县| 永州市| 巨鹿县| 墨玉县| 民县| 家居| 安陆市| 高淳县| 天峨县| 红桥区| 溆浦县| 遵义市| 南投县|