我刚刚在三星看到这个错误,并且似乎是在添加新指纹时引起的 . 在我们的代码中,我们期望在signature.initSign()期间抛出KeyPermenantlyInvalidatedException . 这不会发生,并且初始化的签名在CryptoObject内成功传递到FingerprintManager . 然后成功验证指纹并调用onAuthenticationSucceeded . 尝试调用signature.update(byte [] bytes)时发生错误 .
我认为预期的行为实际上是抛出KeyInvalidatedException,但我不确定我们是否可以期望这个被解决 . 我的解决方案是在onAuthenticationSucceeded方面捕获它 .
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
Log.d(LOG_TAG, "Device Authentication Succeeded");
try {
Signature signature = result.getCryptoObject().getSignature();
String authData = getAuthData();
signature.update(authData.getBytes());
// do something with signature
} catch (SignatureException e) {
Log.d(LOG_TAG, e.getMessage());
if(e.getMessage() != null && e.getMessage().contains("Key user not authenticated")) {
// handle as if were KeyPermanentlyInvalidatedException
} else {
Log.d(LOG_TAG, e.getMessage());
// handle as regular error
}
}
}