Xan*_*Xan 3 security android android-keystore android-biometric-prompt android-biometric
从 android 11 开始,setUserAuthenticationValidityDurationSeconds 已被弃用,取而代之的是 KeyGenParameterSpec.Builder 中的 setUserAuthenticationParameters,但接缝处对以前的版本有任何支持。
那么,最好的解决方案是什么?
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(...)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R)
builder.setUserAuthenticationParameters(timeout, KeyProperties.AUTH_DEVICE_CREDENTIAL | KeyProperties.AUTH_BIOMETRIC_STRONG);
else
//noinspection deprecation
builder.setUserAuthenticationValidityDurationSeconds(timeout);
Run Code Online (Sandbox Code Playgroud)
这个?
您不需要迁移实际的密钥,当您准备好支持 Android 11 时,您可以切换到类似的内容(不要忘记设置compileSdkVersion 30新的 API)
val timeout = 30 //seconds
val builder = KeyGenParameterSpec.Builder(...)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
builder.setUserAuthenticationParameters(timeout,
KeyProperties.AUTH_DEVICE_CREDENTIAL
or KeyProperties.AUTH_BIOMETRIC_STRONG
)
} else {
builder.setUserAuthenticationValidityDurationSeconds(timeout)
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做,因为内部setUserAuthenticationValidityDurationSeconds也在做同样的事情。唯一的例外是如果您调用setUserAuthenticationValidityDurationSeconds超时-1。在这种情况下,新 API 的等效项是builder.setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG).
您可以在此处查看这两种情况的源代码。
PS:上面的代码是 minAPI 24,如果您处于较低的 API 级别,则需要将上面的代码包装在更多构建检查中。