4

看起来BiometricPrompt 1.0.0 有一个错误,它保持在不可见状态并抛出该异常

生病在答案中提出解决方法

编辑(感谢@Isai Damier):

重现方式:

  1. 打开生物识别提示
  2. 按返回按钮 - 关闭提示
  3. 再次按下并退出应用程序
  4. 返回应用程序 - 尝试再次打开提示
4

1 回答 1

2

此修复是在生物识别提示版本为 1.0.0 时引入的。此问题在 1.0.1 中重现

//------------------------------------------------ -------------------------

我想出了一个解决方法——在用户取消时在提示符下调用“cancelAuthentication”。

完整代码如下(在 react native 应用程序中使用 - 这就是 promise 的原因):

    private const val E_BIOMETRIC_ERR = "E_FINGER_PRINT_ERR"
    private const val OPENED = "success"
    private var bp: BiometricPrompt? = null
    private var mAuthenticationPromise: Promise? = null

    fun authenticate(activity: AppCompatActivity, title: String,
                     subTitle: String, description: String, authenticationPromise: Promise) {
        mAuthenticationPromise = authenticationPromise

        val executor = Executors.newSingleThreadExecutor()

        bp?.cancelAuthentication()
        bp = getBiometricPrompt(activity, executor)

        val promptInfo = BiometricPrompt.PromptInfo.Builder()
                .setTitle(title)
                .setSubtitle(subTitle)
                .setDescription(description)
                .setDeviceCredentialAllowed(true)
                .build()

        bp!!.authenticate(promptInfo)

    }



    private fun getBiometricPrompt(activity: AppCompatActivity, executor: Executor): BiometricPrompt {
        return BiometricPrompt(activity, executor, object : BiometricPrompt.AuthenticationCallback() {

            override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                super.onAuthenticationSucceeded(result)
                mAuthenticationPromise?.resolve(OPENED)
            }

            override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                super.onAuthenticationError(errorCode, errString)
                bp!!.cancelAuthentication()
            }

            override fun onAuthenticationFailed() {
                super.onAuthenticationFailed()
                bp!!.cancelAuthentication()
            }
        })
    }

我希望它可以帮助任何人 - 干杯

于 2019-11-13T22:34:37.963 回答