Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 되버리기

Swift4 지문인식 , FaceID 기능 넣기 (활용편) 본문

개발/Swift

Swift4 지문인식 , FaceID 기능 넣기 (활용편)

구본익 2019. 1. 26. 18:23

저번 게시글 포스팅에서는 생체 인증에 관한 소스코드 설명이었습니다.


이번 포스팅애서는 생체인증을 어떤식으로 활용하는지? 간단한 앱을 만들겠습니다.


1. 앱이 실행되면서 생체인증 요청을 한다.

2. 사용자가 지문인식이나 비밀번호를 입력하여 인증한다. or 취소하는 이벤트에 따라 앱의 라벨 문구가 바뀐다.




- 프로젝트 생성부터 합니다.






- 프로젝트 이름은 exampleApp 으로 합니다.



우선 저희가 프로젝트 생성후 'ViewController' 보면 이상태 입니다. (주석은 삭제하였습니다.)


import UIKit


class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

    }

}



앱이 실행될 때 바로 인증을 사용할 것이 기에 소스코드를 작성해줍니다.


좀 더 관리가 쉽고 보기 좋게 하기 위해 auth() 라는 함수로 만들어서 추가합니다.



생체인증을 위해서 LocalAuthentication 을 import 해줍니다.


import UIKit

import LocalAuthentication


class ViewController: UIViewController {


    override func viewDidLoad() {

        super.viewDidLoad()

        auth()

    }


    func auth() {

        // LAContext Instance creation

        let authContext = LAContext()

        

        // Error store variable

        var error: NSError?

        

        // Check if the device has finger print sensor

        guard authContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {

            print("지문인식 안되는 장치 처리")

            print(error)

            return

        }

        

        authContext.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "홈 버튼에 손가락을 올려주세요.", reply: { success, error in

            if success {

                // Fingerprint recognized

                print("지문인증 성공 or 암호인증 성공")

            }

            else {

                if let error = error {

                    print(error.localizedDescription)

                    print("에러")

                }

                print("취소")

            }

        })

    }

}


이제 Main.storyboard 로 이동해서 라벨을 하나 추가해줍니다.




저는 간단히 초기 라벨 상태는 'Hello World!' 라는 문구를 넣었습니다.



라벨과 ViewController를 연결해줍니다.


라벨 변수명은 hello_Label 입니다.





이후 코드는 아래와 같습니다.


import UIKit

import LocalAuthentication


class ViewController: UIViewController {

    @IBOutlet weak var hello_Label: UILabel!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        auth()

    }


    func auth() {

        // LAContext Instance creation

        let authContext = LAContext()

        

        // Error store variable

        var error: NSError?

        

        // Check if the device has finger print sensor

        guard authContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {

            print("지문인식 안되는 장치 처리")

            print(error)

            return

        }

        

        authContext.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "홈 버튼에 손가락을 올려주세요.", reply: { success, error in

            if success {

                // Fingerprint recognized

                DispatchQueue.main.async { // 메인스레드에서 실행

                    self.hello_Label.text = "인증 성공" // 이부분 추가

                }

                print("지문인증 성공 or 암호인증 성공")

            }

            else {

                if let error = error {

                    print(error.localizedDescription)

                    print("에러")

                }

                print("취소")

                DispatchQueue.main.async { // 메인스레드에서 실행

                    self.hello_Label.text = "인증 취소 및 실패" // 이부분 추가

                }

            }

        })

    }

}




코드 예시로 아래와 같이 소스코드가 추가되었습니다.

라벨같은경우에는 사용자에게 직접 보여지기 때문에 애플이 추구하는 부드러운 애니메이션? 과 관련이 있어서

사용자가 체감할때 렉이 걸리면 안되기에 메인스레드에서 실행이 되어야 합니다.

DispatchQueue.main.async { // 메인스레드에서 실행

    self.hello_Label.text = "인증 취소 및 실패" // 이부분 추가

}



앱을 실행하면 지문인식 창이 뜹니다.





지문인식이 성공하면 아래와 같은 라벨이 뜹니다.


취소하면 아래와 같은 코드가 뜹니다.



혹시 제가 잘못 설명한것이 있다면 댓글 부탁드립니다!

Comments