BiometricPrompt.Authenticate() 不等待用户验证
BiometricPrompt.Authenticate() doesn't wait for user to authenticate
我正在尝试通过指纹为我的 Xamarin.Forms 移动应用程序实施用户身份验证,为此我正在使用 Android.Hardware.Biometrics 库。这是我用来实例化和显示提示的代码:
public bool Authenticate()
{
// Create biometric prompt
biometricPrompt = new BiometricPrompt.Builder(Android.App.Application.Context)
.SetTitle("Authenticate")
//this is most definitely wrong but just ignore this
.SetNegativeButton("Cancel", Android.App.Application.Context.MainExecutor, new Android.App.DatePickerDialog(Android.App.Application.Context))
.Build();
BiometricAuthenticationCallback authCallback = new BiometricAuthenticationCallback();
biometricPrompt.Authenticate(new CryptoObjectHelper().BuildCryptoObject(), new Android.OS.CancellationSignal(), Android.App.Application.Context.MainExecutor, authCallback);
return authCallback.authSuccessful;
}
这是 BiometrcAuthenticationCallback class:
class BiometricAuthenticationCallback : BiometricPrompt.AuthenticationCallback
{
public bool authSuccessful = false;
public override void OnAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result)
{
authSuccessful = true;
}
}
理想情况下,BiometricPrompt.Authenticate() 会停止代码执行,直到用户与指纹扫描仪交互,这样您才能从 authCallback 读取结果,对吗?然而,情况并非如此......该应用程序确实提示用户使用他的指纹进行身份验证,但该应用程序只是继续 运行,因此它立即在下一行 returns“false”。 ..
我做错了什么?在用户确认他们的身份之前,我是否应该自己停止代码执行?到目前为止我看到的所有代码示例都没有这样做...
我认为你的函数逻辑public bool Authenticate()
没有意义。
你调用下面的代码后,为什么要马上调用return函数(return authCallback.authSuccessful;
)?由于此时我们还没有使用指纹进行身份验证,因此代码 return authCallback.authSuccessful;
将立即 return false
。
BiometricAuthenticationCallback authCallback = new BiometricAuthenticationCallback();
biometricPrompt.Authenticate(new CryptoObjectHelper().BuildCryptoObject(), new Android.OS.CancellationSignal(), Android.App.Application.Context.MainExecutor, authCallback);
对此,您可以参考以下代码:
https://gist.github.com/justintoth/49484bb0c3a0494666442f3e4ea014c0
我正在尝试通过指纹为我的 Xamarin.Forms 移动应用程序实施用户身份验证,为此我正在使用 Android.Hardware.Biometrics 库。这是我用来实例化和显示提示的代码:
public bool Authenticate()
{
// Create biometric prompt
biometricPrompt = new BiometricPrompt.Builder(Android.App.Application.Context)
.SetTitle("Authenticate")
//this is most definitely wrong but just ignore this
.SetNegativeButton("Cancel", Android.App.Application.Context.MainExecutor, new Android.App.DatePickerDialog(Android.App.Application.Context))
.Build();
BiometricAuthenticationCallback authCallback = new BiometricAuthenticationCallback();
biometricPrompt.Authenticate(new CryptoObjectHelper().BuildCryptoObject(), new Android.OS.CancellationSignal(), Android.App.Application.Context.MainExecutor, authCallback);
return authCallback.authSuccessful;
}
这是 BiometrcAuthenticationCallback class:
class BiometricAuthenticationCallback : BiometricPrompt.AuthenticationCallback
{
public bool authSuccessful = false;
public override void OnAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result)
{
authSuccessful = true;
}
}
理想情况下,BiometricPrompt.Authenticate() 会停止代码执行,直到用户与指纹扫描仪交互,这样您才能从 authCallback 读取结果,对吗?然而,情况并非如此......该应用程序确实提示用户使用他的指纹进行身份验证,但该应用程序只是继续 运行,因此它立即在下一行 returns“false”。 ..
我做错了什么?在用户确认他们的身份之前,我是否应该自己停止代码执行?到目前为止我看到的所有代码示例都没有这样做...
我认为你的函数逻辑public bool Authenticate()
没有意义。
你调用下面的代码后,为什么要马上调用return函数(return authCallback.authSuccessful;
)?由于此时我们还没有使用指纹进行身份验证,因此代码 return authCallback.authSuccessful;
将立即 return false
。
BiometricAuthenticationCallback authCallback = new BiometricAuthenticationCallback();
biometricPrompt.Authenticate(new CryptoObjectHelper().BuildCryptoObject(), new Android.OS.CancellationSignal(), Android.App.Application.Context.MainExecutor, authCallback);
对此,您可以参考以下代码:
https://gist.github.com/justintoth/49484bb0c3a0494666442f3e4ea014c0