如何替换已弃用的KeyGenParameterSpec.Builder.setUserAuthenticationVal



从android 11 setUserAuthenticationValidityDurationSeconds不赞成在KeyGenParameterSpec中的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);

这个吗?

你不需要迁移实际的密钥,当你准备好支持Android 11时,你可以切换到这样的东西,(不要忘记为新的api设置compileSdkVersion 30)

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)
}

可以这样做,因为内部setUserAuthenticationValidityDurationSeconds也在做同样的事情。唯一的例外是,如果您调用setUserAuthenticationValidityDurationSeconds-1作为超时。在本例中,与新API等价的是builder.setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG)

您可以在这里查看这两种情况的源代码。

PS:上面的代码是minAPI 24,如果您处于较低的API级别,则需要将上面的代码包装在更多的构建检查中。

相关内容

  • 没有找到相关文章

最新更新