Если устройство поддерживает Touch ID

Хотите знать, как я могу определить, поддерживает ли устройство пользователя Touch ID API? Надеюсь, это логическое значение.

Спасибо!


person Harry    schedule 25.11.2014    source источник


Ответы (5)


попробуй это:

- (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

person Mateusz    schedule 25.11.2014
comment
Лучше использовать if ([LAContext class]) { вместо проверки версии системы. Так как вас интересует, доступен ли класс и не совсем в системной версии. Вы должны воздержаться от проверки версии системы, либо проверить версию основания, либо просто, если класс или методы доступны. - person rckoenes; 25.11.2014
comment
Просто добавить: это не определяет, имеет ли устройство функцию TouchID или нет. Он только проверяет, включен ли TouchID в настройках устройства. Ответ от Сити Камалудина ниже лучше. - person GeneCode; 05.07.2017

Вы должны рассмотреть 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];

    }
}

Хороший учебник для изучения этой функции здесь .

person Oleg Gordiichuk    schedule 25.11.2014

Проверить ошибку можно с помощью 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 ();
            }
        }
person Siti Kamaluddin    schedule 19.04.2016

В этом поможет эта функция -

-(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;
}
person mmmanishs    schedule 12.03.2015

Цель с

@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.");
}
person TwoPlay    schedule 04.09.2016
comment
Добро пожаловать в Stack Overflow! Как ответить может помочь вам написать ответы, которые будут приняты и одобрены. В вашем случае код должен быть помещен в блок кода. - person zhon; 04.09.2016