指紋認証を使用してユーザーを認証するために、生体認証プロンプトAPIを実装しようとしています。私は生体認証プロンプトを正常に統合することができ、それはandorid9.0で動作しています。しかし、ドキュメントが示唆しているように、生体認証APIにも下位互換性がありますが、以下のコードを使用してダイアログを作成すると、APIサポートの警告が表示されます。
呼び出しにはAPIレベル28が必要です(現在の最小値は15):新しいAndroid.hardware.biometrics.BiometricPrompt.Builder less ...(Ctrl + F1)このチェックは、すべてのAndroid API呼び出しをスキャンしますアプリケーションは、このアプリケーションの対象となるすべてのバージョンで利用できない呼び出しについて警告します(マニフェストの最小SDK属性による)
mBiometricPrompt = new BiometricPrompt.Builder(this)
.setDescription("Description")
.setTitle("Title")
.setSubtitle("Subtitle")
.setNegativeButton("Cancel", getMainExecutor(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Log.i(TAG, "Cancel button clicked");
}
})
.build();
古いバージョンの生体認証プロンプトAPIはまだアルファ版のようです。アルファ版で問題がない場合は、これをbuild.gradle
で使用できます。
compile group: 'androidx.biometric', name: 'biometric', version: '1.0.0-alpha02'
出典: https://mvnrepository.com/artifact/androidx.biometric/biometric/1.0.0-alpha02
ここにリストされているバージョンは2つだけです
出典: https://mvnrepository.com/artifact/androidx.biometric/biometric
ライブラリの説明によると、それは言います
生体認証ライブラリは、Androidアプリケーションに追加できる静的ライブラリです。P以上を実行しているデバイスでBiometricPromptを呼び出し、古いデバイスでは互換性のあるダイアログを表示します。APIを実行しているデバイスと互換性があります14以降。
つまり、必要なのはこの互換ライブラリだけであり、Androidのすべてのバージョンで機能します。上Android 9以下Android 9)の2つの異なるバージョンを保持する必要はありません。
これがandroidx.biometricの私の実装ですRohit5k2が提案しました。 Kotlinですが、問題はないと確信しています。お役に立てれば
fun FragmentActivity.auth(successCallback: () -> Unit, cancelSignal: CancellationSignal = CancellationSignal()) {
if (Build.VERSION.SDK_INT < 23) {
successCallback()
return
}
val biometricPrompt = BiometricPrompt(this, MainThreadExecutor(), object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
successCallback()
}
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
if (errorCode == ERROR_NEGATIVE_BUTTON) {
cancelSignal.cancel()
}
}
})
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(getString(R.string.title))
.setSubtitle(getString(R.string.auth))
.setDescription(getString(R.string.biometric_desc))
.setNegativeButtonText(getString(R.string.biometric_negative))
.build()
biometricPrompt.authenticate(promptInfo)
}
class MainThreadExecutor : Executor {
private val handler = Handler(Looper.getMainLooper())
override fun execute(r: Runnable) {
handler.post(r)
}
}
古いAndroidプロジェクトがある場合(ハイブリッドAndroidアプリであっても))、次の詳細な手順に従います。
だから私はCordova Androidハイブリッドアプリの古いコードを持っていました。Android studio3.2を使用しています。ビルドgradleバージョンは非常に古く、2.8であり、gradleバージョンは3.3でした。
まず最初にAndroidスタジオを最新バージョン3.3.2にアップグレードしました
今、私はプロジェクト全体をandroidXに移行することにしました。以前のバージョンのAndroid studioで、それを実行することさえできません。理由はわかりません。
[リファクタリング]-> [AndroidXに移行]をクリックしたとき。 「gradleバージョンをアップグレードします。gradleバージョンを4.10.1に更新しましたが、5.2にアップグレードしてもエラーが発生します(理由はわかりませんが、Androidはまだ初めてです)」というポップアップが表示されました。 Gradleを3.3.2にビルドします
5.私のbuild.gradle(モジュール:アプリ)は次のようになります:
apply plugin: 'com.Android.application'
buildscript {
repositories {
jcenter{ url "http://jcenter.bintray.com/" }
google()
}
// Switch the Android Gradle plugin version requirement depending on the
// installed version of Gradle. This dependency is documented at
// http://tools.Android.com/tech-docs/new-build-system/version-compatibility
// and https://issues.Apache.org/jira/browse/CB-8143
dependencies {
classpath 'com.Android.tools.build:gradle:3.3.2'
classpath "com.google.gms:google-services:3.0.0" //FCM Config
}
}
これでアプリは正常に同期されます。ビルドはOKです。リファクタリング-> androidXへの移行をもう一度試しました。今回はAndroid studioがコードのリファクタリングを開始し、70のコード変更の提案を提供してくれました。
これらのコードの変更は、主に:import ""のようなヘッダーファイルの変更です。だから私はこのリンクを開きました- https://developer.Android.com/jetpack/androidx/migrate そしてすべてのインポートステートメントを等しいandroidxステートメントに変更しました。
すべての変更をコピーして貼り付けた後、コードを再度コンパイルして同期しました。 3つのリソースとコードコンパイルエラーの後、コードをビルドできました。このプロセス全体には1.2時間かかりました。
最後に、build-extras.gradle(モジュール:アプリ)に生体認証サポートAPIをインポートすることができました。ファイルを見てください:
dependencies {
api 'androidx.appcompat:appcompat:1.0.2'
api "com.squareup.picasso:picasso:2.4.0"
api "com.google.Android.material:material:1.1.0-alpha04"
api "com.google.firebase:firebase-messaging:9.2.0" //FCM Config
api 'com.rmtheis:tess-two:6.0.2'
api 'com.github.bumptech.glide:glide:3.8.0'
api 'androidx.legacy:legacy-support-v4:1.0.0'
api "androidx.biometric:biometric:1.0.0-alpha03"
}
}
最後に、完全なコードをビルドして同期することができました。とても幸せでした。今、私はそれを私のコードに統合するために生体認証API関数を使用する必要があります(このコードは3年前に書かれ、最新の生体認証APIを統合するために私に与えられたことに注意してください)。
はい、私はこのような段階的な答えが必要でした。
それでも助けてくれたすべての人に感謝します。