有没有办法从iPhone收件箱(SMS)访问数据到ios应用程序进行自动OTP验证,就像在Android中一样?我将非常感谢你的帮助。
答案 0 :(得分:15)
在iOS 12中,Apple推出了名为Security Code AutoFill
的功能。
要在您的应用中使用此功能,您需要设置UITextField
的输入视图的textContentType
属性oneTimeCode
。
otpTextField.textContentType = .oneTimeCode
注意:安全码自动填充功能仅适用于系统键盘,不适用于自定义键盘。
当你得到OTP时,它看起来像这样:
答案 1 :(得分:6)
UPDATE
从iOS 12开始,Apple将在 UITextField,UITextView和任何采用UITextInput协议的自定义视图上支持密码自动填充。系统键盘将其上的textContentType设置为 .oneTimeCode
1)使用代码
singleFactorCodeTextField.textContentType = .oneTimeCode
2)使用情节提要/ XIB
在
UITextField
中选择UITextView
/storyboard/XIB
,然后单击“单击属性”。 检查员。转到文本输入特征,单击“内容类型”并选择 一次完成代码。
设置了UITextContentType
后,操作系统将自动从消息中检测验证码。
警告
如果您将自定义输入视图用于安全代码输入文本字段, iOS无法显示必要的自动填充UI。
有关更多信息,可以在Apple开发人员oneTimeCode
上进行检查。还要查看WWDC 2018 Session 204 - Automatic Strong Passwords and Security Code AutoFill并跳转到 24:28 以自动预填充OTP。
答案 2 :(得分:5)
答案 3 :(得分:4)
在Xamarin iOS中,对于> = iOS 12:
首先,SMS的消息中必须包含关键字“代码”或“密码” ,并且不要在代码后使用空格。如果您收到短信,并且有“复制代码” 按钮,那么它将起作用
然后您需要放置此:
_txtField = new UITextField()
{
UserInteractionEnabled = true,
};
if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0))
{
_txtField.TextContentType = UITextContentType.OneTimeCode;
}
_txtFieldDelegate = new UITextFieldDelegate();
_txtField.Delegate = _txtFieldDelegate;
_txtField.BecomeFirstResponder();
注意:安全代码自动填充仅适用于系统键盘(不适用于自定义)。
答案 4 :(得分:3)
同样重要的是,您收到的短信中包含带有“代码”的内容,例如
“您的密码是:123456”
或
“ 12345是您要登录的代码”
沿着那条线。
不!
您的应用:12345
您可以通过点按消息中带下划线的代码来验证文本消息中的代码是否适用于.oneTimeCode类型。如果弹出一个对话框,提示“复制代码”,那就很好了。否则,您可能需要更改消息的文本。
答案 5 :(得分:2)
答案 6 :(得分:1)
还...在电话上,需要打开“自动填充密码”。
答案 7 :(得分:1)
我从santosh kumar和Ted的答案中得到了解决。
var otpText = String()
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{
}
}
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
方法,请对其进行评论。否则此代码将不起作用
答案 8 :(得分:0)
您可以从邮件中获取OTP。
otptextField.textContentType = .oneTimeCode
可以从他的链接中获取项目。
答案 9 :(得分:0)
支持自动填充OTP 注意:要从消息中读取OTP,消息应包含代码或密码
if #available(iOS 12.0, *) {
optTextField.textContentType = .oneTimeCode
} else {
// Fallback on earlier versions
print("Fallback on earlier versions")
}
答案 10 :(得分:0)
要在文本字段中获取 otp,需要注意两件事
1.将您的输入设置为 otp
其他答案让您知道如何管理您的代码以接收 otp。
2.在您的消息中提供“代码”短语
您的消息必须包含英文的“code”、“passcode”、“password”,如果您想在其他语言测试中启用它,将一些词从“code”翻译成您的语言
我收到了带有以下内容的消息:
西班牙语:(编码)
德国:(科德)
捷克语:(Kod)
波斯语:(رمز)
阿拉伯语:(رمز)
otp 号码必须是英文而不是您的语言号码,您的“代码”短语必须与您的号码分开,只有一个空格或没有空格的“:”。
代码 1111111
代码:111111
您必须注意的另一件重要事情是消息预览。如果下面有一条灰线,这些数字将被检测为 otp。如果它显示为蓝色或没有线,则消息不会通知您为 otp。有点像图片
答案 11 :(得分:-3)
没有
由于这会被视为隐私问题,因此您无法访问用户的短信收件箱。
答案 12 :(得分:-3)
if(server.google==server.connected)}{
return server;
}
在连接时创建一个lambda ( e-> "")
;
!!