指紋識別相關(guān)

指紋識別官方API

// 導(dǎo)入資源
LocalAuthentication.framework
// 導(dǎo)入頭文件
#import <LocalAuthentication/LocalAuthentication.h>
資源下主要文件是
  • LAError.h
  • LAContext.h
  • LAPublicDefines.h
  • LocalAuthentication.h
  1. LocalAuthentication.h 就是一個公開接口嗤无,供調(diào)用
  2. LAError.h 系統(tǒng)定義的錯誤類型
typedef NS_ENUM(NSInteger, LAError)
{
    LAErrorAuthenticationFailed,    // 驗證信息出錯坪稽,指紋驗證不匹配
    LAErrorUserCancel               // 用戶取消了驗證(例如點擊返回按鈕)
    LAErrorUserFallback             // 用戶點擊了fallback按鈕锹淌,去手動輸入密碼
    LAErrorSystemCancel             // 系統(tǒng)取消七兜,其他app在前臺,驗證的時候app進入了后臺
    LAErrorPasscodeNotSet           // 用戶沒有設(shè)置密碼,無法開啟指紋驗證
    LAErrorTouchIDNotAvailable      // 用戶設(shè)備不支持TouchID
    LAErrorTouchIDNotEnrolled       // 用戶沒有設(shè)置手指指紋
    LAErrorTouchIDLockout           // 由于多次指紋驗證失敗導(dǎo)致 TouchID已經(jīng)被鎖定,現(xiàn)在只可以用密碼去解鎖TouchID
    LAErrorAppCancel                // 在驗證中被其他app中斷
    LAErrorInvalidContext           // 請求驗證出錯
} NS_ENUM_AVAILABLE(10_10, 8_0);
  1. LAPublicDefines.h 一個宏定義文件
// Policies
#define kLAPolicyDeviceOwnerAuthenticationWithBiometrics    1
#define kLAPolicyDeviceOwnerAuthentication                  2

// Options
#define kLAOptionUserFallback                               1
#define kLAOptionAuthenticationReason                       2

// Credential types
#define kLACredentialTypePasscode                          -1
#define kLACredentialTypePassphrase                        -2
#define kLACredentialCTKPIN                                -3

// Error codes
#define kLAErrorAuthenticationFailed                       -1
#define kLAErrorUserCancel                                 -2
#define kLAErrorUserFallback                               -3
#define kLAErrorSystemCancel                               -4
#define kLAErrorPasscodeNotSet                             -5
#define kLAErrorTouchIDNotAvailable                        -6
#define kLAErrorTouchIDNotEnrolled                         -7
#define kLAErrorTouchIDLockout                             -8
#define kLAErrorAppCancel                                  -9
#define kLAErrorInvalidContext                            -10

// Error domain
#define kLAErrorDomain        "com.apple.LocalAuthentication"
  1. LAContext.h 主要的使用文件
typedef NS_ENUM(NSInteger, LAPolicy)
{
    // 這種情況就是指紋識別伦连,如果指紋識別失敗,導(dǎo)致TouchID被鎖定钳垮,則再次調(diào)用這個驗證惑淳,會一致處于LAErrorTouchIDLockout狀態(tài),除非你重新解鎖TouchID饺窿。我只發(fā)現(xiàn)了關(guān)閉屏幕歧焦,輸入密碼解鎖,才可以重新使用指紋識別功能
    LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(10_12_2, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,
    // 這種情況下當指紋識別失敗一定次數(shù)后肚医,會主動調(diào)用系統(tǒng)的密碼輸入界面去解鎖你的指紋識別功能倚舀,或者你在識別失敗后的再試一次的界面叹哭,點擊輸入密碼調(diào)用系統(tǒng)的密碼輸入界面
    LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication

} NS_ENUM_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);

/// The maximum value for LAContext touchIDAuthenticationAllowableReuseDuration property.
extern const NSTimeInterval LATouchIDAuthenticationMaximumAllowableReuseDuration NS_AVAILABLE(10_12, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;

NS_CLASS_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0)
@interface LAContext : NSObject

// 在調(diào)用驗證指紋識別前,先查詢下本機是否支持指紋識別功能
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));

// 調(diào)用指紋識別
// 第一個參數(shù)是識別的類型詳解參考上面的枚舉LAPolicy
// 第二參數(shù)是你請求指紋解鎖的原因痕貌,不可以為nil或者@""风罩,會crash,
// 第三個為回調(diào)函數(shù)舵稠,成功或者失敗超升,以及失敗的原因
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

// 手動取消這個調(diào)用對象context(LAContext *context = [[LAContext alloc] init];)
- (void)invalidate NS_AVAILABLE(10_11, 9_0);

/*
    暫時沒有LACredentialType 這個相關(guān)的應(yīng)用場景
*/
typedef NS_ENUM(NSInteger, LACredentialType)
{
    // 證書類型為密碼類型
    LACredentialTypeApplicationPassword __TVOS_UNAVAILABLE = 0,
} NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);

// 設(shè)置一個內(nèi)部評估時使用的身份驗證憑據(jù)
// 設(shè)置這個參數(shù)為nil將會刪除指定類型的任何現(xiàn)有的憑證。
- (BOOL)setCredential:(nullable NSData *)credential
                 type:(LACredentialType)type NS_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_UNAVAILABLE;

// 是否是某個類型哺徊,現(xiàn)在只有一個類型
- (BOOL)isCredentialSet:(LACredentialType)type NS_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_UNAVAILABLE;

