gpt4 book ai didi

ios - 在不设置密码的情况下确定 iOS 设备是否支持 TouchID

转载 作者:IT王子 更新时间:2023-10-29 08:05:05 25 4
gpt4 key购买 nike

我目前正在开发一个 iOS 应用程序,使用户能够使用 TouchID 登录应用程序,但首先他们必须先在应用程序内设置密码。问题是,要显示启用 TouchID 登录的设置密码选项,我需要检测 iOS 设备是否支持 TouchID。

使用 LAContext 和 canEvaluatePolicy(就像这里的答案 If Device Supports Touch ID ),我能够确定当前设备是否支持 TouchID 如果用户在他们的 iOS 设备上设置了密码。这是我的代码片段(我使用的是 Xamarin,所以它在 C# 中):

static bool DeviceSupportsTouchID () 
{
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
var context = new LAContext();
NSError authError;
bool touchIDSetOnDevice = context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out authError);

return (touchIDSetOnDevice || (LAStatus) Convert.ToInt16(authError.Code) != LAStatus.TouchIDNotAvailable);
}

return false;
}

如果用户没有设置设备密码,无论设备是否支持TouchID,authError 都会返回“PasscodeNotSet”错误。

如果用户的设备支持 TouchID,我希望始终在我的应用程序中显示 TouchID 选项,无论用户是否在他们的设备上设置了密码(我只会警告用户先在他们的设备上设置密码)。反之亦然,如果用户的设备不支持 TouchID,我显然不想在我的应用中显示 TouchID 选项。

所以我的问题是,有没有一种很好的方法可以一致地确定 iOS 设备是否支持 TouchID,而不管用户是否在他们的设备上设置了密码?

我能想到的唯一解决方法是确定设备的架构(在 Determine if iOS device is 32- or 64-bit 中回答),因为 TouchID 仅在具有 64 位架构的设备上受支持。不过,我正在寻找是否有更好的方法来做到这一点。

最佳答案

总结下面的讨论,当用户没有在他们的设备上设置密码时,暂时无法确定设备是否真正支持 TouchID。

我已经在 Apple bug reporter 上报告了这个 TouchID 漏洞。那些想关注这个问题的人可以在 Open Radar 上看到它:http://www.openradar.me/20342024

感谢@rckoenes 的输入:)

编辑

原来有人已经报告了类似的问题 (#18364575)。以下是 Apple 对此问题的回复:

“工程部门已根据以下信息确定此问题的行为符合预期:

如果未设置密码,您将无法检测到 Touch ID 的存在。设置密码后,canEvaluatePolicy 最终将返回 LAErrorTouchIDNotAvailable 或 LAErrorTouchIdNotEnrolled,您将能够检测 Touch ID 存在/状态。

如果用户在带有 Touch ID 的手机上禁用密码,他们知道他们将无法使用 Touch ID,因此应用程序不需要检测 Touch ID 的存在或推广基于 Touch ID 的功能。 "

所以.....Apple 的最终回答是。 :(

注意:报告此问题的人提出了类似的 StackOverflow 问题 -> iOS8 check if device has Touch ID(想知道为什么尽管我进行了广泛的搜索,但我之前没有找到这个问题......)

关于ios - 在不设置密码的情况下确定 iOS 设备是否支持 TouchID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29279845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com