В настоящее время я разрабатываю приложение для iOS, которое позволяет пользователям входить в приложение с помощью TouchID, но сначала они должны сначала установить пароль внутри приложения. Проблема в том, чтобы показать опцию пароля настройки для включения входа в систему TouchID, мне нужно определить, поддерживает ли устройство iOS TouchID.
Используя LAContext и canEvaluatePolicy (см. Ответы здесь, если устройство поддерживает Touch ID), я могу определить, поддерживает ли текущее устройство TouchID, если пользователь установил код доступа на своем устройстве iOS. Вот мой фрагмент кода (я использую Xamarin, поэтому он в С#):
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;
}
Если пользователь не установил пароль устройства, authError просто выдаст ошибку " PasscodeNotSet " независимо от того, поддерживает ли устройство TouchID или нет.
Если пользовательское устройство поддерживает TouchID, я хочу всегда показывать опцию TouchID в своем приложении независимо от того, установил ли пользователь пароль на своем устройстве (я просто предупрежу пользователя, чтобы он сначала установил пароль на своем устройстве). И наоборот, если пользовательское устройство не поддерживает TouchID, я, очевидно, не хочу показывать опцию TouchID в моем приложении.
Итак, мой вопрос: есть ли хороший способ последовательно определить, поддерживает ли устройство iOS TouchID, независимо от того, установил ли пользователь пароль на своем устройстве?
Единственный обходной путь, о котором я могу подумать, - это определить архитектуру устройства (на который дан ответ в разделе "Определить, является ли устройство iOS 32- или 64-разрядным)", поскольку TouchID поддерживается только на устройствах с 64-разрядной архитектурой. Тем не менее, я смотрю, есть ли лучший способ сделать это.