Хотите знать, как я могу определить, поддерживает ли устройство пользователя Touch ID API? Надеюсь, это логическое значение.
Спасибо!
Хотите знать, как я могу определить, поддерживает ли устройство пользователя Touch ID API? Надеюсь, это логическое значение.
Спасибо!
попробуй это:
- (BOOL)canAuthenticateByTouchId {
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
return [[[LAContext alloc] init] canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil];
}
return NO;
}
или как предлагает @rckoenes:
- (BOOL)canAuthenticateByTouchId {
if ([LAContext class]) {
return [[[LAContext alloc] init] canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil];
}
return NO;
}
ОБНОВЛЕНИЕ
Я забыл, проверьте это: Как можно мы программно определяем, на какой версии iOS работает устройство? чтобы определить SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
if ([LAContext class]) {
вместо проверки версии системы. Так как вас интересует, доступен ли класс и не совсем в системной версии. Вы должны воздержаться от проверки версии системы, либо проверить версию основания, либо просто, если класс или методы доступны.
- person rckoenes; 25.11.2014
Вы должны рассмотреть LAContext
структуру, которая требуется для аутентификации Touch ID.
А параметр LAErrorTouchIDNotAvailable
покажет, поддерживает ли устройство эту функциональность.
Фрагмент кода:
- (IBAction)authenticateButtonTapped:(id)sender {
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
// Authenticate User
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Your device cannot authenticate using TouchID."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
}
Хороший учебник для изучения этой функции здесь .
Проверить ошибку можно с помощью CanEvaluatePolicy
. Если код ошибки -6, это означает, что на этом устройстве нет физического Touch Id. Вы можете сказать из описания ошибки, там написано
Биометрия недоступна на этом устройстве.
Ниже приведен код, если вы используете C# Xamarin:
var context = new LAContext();
NSError AuthError;
if (!context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out AuthError))
{
if ( AuthError != null && AuthError.Code == -6 )
{
var alert = new UIAlertView ("Error", "TouchID not available", null, "BOOO!", null);
alert.Show ();
}
}
В этом поможет эта функция -
-(BOOL)doesThisDeviceSupportTouchIdForLocalAuthentication{
//Checking for 64 bit (armv7s) architecture before including the LAContext as it would give error otherwise.
#if TARGET_CPU_ARM64
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){
return YES;
}
return NO;
#endif
return NO;
}
Цель с
@import LocalAuthentication;
// Get the local authentication context:
LAContext *context = [[LAContext alloc] init];
// Test if fingerprint authentication is available on the device and a fingerprint has been enrolled.
if ([context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil])
{
NSLog(@"Fingerprint authentication available.");
}