Android 6.0 지문 인식 개발 사례 상세 설명
최근 안 드 로 이 드 지문 관련 기능 을 하고 있 으 며 구 글 은 안 드 로 이 드 6.0 이상 버 전에 서 지문 인식 을 공식 적 으로 지원 했다.당시 FingerprintManager 와 Fingerprint Manager Compat 두 가지 사이 에 갈등 이 있 었 는데 그 중에서 FingerprintManager 를 사용 하면 com.android.support:appcompat-v7 패 키 지 를 도입 해 야 했 고 가방 의 크기 를 고려 하여 v4 호 환 패키지 Fingerprint Manager Compat 를 사용 하기 로 결정 했다.
주로 실 현 된 도구 류 FingerprintUtil:핸드폰 이 지문 인식 방법 을 지원 하 는 지 검증 합 니 다.callFingerPrintVerify()는 핸드폰 하드웨어 가 지원 하 는 지 검증 합 니 다(6.0 이상).지문 이 입력 되 었 는 지 확인 한 다음 에 잠 금 화면 비밀 번 호 를 열 었 는 지 확인 합 니 다.식별 에 성공 하면 실 패 는 해당 하 는 리 셋 처 리 를 할 수 있 습 니 다.
인 스 턴 스 코드:
public class FingerprintUtil{
private FingerprintManagerCompat mFingerprintManager;
private KeyguardManager mKeyManager;
private CancellationSignal mCancellationSignal;
private Activity mActivity;
public FingerprintUtil(Context ctx) {
mActivity = (Activity) ctx;
mFingerprintManager = FingerprintManagerCompat.from(mActivity);
mKeyManager = (KeyguardManager) mActivity.getSystemService(Context.KEYGUARD_SERVICE);
}
public void callFingerPrintVerify(final IFingerprintResultListener listener) {
if (!isHardwareDetected()) {
return;
}
if (!isHasEnrolledFingerprints()) {
if (listener != null) {
listener.onNoEnroll();
}
return;
}
if (!isKeyguardSecure()) {
if (listener != null) {
listener.onInSecurity();
}
return;
}
if (listener != null) {
listener.onSupport();
}
if (listener != null) {
listener.onAuthenticateStart();
}
if (mCancellationSignal == null) {
mCancellationSignal = new CancellationSignal();
}
try {
mFingerprintManager.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
// onAuthenticationError, , , 。
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
if (listener != null)
listener.onAuthenticateError(errMsgId, errString);
}
// , 4 onAuthenticationFailed, 5 onAuthenticationError
@Override
public void onAuthenticationFailed() {
if (listener != null)
listener.onAuthenticateFailed();
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
if (listener != null)
listener.onAuthenticateHelp(helpMsgId, helpString);
}
// , sensor
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
if (listener != null)
listener.onAuthenticateSucceeded(result);
}
}, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* , , false
*
* @return
*/
private boolean isHasEnrolledFingerprints() {
try {
return mFingerprintManager.hasEnrolledFingerprints();
} catch (Exception e) {
return false;
}
}
/**
*
*
* @return
*/
public boolean isHardwareDetected() {
try {
return mFingerprintManager.isHardwareDetected();
} catch (Exception e) {
return false;
}
}
/**
*
*
* @return
*/
private boolean isKeyguardSecure() {
try {
return mKeyManager.isKeyguardSecure();
} catch (Exception e) {
return false;
}
}
/**
*
*/
public interface IFingerprintResultListener {
void onInSecurity();
void onNoEnroll();
void onSupport();
void onAuthenticateStart();
void onAuthenticateError(int errMsgId, CharSequence errString);
void onAuthenticateFailed();
void onAuthenticateHelp(int helpMsgId, CharSequence helpString);
void onAuthenticateSucceeded(FingerprintManagerCompat.AuthenticationResult result);
}
public void cancelAuthenticate() {
if (mCancellationSignal != null) {
mCancellationSignal.cancel();
mCancellationSignal = null;
}
}
public void onDestroy() {
cancelAuthenticate();
mKeyManager = null;
mFingerprintManager = null;
}
일부 자 료 를 참고 하여 검증 을 하여 결론 을 얻 었 다.1.지문 인식 에 실패 하면 onAuthenticationFailed()방법 을 사용 합 니 다.이때 지문 센서 가 닫 히 지 않 았 습 니 다.구 글 네 이 티 브 시스템 은 우리 에 게 5 번 의 재 시도 기 회 를 주 었 습 니 다.즉,onAuthenticationFailed()방법 을 4 번 연속 호출 한 후에 다섯 번 째 는 onAuthenticateError(int errMsgId,CharSequence errString)방법 을 사용 합 니 다.이때 errMsgId==7.
2.다시 권한 을 부여 할 때마다 검사 하지 않 아 도 취소 할 때 onAuthenticateError(int errMsgId,CharSequence errString)방법 을 사용 합 니 다.그 중에서 errMsgId==5,
3.시스템 이 onAuthenticationError()와 onAuthenticationSucceeded()를 호출 하면 센서 가 닫 힙 니 다.우리 가 다시 권한 을 부여 하고 authenticate()방법 을 다시 호출 해 야 지문 인식 기능 을 계속 사용 할 수 있 습 니 다.
4.안 드 로 이 드 6.0 이하 시스템 을 호 환 할 경우 Fingerprint Manager Compat 를 사용 하지 마 세 요.M 이하 의 시스템 버 전 입 니 다.Fingerprint Manager Compat 는 핸드폰 에 지문 인식 모듈 이 있 든 없 든 지문 인식 이 없다 고 생각 하고 FingerprintManager 로 할 수 있 습 니 다.
5.보안 요 소 를 고려 하여 authenticate(Crypto Object crypto,CancellationSignal cancel,int flags,AuthenticationCallback callback,Handler handler)에 Crypto Object 를 추가 하 는 것 이 좋 습 니 다.crypto 는 암호 화 된 대상 입 니 다.지문 스캐너 는 이 대상 을 사용 하여 인증 결과 의 합 법성 을 판단 합 니 다.이 대상 은 null 일 수 있 습 니 다.그러나 이렇게 되면 app 이 무조건 신뢰 인증 결 과 를 의미 합 니 다.이 과정 은 공격 을 받 을 수 있 고 데이터 가 변 경 될 수 있 습 니 다.이것 은 app 이 이런 상황 에서 반드시 부담 해 야 할 위험 입 니 다.따라서 이 매개 변 수 를 null 로 설정 하지 않 는 것 을 권장 합 니 다.이 종류의 실례 화 는 좀 번 거 롭 습 니 다.주로 javax 의 security 인 터 페 이 스 를 사용 하여 이 루어 집 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.