- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我第一次在 iOS 上尝试生物认证。
我的 touch id 身份验证代码运行良好。但如果 touch id 失败,我想使用设备 PIN 码进行身份验证。但这仅在第二次 touch id 尝试失败后才起作用。第一次失败时,会显示一 strip 有“尝试密码”按钮的警报。但是当触摸它时,它不会转到屏幕输入设备密码,而是再次显示输入触摸 ID 警报。
现在,如果触摸 ID 再次失败并且我触摸“输入密码”按钮。将出现输入设备 PIN 码的屏幕。
但是为什么第一次不起作用呢?来自苹果文档:
The fallback button is initially hidden. For Face ID, after the first unsuccessful authentication attempt, the user will be prompted to try Face ID again or cancel. The fallback button is displayed after the second unsuccessful Face ID attempt. For Touch ID, the fallback button is displayed after the first unsuccessful Touch ID attempt.
我发现它可以与 Google Pay 等应用程序配合使用。我在这里做错了什么。
这是我的代码。
public partial class AuthenticationViewController : UIViewController
{
private LAContext context;
public AuthenticationViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
if (UserDefaultsManager.RememberMe)
TryAuthenticate();
else
AppDelegate.Instance.GotoLoginController();
}
private void TryAuthenticate()
{
context = new LAContext();
NSError error = null;
if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0) &&
context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out error)) {
// Biometry is available on the device
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics,
"Unlock SmartFHR", HandleLAContextReplyHandler);
} else {
// Biometry is not available on the device
if (error != null) {
HandleLAContextReplyHandler(false, error);
} else {
TryDevicePinAuthentication(error);
}
}
}
private void TryDevicePinAuthentication(NSError error)
{
if (context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthentication, out error)) {
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthentication,
"Unlock SmartFHR", HandleLAContextReplyHandler);
}
}
private void HandleLAContextReplyHandler(bool success, NSError error)
{
DispatchQueue.MainQueue.DispatchAsync(() => {
if (success) {
ContinueAfterAuthSuccess();
return;
}
switch (error.Code) {
case (long)LAStatus.UserCancel:
AppDelegate.Instance.GotoLoginController(true);
break;
case (long)LAStatus.UserFallback:
case (long)LAStatus.BiometryNotEnrolled:
case (long)LAStatus.BiometryNotAvailable:
TryDevicePinAuthentication(error);
break;
}
});
}
private void ContinueAfterAuthSuccess()
{
if (Storyboard.InstantiateViewController("SplashController") is SplashController vc)
AppDelegate.Instance.Window.RootViewController = vc;
}
}
当第一次触摸 ID 尝试失败并且我触摸“尝试密码”按钮时,我看到它调用了 HandleLAContextReplyHandler,并带有错误代码 LAStatus.UserFallback。
最佳答案
LAPolicyDeviceOwnerAuthentication 的文档说:
If Touch ID or Face ID is available, enrolled, and not disabled, the user is asked for that first.
因此,当您使用 TryDevicePinAuthentication
显示身份验证窗口时,它仍然会首先显示生物识别窗口。
如果你想让用户输入密码来进行身份验证,我认为DeviceOwnerAuthentication
就足够了。
private void TryAuthenticate()
{
context = new LAContext();
// if Biometry is available on the device, it will show it first
context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthentication, "Unlock SmartFHR", HandleLAContextReplyHandler);
}
这样,只需处理用户取消本次认证的情况即可。因为当用户点击后备按钮时,它会自动弹出一个密码输入窗口:
private void HandleLAContextReplyHandler(bool success, NSError error)
{
DispatchQueue.MainQueue.DispatchAsync(() => {
if (success)
{
ContinueAfterAuthSuccess();
return;
}
switch (error.Code)
{
case (long)LAStatus.UserCancel:
AppDelegate.Instance.GotoLoginController(true);
break;
default:
break;
}
});
}
关于iOS 生物认证 : Try Password work only after the second biometric fail attempt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394111/
我需要根据模板化参数返回正确的类型。我收到如下错误:有人可以建议解决这个问题的方法是什么吗?提前致谢。 error: no matching function for call to âsecond:
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to convert milliseconds to “hh:mm:ss” format? 我敢打赌很多人都
在脚本中,我使用 AJAX 从脚本请求数据。返回的数据以JSON格式返回。该脚本返回秒数,我正在寻找一种简单的方法来生成倒计时,显示返回值生成的分钟和秒数。 例如,如果脚本返回 90,我需要每秒显示一
为什么以下不抛出错误并返回 59 秒? # 2016-02-02T16:05:59+00:00 DateTime.strptime('02-02-2016 04:05:60 PM', '%d-%m-%
我想重新排列一个数据框,以便 1) 第一列始终保持在最前面,并且 2) 其余列的后半部分被拆分为每秒出现。 注意下面的例子 请查看示例数据: # Example data N # 1 A
我正在使用一个函数 HideFrame 来隐藏/显示两个 iframe 的左侧。该函数由使用按钮 image1 和 image2 的 onclick() 事件调用。 不幸的是,当我单击 image1
这个问题在这里已经有了答案: What is a non-capturing group in regular expressions? (18 个答案) 关闭 3 年前。 我正在尝试理解和练习以下
我可以请求一些关于子查询的帮助吗? 当我在本地 XAMP mySQL 数据库上运行查询时,查询需要 2 秒才能完成。然而,在我的网络服务器上使用相同的数据库,相同的查询需要 98 秒以上才能返回相同的
此处 unsigned long EVTime::seconds() 方法与 ptime p(d,seconds(s)); 冲突。如果我将 ptime seconds(s) 更改为分钟/小时,那么它工
GetSystemTimePreciseAsFileTime:以尽可能高的精度 (<1us) 检索当前系统日期和时间。 这给了我们一个 FILETIME 然后我们将它传递给:文件时间到系统时间这给了我
我现在面临的问题: 我有一个应用程序,它包含第一个 Activity MainActivity 和第二个名为 SecondActivity 的 Activity。现在,在这两个中我都需要一个单独的表:
我不明白为什么这个方法不起作用。使用 isEqualToDate: 时是否查看秒数和分秒数? //Test that the NSDate category's DatePlusDays: metho
在 http://www.cplusplus.com/reference/map/map/insert/ ,我对做 ret.first->second 的推理感到困惑或 it->second访问第二个
使用 Bash 脚本将 00:20:40.28 (HH:MM:SS) 转换为秒的简单方法是什么? 分秒可以剪掉,不是必须的。 最佳答案 试试 awk。作为奖励,您可以保留分秒。 echo "00:20
我正在尝试计算设定的日期时间对象和当前时间之间耗时。我希望它能够以这种格式出现 DD:HH:MM:SS 其中 DD 是天,HH 是小时,MM 是分钟,SS 是秒。我能够得到总天数、总小时数、总分钟数和
我仍然很新...所以, 我的问题的症结可以概括为:我正在准备将数据发送到远程API,这要求此字段为time.Duration类型,而我试图将其作为秒类型的字符串类型###s发送,并且time.Pars
我附和这个: php> echo date("Y-m-d\TH:i:s"); 2011-05-27T11:21:23 如何使用日期函数来获取这种日期格式: 2011-01-12T14:
我很好奇两者之间有什么区别。 irb(main):001:0> require 'active_support/core_ext' => true irb(main):002:0> 1.second.
浏览一些代码,我发现了两种每秒做某事的方法: for { fmt.Println("This is printed every second") time.Sleep(time.Sec
我正在使用 Sidekiq 在 AWS 服务器上创建 PDF 文档以在后台处理此作业。 在创建 PDF 文件的过程中,[Rails] 应用程序正在汇集数据库以检查是否创建了 PDF 文件(间隔:2 秒
我是一名优秀的程序员,十分优秀!