如何替换已弃用的 KeyGenParameterSpec.Builder.setUserAuthenticationValidityDurationSeconds?
How to replace deprecated KeyGenParameterSpec.Builder.setUserAuthenticationValidityDurationSeconds?
来自 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);
这个?
你不需要迁移实际的密钥,当你准备好支持 Android 11 时你可以切换到这样的东西,(不要忘记设置 compileSdkVersion 30
新 APIs)
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
也在做同样的事情。唯一的例外是如果您使用 -1
作为超时调用 setUserAuthenticationValidityDurationSeconds
。在这种情况下,新 API 的等价物是 builder.setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG)
.
您可以查看 here 两种情况的源代码。
PS: The code above is minAPI 24, you need to wrap the code above in more build checks if you are at a lower API level.
来自 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);
这个?
你不需要迁移实际的密钥,当你准备好支持 Android 11 时你可以切换到这样的东西,(不要忘记设置 compileSdkVersion 30
新 APIs)
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
也在做同样的事情。唯一的例外是如果您使用 -1
作为超时调用 setUserAuthenticationValidityDurationSeconds
。在这种情况下,新 API 的等价物是 builder.setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG)
.
您可以查看 here 两种情况的源代码。
PS: The code above is minAPI 24, you need to wrap the code above in more build checks if you are at a lower API level.