Можно ли выполнить аутентификацию с использованием только пароля, даже если у устройства есть сенсорная идентификация в 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