- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用生物识别身份验证对话框,但我的 cryptoObject 始终为空。我有一个 fragment ,但我也直接从 Activity 中尝试过。
这是我的代码,
private Handler biometricPromptHandler = new Handler();
private Executor executor = command -> biometricPromptHandler.post(command);
private void showBiometricPrompt( String title, String description,
BiometricsCompatCallback compatCallback) {
BiometricPrompt.PromptInfo promptInfo =
new BiometricPrompt.PromptInfo.Builder()
.setTitle(title)
.setSubtitle(description)
.setNegativeButtonText("Cancel")
.build();
BiometricPrompt biometricPrompt = new BiometricPrompt((FragmentActivity) context,
executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode,
@NonNull CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
compatCallback.onAuthenticationError(errorCode, errString);
Log.d("onAuthenticationError", ": ");
}
@Override
public void onAuthenticationSucceeded(
@NonNull BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Log.d("result", ": "+(result.getCryptoObject()));
BiometricPrompt.CryptoObject authenticatedCryptoObject =
result.getCryptoObject();
Log.d("onAuthentionSucceeded", ": "+(authenticatedCryptoObject==null));
if (authenticatedCryptoObject != null) {
cipher = authenticatedCryptoObject.getCipher();
Log.d("onAuthentionSucceeded", ": ");
compatCallback.onAuthenticationSuccessful(cipher);
}else {
Log.d("cipher", "onAuthenticationSucceeded: ");
}
}
@Override
public void onAuthenticationFailed() {
Log.d("onAuthenticationFailed", ": ");
super.onAuthenticationFailed();
compatCallback.onAuthenticationFailed();
}
});
biometricPrompt.authenticate(promptInfo);
}
有人知道我做错了什么吗?
最佳答案
您需要在authenticate
方法的第二个参数中提供一个Cipher,否则它将始终返回null
。
使用
authenticate(PromptInfo info, CryptoObject crypto)
代替
authenticate(PromptInfo info)
查看this this repository 中的教程和示例项目.你可以使用这样的东西:
BiometricPrompt.CryptoObject cryptoObject = new BiometricPrompt.CryptoObject(getEncryptCipher(createKey()));
biometricPrompt.authenticate(promptInfo, cryptoObject);
使用(取决于你想要的加密):
private SecretKey createKey() throws NoSuchProviderException, NoSuchAlgorithmException, InvalidAlgorithmParameterException {
String algorithm = KeyProperties.KEY_ALGORITHM_AES;
String provider = "AndroidKeyStore";
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm, provider);
KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder("MY_KEY", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
.setUserAuthenticationRequired(true)
.build();
keyGenerator.init(keyGenParameterSpec);
return keyGenerator.generateKey();
}
private Cipher getEncryptCipher(Key key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException {
String algorithm = KeyProperties.KEY_ALGORITHM_AES;
String blockMode = KeyProperties.BLOCK_MODE_CBC;
String padding = KeyProperties.ENCRYPTION_PADDING_PKCS7;
Cipher cipher = Cipher.getInstance(algorithm+"/"+blockMode+"/"+padding);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher;
}
关于java - BiometricPrompt.AuthenticationResult 中的 CryptoObject 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59040132/
在我的 Android 应用程序中,我使用此代码要求用户进行生物识别身份验证: val title = "..." val subtitle = "..." BiometricPrompt.Promp
我在 android 设备中自定义 biometricPrompt 有问题。我只使用指纹授权,但一些具有 android 9.0 的设备(例如三星 Galaxy S10+)授权使用指纹(如果允许)但与
问题 我们正在更改应用程序内的区域设置,除了指纹对话框中的提示外,一切正常。无论我们设置什么语言,我们总是有英文提示: 触摸指纹传感器 不认识 等... 环境 使用的组件:androidx.biome
我已尝试在 Pixel 2 设备上设置面部解锁,但 BiometricPrompt 不显示面部解锁对话框,但始终显示相同的指纹对话框。BiometricPrompt 身份验证方法也解释说,它仅适用于指
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
问题 生物特征认证虹膜和面部检测不提示biometricPrompt.authenticate(**crypto**, promptInfo)称呼。 来源引用: Securing data with
在我的项目中,我们使用 BiometricPrompt 添加了这个生物特征认证功能。可以在应用程序的设置中启用生物识别功能,但如果用户设备支持面部生物识别功能,应用程序也需要显示。 根据我的研究,检查
我们可以修改/定制我们的 BiometricPrompt ? 例如,现在我像这样使用 smth: BiometricPrompt.Builder(AppResources.appContext)
在 Android 开发者引用中,我发现了这样的引用: This call warms up the biometric hardware, displays a system-provided di
是否可以更改 BiometricPrompt(API 级别 28)的图标指纹?谢谢。 最佳答案 不幸的是没有。如果我们以官方方式谈论 AndroidX 中新的 BiometricPrompt 实现(2
我找不到支持旧 API 级别的 BiometricPrompt 支持库。但他们提到会有 androidX 支持库。我找不到任何... 最佳答案 在这里您可以找到 official documentat
以前,FingerprintManager 可用于处理指纹身份验证,并且不依赖于 Activity 来通过系统对话框。它可以像任何传感器管理器一样在任何地方使用。 现在,谷歌已经在https://de
我在我的应用程序中使用 BiometricPrompt。它运行良好,并在调用 authenticate() 方法时显示对话框。但是,当我在对话框外单击时,此对话框会关闭。如何预防?如何使 Biomet
我正在使用 androidx.biometric:biometric:1.0.0-beta02 中的 BiometricPrompt 进行身份验证。但是我遇到了一个非常奇怪的问题。 我第一次调用 bi
我想在应用程序启动后立即使用生物识别(指纹)登录。 该应用程序使用托管 Activity 并加载带有生物特征的登录 fragment (androidx.biometric:biometric:1.2
DayNight Theme 有四种情况: 设备 - 深色 模式,应用程序 - 深色 模式 设备 - 灯光 模式,应用程序 - 灯光 模式 设备 - 深色 模式,应用程序 - 灯光 模式 设备 - 灯
我正在使用新的BiometricPrompt我的应用程序中的 Android P (API 28) 中的 API。 (我实际上在基于 this project 的包装器中使用它,以便它也可以在较旧的设
当我从 this 复制以下代码时developer.android.com 关于在您的 android 应用中添加生物特征认证的教程: BiometricPrompt.PromptInfo promp
这是我在 Android P 中显示指纹验证提示的代码: private void displayBiometricPrompt() { DialogInterface.OnClickList
我正在使用 BiometricPrompt 类实现生物识别身份验证。 如何在调用BiometricPrompt#authenticate 方法之前检查硬件是否可用? 如何查看已注册的生物特征? 如何调
我是一名优秀的程序员,十分优秀!