Touch ID 實現

Touch IDsegmentfault

1.要求app

     機型:iPhone 5s以上框架

     系統:iOS8以上lua

     框架:#import <LocalAuthentication/LocalAuthentication.h>線程

     注意:作iOS 8如下版本適配時,務必進行API驗證,避免調用相關API引發崩潰。code

2.具體代碼實現:對象

//初始化上下文對象ip

    LAContext* context = [[LAContext alloc] init];get

    //錯誤對象it

    NSError* error = nil;

    NSString* result = @"Authentication is needed to access your notes.";

    

    //首先使用canEvaluatePolicy 判斷設備支持狀態

    /*

     LAErrorAuthenticationFailed

     LAErrorUserCancel

     LAErrorUserFallback

     LAErrorSystemCancel  被掛起取消了受權(用戶本身切到了別的應用)

     LAErrorPasscodeNotSet

     LAErrorTouchIDNotAvailable

     LAErrorTouchIDNotEnrolled

     LAErrorTouchIDLockout  屢次連續使用Touch ID失敗,Touch ID被鎖,須要用戶輸入密碼解鎖

     LAErrorAppCancel       被掛起取消了受權(用戶不能控制的掛起)

     LAErrorInvalidContext  LAContext對象被釋放掉了

     */

    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

        //支持指紋驗證

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {

            if (success) {

                //驗證成功,主線程處理UI

                NSLog(@"success");

            }

            else

            {

                NSLog(@"%@",error.localizedDescription);

                switch (error.code) {

                    case LAErrorAuthenticationFailed:

                    {

                        NSLog(@"用戶提供的指紋不對");

                        break;

                    }

                    case LAErrorUserCancel:

                    {

                        NSLog(@"用戶點擊了取消按鈕");

                        break;

                    }

                    case LAErrorUserFallback:

                    {

                        NSLog(@"用戶選擇輸入密碼");

                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                            //用戶選擇輸入密碼,切換主線程處理

                        }];

                        break;

                    }

                    case LAErrorSystemCancel:

                    {

                        NSLog(@"切換到其餘的app(按了Home按鍵),被系統取消");

                        break;

                    }

                    case LAErrorTouchIDLockout :

                    {

                        NSLog(@"用戶指紋錯誤屢次,TOuchID 被鎖定");

                        break;

                    }

                    case LAErrorAppCancel:

                    {

                        NSLog(@"被(突如其來的)應用(電話)取消");

                        break;

                    }

                    default:

                    {

                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                            //其餘狀況,切換主線程處理

                        }];

                        break;

                    }

                }

            }

        }];

    }

    else

    {

        //不支持指紋識別,LOG出錯誤詳情

        switch (error.code) {

            case LAErrorPasscodeNotSet:

            {

                NSLog(@"在設置裏面沒有設置密碼");

                break;

            }

            case LAErrorTouchIDNotAvailable:

            {

                NSLog(@"設備不支持TouchID");

                break;

            }

            case LAErrorTouchIDNotEnrolled:

            {

                NSLog(@"在設置裏面沒有設置TouchId 指紋");

                break;

            }

            case LAErrorInvalidContext:

            {

                NSLog(@"建立的指紋對象失效");

                break;

            }

            default:

            {

                NSLog(@"TouchID not available");

                break;

            }

        }

        NSLog(@"%@",error.localizedDescription);

    }

 

原文連接: http://www.javashuo.com/article/p-qxtqzxjv-mg.html

相關文章
相關標籤/搜索