/*
    暫時沒有LAAccessControlOperation 這個相關(guān)的應(yīng)用場景
*/
typedef NS_ENUM(NSInteger, LAAccessControlOperation)
{
    /// Access control will be used for item creation.
    LAAccessControlOperationCreateItem,

    /// Access control will be used for accessing existing item.
    LAAccessControlOperationUseItem,

    /// Access control will be used for key creation.
    LAAccessControlOperationCreateKey,

    /// Access control will be used for sign operation with existing key.
    LAAccessControlOperationUseKeySign,
    
    /// Access control will be used for data decryption using existing key.
    LAAccessControlOperationUseKeyDecrypt NS_ENUM_AVAILABLE(10_12, 10_0),

    /// Access control will be used for key exchange.
    LAAccessControlOperationUseKeyKeyExchange NS_ENUM_AVAILABLE(10_12, 10_0),
} NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);

- (void)evaluateAccessControl:(SecAccessControlRef)accessControl
                    operation:(LAAccessControlOperation)operation
              localizedReason:(NSString *)localizedReason
                        reply:(void(^)(BOOL success, NSError * __nullable error))reply
                        NS_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_UNAVAILABLE;

// 當?shù)谝淮沃讣y驗證失敗后室琢,界面會發(fā)生改變,右側(cè)會出現(xiàn)請輸入密碼提示落追,左側(cè)默認是取消盈滴。右側(cè)的按鈕就是fallback按鈕,內(nèi)容就是fallbacktitle轿钠。如果為@""fallback按鈕則隱藏
@property (nonatomic, nullable, copy) NSString *localizedFallbackTitle;
// 指紋識別默認cancle按鈕title為取消巢钓,你可以改變內(nèi)容在iOS10之后
@property (nonatomic, nullable, copy) NSString *localizedCancelTitle NS_AVAILABLE(10_12, 10_0);
// 指紋識別失敗的次數(shù)設(shè)置,即當失敗多少次之后做什么疗垛,iOS8.3---iOS9.0之間可以設(shè)置
@property (nonatomic, nullable) NSNumber *maxBiometryFailures NS_DEPRECATED_IOS(8_3, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
// 當你的指紋有增刪操作后症汹,這個狀態(tài)會發(fā)生變化
@property (nonatomic, nullable, readonly) NSData *evaluatedPolicyDomainState NS_AVAILABLE(10_11, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;
// 這個屬性可以設(shè)置一個時間間隔,在時間間隔內(nèi)是不需要再次錄入贷腕。默認是0秒背镇,最長可以設(shè)置5分鐘。暫未觸發(fā)這個屬性的應(yīng)用場景
@property (nonatomic) NSTimeInterval touchIDAuthenticationAllowableReuseDuration NS_AVAILABLE(10_12, 9_0) __WATCHOS_UNAVAILABLE __TVOS_UNAVAILABLE;

@end
  1. 注意事項
// 指紋識別完成后泽裳,回主線程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
    // do something
});

參考資料
官方文檔
LocalAuthentication源碼學(xué)習
iOS 指紋識別常見問題匯總

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞒斩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涮总,更是在濱河造成了極大的恐慌济瓢,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妹卿,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔑鹦,警方通過查閱死者的電腦和手機夺克,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚎朽,“玉大人铺纽,你說我怎么就攤上這事∮慈蹋” “怎么了狡门?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵陷寝,是天一觀的道長。 經(jīng)常有香客問我其馏,道長凤跑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任叛复,我火速辦了婚禮仔引,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘褐奥。我一直安慰自己咖耘,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布撬码。 她就那樣靜靜地躺著儿倒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呜笑。 梳的紋絲不亂的頭發(fā)上夫否,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音蹈垢,去河邊找鬼慷吊。 笑死,一個胖子當著我的面吹牛曹抬,可吹牛的內(nèi)容都是我干的溉瓶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼谤民,長吁一口氣:“原來是場噩夢啊……” “哼堰酿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起张足,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤触创,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后为牍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哼绑,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年碉咆,在試婚紗的時候發(fā)現(xiàn)自己被綠了抖韩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡疫铜,死狀恐怖茂浮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤席揽,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布顽馋,位于F島的核電站,受9級特大地震影響幌羞,放射性物質(zhì)發(fā)生泄漏寸谜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一新翎、第九天 我趴在偏房一處隱蔽的房頂上張望程帕。 院中可真熱鬧,春花似錦地啰、人聲如沸愁拭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岭埠。三九已至,卻和暖如春蔚鸥,著一層夾襖步出監(jiān)牢的瞬間惜论,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工止喷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馆类,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓弹谁,卻偏偏與公主長得像乾巧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子预愤,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評論 25 707
  • 由于近段時間項目告一段落啦沟于,所以決定將近段時間接觸的一些功能集中整理總結(jié)一下,寫成了一個簡單的Demo植康,以供參考旷太。...
    KingLionsFrank閱讀 644評論 0 0
  • 盆架子開花, 香氣襲人销睁, 每年一次機會供璧, 它努力綻放。 又恰逢深秋冻记, 害怕緣去錯失睡毒, 于是竭其所能, 做到極致檩赢。 ...
    杰瑞的江湖傳說閱讀 189評論 0 0
  • 近日看到一則微信《我被美國人徹底刷新的觀念——富是物質(zhì)的,貴是精神的》,文章列舉了國人和美國人的對比贞瞒,其中...
    崩山子閱讀 425評論 1 4