솜은 코튼

[Android] 생체 인증, biometric authentication 본문

Android/Java

[Android] 생체 인증, biometric authentication

솜.코 2021. 1. 21. 12:00

 

 

 

생체 인증 (지문, 얼굴 인식)

    :Android 9.0에서 fingerprint가 deprecated되고  BiometricPrompt를 참조하라는 안내문이 기재되어 있습니다.

 

     디바이스 내에 지문 혹은 얼굴 인식 정보가 등록되어 있어야 하며,

     지문만 등록되어 있을 경우는 지문만, 모두 등록되어 있으면 선택할 수 있도록 알림창이 뜹니다.

 

    ※ 주의: FragmentActivity와 Fragment만 가능하며 Fragment를 생성 시 Activity가 아닌 AppCompatActivity에서 가능.

 

 

    1. build.gradle 

1
2
3
4
5
6
dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    
    // 생체 인증
    implementation 'androidx.biometric:biometric:1.0.1'
}
cs

 

    2. AndroidManifest.xml

1
2
<!-- 생체 인증 권한 -->
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
cs

 

    3. BiometricPrompt 초기 셋팅  

    : 초기 설정 및 콜백 리스너 등록

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
32
33
34
35
36
37
38
39
40
41
private Executor executor;
private BiometricPrompt biometricPrompt;
private BiometricPrompt.PromptInfo promptInfo;
 
public void init(){
    executor = ContextCompat.getMainExecutor(getApplicationContext());
    biometricPrompt = new BiometricPrompt(BiometricManager.this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            Toast.makeText(getApplicationContext(),
                    "Error", Toast.LENGTH_SHORT)
                    .show();
        }
    
        @Override
        public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            Toast.makeText(getApplicationContext(),
                    "Succeeded", Toast.LENGTH_SHORT).show();
        }
   
        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            Toast.makeText(getApplicationContext(), "nFailed",
                    Toast.LENGTH_SHORT)
                    .show();
        }
    });
 
    promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("생체 인증")
            .setSubtitle("인증해주세요.")
            .setNegativeButtonText("취소")
            .setDeviceCredentialAllowed(false)
            .build();
 
    }
}
cs

   

    4. 생체 인증 시작

1
2
3
public void auth(){
    biometricPrompt.authenticate(promptInfo);
}
cs

 

    5. 생체 인증 종료

1
2
3
public void cancel(){
    biometricPrompt.cancelAuthentication();
}
cs