web-dev-qa-db-ja.com

Android 9.0より前のバージョンでBiometricPromptAPIを使用する方法

指紋認証を使用してユーザーを認証するために、生体認証プロンプト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でこれを機能させるにはどうすればよいですか?これがスクリーンショットです。 enter image description here

4
karan

古いバージョンの生体認証プロンプト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つだけです

  • 1.0.0-alpha01
  • 1.0.0-alpha02

出典: https://mvnrepository.com/artifact/androidx.biometric/biometric

ライブラリの説明によると、それは言います

生体認証ライブラリは、Androidアプリケーションに追加できる静的ライブラリです。P以上を実行しているデバイスでBiometricPromptを呼び出し、古いデバイスでは互換性のあるダイアログを表示します。APIを実行しているデバイスと互換性があります14以降。

つまり、必要なのはこの互換ライブラリだけであり、Androidのすべてのバージョンで機能します。上Android 9以下Android 9)の2つの異なるバージョンを保持する必要はありません。

3
Rohit5k2

これが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)
    }
}
3
Ruslan Aliev

古いAndroidプロジェクトがある場合(ハイブリッドAndroidアプリであっても))、次の詳細な手順に従います。

  1. だから私はCordova Androidハイブリッドアプリの古いコードを持っていました。Android studio3.2を使用しています。ビルドgradleバージョンは非常に古く、2.8であり、gradleバージョンは3.3でした。

  2. まず最初にAndroidスタジオを最新バージョン3.3.2にアップグレードしました

  3. 今、私はプロジェクト全体をandroidXに移行することにしました。以前のバージョンのAndroid studioで、それを実行することさえできません。理由はわかりません。

  4. [リファクタリング]-> [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

    }
   }
  1. これでアプリは正常に同期されます。ビルドはOKです。リファクタリング-> androidXへの移行をもう一度試しました。今回はAndroid studioがコードのリファクタリングを開始し、70のコード変更の提案を提供してくれました。

  2. これらのコードの変更は、主に:import ""のようなヘッダーファイルの変更です。だから私はこのリンクを開きました- https://developer.Android.com/jetpack/androidx/migrate そしてすべてのインポートステートメントを等しいandroidxステートメントに変更しました。

  3. すべての変更をコピーして貼り付けた後、コードを再度コンパイルして同期しました。 3つのリソースとコードコンパイルエラーの後、コードをビルドできました。このプロセス全体には1.2時間かかりました。

  4. 最後に、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"
        }
    }
    
  5. 最後に、完全なコードをビルドして同期することができました。とても幸せでした。今、私はそれを私のコードに統合するために生体認証API関数を使用する必要があります(このコードは3年前に書かれ、最新の生体認証APIを統合するために私に与えられたことに注意してください)。

はい、私はこのような段階的な答えが必要でした。

それでも助けてくれたすべての人に感謝します。

0
Rakesh