Автоматическая проверка OTP в iOS?

Есть ли способ получить доступ к данным из почтового ящика iPhone (SMS) в приложение ios, чтобы выполнить автоматическую проверку OTP, как в Android? Буду благодарен за вашу помощь.


person Rinshad Kammath    schedule 22.09.2016    source источник
comment
не думаю, вы должны попросить их ввести вручную   -  person Tj3n    schedule 22.09.2016


Ответы (13)


В iOS 12 Apple представила функцию под названием Security Code AutoFill.

Чтобы использовать это в своем приложении, все, что вам нужно сделать, это установить textContentType свойство oneTimeCode представления ввода UITextField.

otpTextField.textContentType = .oneTimeCode

ПРИМЕЧАНИЕ. Автозаполнение кода безопасности работает только с системной клавиатурой, но не с пользовательской клавиатурой.

WWDC video

Когда вы получите OTP, он будет выглядеть примерно так:

введите описание изображения здесь

person iVarun    schedule 11.06.2018
comment
@Waqas работает ли он на других устройствах, кроме iPhone 7? - person iVarun; 29.11.2018
comment
Да, iphone 7 не просит меня сохранять пароль или вводить его при входе в систему. Я думаю, ему нужна какая-то учетная запись, сохраненная в связке ключей, прежде чем использовать ее, - person Waqas; 29.11.2018
comment
@Waqas Он не попросит вас сохранить пароль. Когда вы получите OTP, вы увидите панель инструментов над клавиатурой с кодом OPT. - person iVarun; 29.11.2018
comment
Вы правы, этот момент понятен и хорошо понятен. Я спрашивал об автозаполнении. В сеансе Apple WWDC developer.apple.com/videos/play/wwdc2018/204 Здесь также говорится об автозаполнении паролей - person Waqas; 29.11.2018
comment
@iVarun Должно быть, если у вас iOS 12. Я пробовал в iPhone SE, отлично работает. - person byJeevan; 08.12.2018
comment
@byJeevan Ага ... Работает нормально. Вакас искал другой ответ ???? - person iVarun; 08.12.2018
comment
Также проверьте содержание SMS, чтобы убедиться, что номер OTP определяется как OTP, а НЕ как номер телефона - person Lal Krishna; 23.09.2019
comment
есть ли особый формат для определения одноразового временного кода из содержимого сообщения? - person Dhaval H. Nena; 10.10.2019
comment
извините, я хочу спросить, может ли этот .onetimecode работать с WhatsApp OTP? или его просто работа с смс отп? - person afi permana; 12.07.2021
comment
@afipermana Просто работает с SMS OTP. - person iVarun; 12.07.2021

Также важно, чтобы полученное вами текстовое сообщение содержало что-то с "кодом", например

"ваш код доступа: 123456"

or

«12345 - это ваш код для входа»

что-то в этом роде.

НЕТ!

Ваше приложение: 12345

вы можете проверить, будет ли код в вашем текстовом сообщении работать с типом .oneTimeCode, нажав подчеркнутый код в вашем сообщении. Если появится диалоговое окно с надписью «скопировать код», все готово. В противном случае вам может потребоваться изменить текст сообщения.

person iVentis    schedule 29.07.2019

ОБНОВЛЕНИЕ

Начиная с iOS 12, Apple будет поддерживать автозаполнение пароля в UITextField, UITextView и любом настраиваемом представлении, использующем протокол UITextInput. Системная клавиатура задайте для textContentType значение .oneTimeCode.

1) Использование кода

singleFactorCodeTextField.textContentType = .oneTimeCode

2) Использование раскадровки / XIB

Выберите _2 _ / _ 3_ в storyboard/XIB щелкните. Щелкните «Инспектор атрибутов». Перейдите к функции ввода текста, щелкните Тип содержимого и выберите одноразовый временной код - и готово.

С этим UITextContentType набором операционная система будет автоматически определять коды подтверждения из Сообщений.

Предупреждение

