Можно ли выполнить аутентификацию с использованием только пароля, даже если у устройства есть сенсорная идентификация в ios, swift

Я хочу аутентифицироваться только используя PassCode даже устройство имеет Touch ID Особенность. я использую .deviceOwnerAuthentication Оцените метод политики. когда я использую это,

  • Если пользователь зарегистрировал Touch ID -> всегда спрашивать Touch ID
  • Если пользователь не зарегистрировал Touch ID ->, тогда запрашивайте только пароль

то, что я хочу, это даже пользователь зарегистрировался для touch idспроси только за passcode, надеюсь, что ваша помощь с этим.

1 ответ

Это можно сделать с помощью Security framework, используя SecAccessControl установив SecAccessControlCreateFlags как .devicePasscode.

Добавьте элемент связки ключей,

let secAccessControlbject: SecAccessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
                                                                      kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
                                                                      .devicePasscode,
                                                                      nil)!
    let dataToStore = "AnyData".data(using: .utf8)!


    let insertQuery: NSDictionary = [
        kSecClass: kSecClassGenericPassword,
        kSecAttrAccessControl: secAccessControlbject,
        kSecAttrService: "PasscodeAuthentication",
        kSecValueData: dataToStore as Any,
    ]

    let insertStatus = SecItemAdd(insertQuery as CFDictionary, nil)

Для проверки подлинности с помощью экрана пароля откройте сохраненный элемент,

 let query: NSDictionary = [
        kSecClass:  kSecClassGenericPassword,
        kSecAttrService  : "PasscodeAuthentication",
        kSecUseOperationPrompt : "Sign in"
    ]

    var typeRef : CFTypeRef?

    let status: OSStatus = SecItemCopyMatching(query, &typeRef) //This will prompt the passcode.

    if (status == errSecSuccess)
    {
       print("Authentication Success")
    }

@Anuradh, так как мы не можем использовать код доступа iOS в нашем приложении для аутентификации, если мы не используем TouchID, я не думаю, что есть способ запросить только экран пароля по умолчанию. Это частный API. Ваш лучший вариант - использовать экран с пользовательским паролем. Вы можете проверить этот "ABPadLockScreen": https://github.com/abury/ABPadLockScreen

Другие вопросы по тегам