【发布时间】:2015-05-30 13:13:37
【问题描述】:
我目前正在开发一个 iOS 应用程序,它允许用户使用 TouchID 登录应用程序,但首先他们必须先在应用程序内设置密码。问题是,要显示启用 TouchID 登录的设置密码选项,我需要检测 iOS 设备是否支持 TouchID。
使用 LAContext 和 canEvaluatePolicy(就像这里的答案 If Device Supports Touch ID),我能够确定当前设备是否支持 TouchID如果用户在他们的 iOS 设备上设置了密码。这是我的代码 sn-p(我使用的是 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 位架构的设备上受支持。不过,我正在寻找是否有更好的方法来做到这一点。
【问题讨论】:
标签: ios iphone ipad xamarin touch-id