Если вы используете настраиваемое представление ввода для текстового поля ввода кода безопасности, iOS не сможет отобразить необходимый интерфейс автозаполнения.

«Устройство

Для получения дополнительной информации вы можете проверить его на странице разработчика Apple oneTimeCode

А также просмотрите WWDC 2018, сессия 204 - Автоматические надежные пароли и автозаполнение кода безопасности и перейдите к 24:28 для автоматического предварительного заполнения одноразового пароля.

person Ramkrishna Sharma    schedule 24.09.2018
comment
Я столкнулся с этой проблемой stackoverflow.com/questions/61495065/ - person Gaurav Borole; 07.07.2020
comment
что, если я не нажал «Из сообщений 180605»? я хочу заполнить текстовый файл без щелчка пользователя. - person iNiravKotecha; 27.01.2021
comment
@iNiravKotecha Я считаю, что это невозможно, поскольку вы получите данные OTP без щелчка. - person Ramkrishna Sharma; 27.01.2021
comment
@RamkrishnaSharma я хочу как андроид. приходит смс и заполняет текстовое поле. - person iNiravKotecha; 28.01.2021

В настоящее время для iOS 12 и более поздних версий вы можете использовать Автозаполнение кода безопасности

oneTimeCodeTextField.textContentType =.oneTimeCode

Однако ApplePay выполняет автоматическую проверку, начиная с iOS 11, но это еще не доступно разработчикам.

person Ted    schedule 09.11.2017
comment
есть ли какой-либо конкретный способ сделать это совместимым с otp веб-сайта или он просто работает по умолчанию? - person Amien; 16.07.2018
comment
вы можете дать мне руководство по этому поводу в ios 11? - person Himanshu Moradiya; 07.03.2019
comment
Сейчас это не автомат, как в Android, но это лучшее, что вы можете сделать. codeTextField.textContentType = .oneTimeCode - person Ted; 07.03.2019
comment
Кажется, это также автоматически вводит OTP в поле ввода, в то время как в других примерах просто отображается предложение поверх клавиатуры. Есть ли разница в реализации между ними? - person Umang Galaiya; 26.03.2019
comment
Это делается с помощью Apple Pay, вероятно, с использованием частных API. Насколько я знаю, пока недоступен для широкой публики - person Ted; 27.03.2019
comment
@Ted Я видел стороннее приложение, использующее это. - person Umang Galaiya; 27.03.2019
comment
@UmangGalaiya. Вы можете указать эту третью сторону? Coz AFAIK, это работает только тогда, когда мы нажимаем на предложение в верхней части клавиатуры. Я тоже не видел, чтобы третья сторона автоматически заполняла текстовое поле, как только мы получаем сообщение - person Rajan Maheshwari; 15.06.2019
comment
Не могу назвать третью сторону, но они определенно автоматически считывали одноразовый пароль и не полагались на предложение, которое появляется в верхней части клавиатуры. Они откатили эту функцию примерно через две недели после моего первого комментария к этому ответу. - person Umang Galaiya; 28.06.2019

В 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();

ПРИМЕЧАНИЕ. Автозаполнение кода безопасности работает только с системной клавиатурой (не настраиваемой).

person El0din    schedule 13.11.2018

Также ... на телефоне должен быть включен "Автозаполнение паролей".

person AntDC    schedule 21.10.2019
comment
Вздох. Это ЕДИНСТВЕННОЕ место, где я видел, чтобы упомянуть об этом. И я отлаживал и задавался вопросом, почему код не работает ... - person JOM; 13.03.2020
comment
Я знаю твою боль ... Отсюда мой пост. - person AntDC; 16.03.2020
comment
@AntDC, я использую iOS 13.4.1, клавиатура не показывает предложение автозаполнения, не могли бы вы помочь - person Arshad Shaik; 12.06.2020

У меня есть решение из ответа 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, прокомментируйте его. В противном случае этот код не будет работать

