Есть ли способ получить доступ к данным из почтового ящика iPhone (SMS) в приложение ios, чтобы выполнить автоматическую проверку OTP, как в Android? Буду благодарен за вашу помощь.
Автоматическая проверка OTP в iOS?
Ответы (13)
В iOS 12 Apple представила функцию под названием Security Code AutoFill
.
Чтобы использовать это в своем приложении, все, что вам нужно сделать, это установить textContentType
свойство oneTimeCode
представления ввода UITextField
.
otpTextField.textContentType = .oneTimeCode
ПРИМЕЧАНИЕ. Автозаполнение кода безопасности работает только с системной клавиатурой, но не с пользовательской клавиатурой.
Когда вы получите OTP, он будет выглядеть примерно так:
Также важно, чтобы полученное вами текстовое сообщение содержало что-то с "кодом", например
"ваш код доступа: 123456"
or
«12345 - это ваш код для входа»
что-то в этом роде.
НЕТ!
Ваше приложение: 12345
вы можете проверить, будет ли код в вашем текстовом сообщении работать с типом .oneTimeCode, нажав подчеркнутый код в вашем сообщении. Если появится диалоговое окно с надписью «скопировать код», все готово. В противном случае вам может потребоваться изменить текст сообщения.
ОБНОВЛЕНИЕ
Начиная с iOS 12, Apple будет поддерживать автозаполнение пароля в UITextField, UITextView и любом настраиваемом представлении, использующем протокол UITextInput. Системная клавиатура задайте для textContentType значение .oneTimeCode.
1) Использование кода
singleFactorCodeTextField.textContentType = .oneTimeCode
2) Использование раскадровки / XIB
Выберите _2 _ / _ 3_ в
storyboard/XIB
щелкните. Щелкните «Инспектор атрибутов». Перейдите к функции ввода текста, щелкните Тип содержимого и выберите одноразовый временной код - и готово.
С этим UITextContentType
набором операционная система будет автоматически определять коды подтверждения из Сообщений.
Предупреждение
Если вы используете настраиваемое представление ввода для текстового поля ввода кода безопасности, iOS не сможет отобразить необходимый интерфейс автозаполнения.
Для получения дополнительной информации вы можете проверить его на странице разработчика Apple oneTimeCode strong >
А также просмотрите WWDC 2018, сессия 204 - Автоматические надежные пароли и автозаполнение кода безопасности strong> и перейдите к 24:28 для автоматического предварительного заполнения одноразового пароля.
В настоящее время для iOS 12 и более поздних версий вы можете использовать Автозаполнение кода безопасности
oneTimeCodeTextField.textContentType =.oneTimeCode
Однако ApplePay выполняет автоматическую проверку, начиная с iOS 11, но это еще не доступно разработчикам.
В Xamarin iOS для> = iOS 12:
Прежде всего, SMS должно содержать ключевое слово "код" или "код доступа" в своем сообщении и не использовать пробелы после кода. если вы получили SMS и у вас есть кнопка «Скопировать код», то она будет работать
Затем вам нужно разместить это:
_txtField = new UITextField()
{
UserInteractionEnabled = true,
};
if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0))
{
_txtField.TextContentType = UITextContentType.OneTimeCode;
}
_txtFieldDelegate = new UITextFieldDelegate();
_txtField.Delegate = _txtFieldDelegate;
_txtField.BecomeFirstResponder();
ПРИМЕЧАНИЕ. Автозаполнение кода безопасности работает только с системной клавиатурой (не настраиваемой).
Также ... на телефоне должен быть включен "Автозаполнение паролей".
У меня есть решение из ответа santosh kumar и Тед
var otpText = String()
- in
viewDidload()
if #available(iOS 12.0, *) {
txtFirst.textContentType = .oneTimeCode
txtSecond.textContentType = .oneTimeCode
txtThird.textContentType = .oneTimeCode
txtForth.textContentType = .oneTimeCode
txtFifth.textContentType = .oneTimeCode
}
txtFirst.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
txtSecond.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
txtThird.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
txtForth.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
txtFifth.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
txtFirst.becomeFirstResponder() //by doing this it will open the keyboard on first text field automatically
- Действие для
TextField
//When changed value in textField
@objc func textFieldDidChange(textField: UITextField){
let text = textField.text
if text?.count == 1 {
switch textField{
case txtFirst:
txtSecond.becomeFirstResponder()
case txtSecond:
txtThird.becomeFirstResponder()
case txtThird:
txtForth.becomeFirstResponder()
case txtForth:
txtFifth.becomeFirstResponder()
case txtFifth:
txtFifth.resignFirstResponder()
self.dismissKeyboard()
default:
break
}
}
if text?.count == 0 {
switch textField{
case txtFirst:
txtFirst.becomeFirstResponder()
case txtSecond:
txtFirst.becomeFirstResponder()
case txtThird:
txtSecond.becomeFirstResponder()
case txtForth:
txtThird.becomeFirstResponder()
case txtFifth:
txtForth.becomeFirstResponder()
default:
break
}
}
else{
}
}
- Строка OTP и Отклонить клавиатуру
func dismissKeyboard(){
self.otpText = "\(self.txtFirst.text ?? "")\(self.txtSecond.text ?? "")\(self.txtThird.text ?? "")\(self.txtForth.text ?? "")\(self.txtFifth.text ?? "")"
print(self.otpText)
self.view.endEditing(true)
}
Самое главное: если вы используете метод shouldChangeCharactersIn
, прокомментируйте его. В противном случае этот код не будет работать
textContentType
на .oneTimeCode
только для OTP textField.
- person steveSarsawa; 07.07.2020
вы можете легко установить это в раскадровке
Вы можете получить OTP из своего сообщения.
otptextField.textContentType = .oneTimeCode
Можете получить проект по его ссылке.
https://github.com/karthickkck315/Automatic-OTP
Для поддержки автозаполнения OTP Примечание. Чтобы прочитать одноразовый пароль из сообщений, сообщение должно содержать код или пароль
if #available(iOS 12.0, *) {
optTextField.textContentType = .oneTimeCode
} else {
// Fallback on earlier versions
print("Fallback on earlier versions")
}
Чтобы получить otp в текстовом поле, нужно обратить внимание на две вещи.
1. установите поле ввода как otp
Другие ответы позволят вам узнать, как управлять своим кодом, чтобы получить otp.
2. укажите кодовую фразу в своем сообщении
Ваше сообщение должно содержать код, пароль и пароль на английском языке, и, если вы хотите включить его в тесте на другом языке, с некоторым словом, переведенным из кода на ваш язык
Я получил сообщение со словами ниже:
Испанский: (Codingo)
Германия: (Кодэ)
Чешский: (Код)
Персидский: (رمز)
Арабский: (رمز)
Номер OP должен быть английским, а не номером вашего языка, ваша кодовая фраза должна быть разделена только одним пробелом с вашими числами или с: без пробела.
Код 1111111
Код объявления: 111111
Есть еще одна важная вещь, на которую следует обратить внимание, - это предварительный просмотр сообщений. Номера будут определены как otp, если внизу серая линия. если он отображается синим цветом или без линии, Сообщение не уведомляет вас как об отп. Что-то вроде изображения
if(server.google==server.connected)}{
return server;
}
при подключении сделать лямбду ( e-> "")
; !!
No.
Поскольку это будет считаться проблемой конфиденциальности, вы не можете получить доступ к почтовому ящику SMS пользователей.