person steveSarsawa    schedule 24.02.2020
comment
Я столкнулся с этой проблемой stackoverflow.com/questions/61495065/ - person Gaurav Borole; 07.07.2020
comment
@GauravBorole, если вы столкнулись с этой проблемой, установите textContentType на .oneTimeCode только для OTP textField. - person steveSarsawa; 07.07.2020
comment
@DilipTiwari, с какой проблемой ты столкнулся? - person steveSarsawa; 19.03.2021
comment
Сообщение @DilipTiwari должно содержать код или пароль KeyWord - person steveSarsawa; 19.03.2021
comment
Я получаю текст сообщения otP только как 3125, а имя сообщения поступает из AD-DSHOTP - person Dilip Tiwari; 19.03.2021
comment
@DilipTiwari извините, но ваше сообщение должно содержать ключевое слово Code / CODE или Passcode / PASSCODE. Разве что работать не будет. - person steveSarsawa; 19.03.2021
comment
Привет @steveSarsawa, изменив содержимое сообщения, как вы предложили, оно решено проблемой, спасибо большое, я забыл поблагодарить вас. - person Dilip Tiwari; 15.04.2021
comment
@DilipTiwari Вы можете поблагодарить меня, проголосовав за мой ответ;) - person steveSarsawa; 15.04.2021
comment
Готово и проголосовали за - person Dilip Tiwari; 15.04.2021

вы можете легко установить это в раскадровке

Нажмите« Инспектор атрибутов ». Перейдите к параметру ввода текста, нажмите« Тип контента »и выберите одноразовый код»></a></p>
                        <div class= person king_T    schedule 04.12.2018


Вы можете получить OTP из своего сообщения.

otptextField.textContentType = .oneTimeCode

Можете получить проект по его ссылке.

https://github.com/karthickkck315/Automatic-OTP

person Karthick C    schedule 27.12.2018

Для поддержки автозаполнения OTP Примечание. Чтобы прочитать одноразовый пароль из сообщений, сообщение должно содержать код или пароль

if #available(iOS 12.0, *) {
            optTextField.textContentType = .oneTimeCode
        } else {
            // Fallback on earlier versions
            print("Fallback on earlier versions")
        }
person Sanjay Mali    schedule 06.11.2020

Чтобы получить otp в текстовом поле, нужно обратить внимание на две вещи.

1. установите поле ввода как otp

Другие ответы позволят вам узнать, как управлять своим кодом, чтобы получить otp.

2. укажите кодовую фразу в своем сообщении

Ваше сообщение должно содержать код, пароль и пароль на английском языке, и, если вы хотите включить его в тесте на другом языке, с некоторым словом, переведенным из кода на ваш язык

Я получил сообщение со словами ниже:

Испанский: (Codingo)

Германия: (Кодэ)

Чешский: (Код)

Персидский: (رمز)

Арабский: (رمز)

Номер OP должен быть английским, а не номером вашего языка, ваша кодовая фраза должна быть разделена только одним пробелом с вашими числами или с: без пробела.

Код 1111111

Код объявления: 111111

Есть еще одна важная вещь, на которую следует обратить внимание, - это предварительный просмотр сообщений. Номера будут определены как otp, если внизу серая линия. если он отображается синим цветом или без линии, Сообщение не уведомляет вас как об отп. Что-то вроде изображения

введите описание изображения здесь

person Fa.Shapouri    schedule 07.06.2021

if(server.google==server.connected)}{
   return server;
}

при подключении сделать лямбду ( e-> ""); !!

person Mika    schedule 09.08.2019
comment
Попробуйте немного отредактировать свой пост (форматирование кода) и немного расширить (возможно) свое объяснение? - person Pochmurnik; 09.08.2019
comment
Это ответ на вопрос об автоматической проверке OTP в iOS? - person Sukhi; 09.08.2019

No.

Поскольку это будет считаться проблемой конфиденциальности, вы не можете получить доступ к почтовому ящику SMS пользователей.

person B. Borse    schedule 02.08.2017