我正在尝试在我的Xcode项目中实现自动OTP验证。我已经编写了以下代码,但是OTP值没有按预期显示在键盘工具栏上。我还在Xcode功能部分添加了“自动填充凭据提供程序”。我的测试设备运行在iOS 16上,我将文本输入特征下的键盘类型设置为“数字键盘”。我还尝试了default
键盘类型,但它也不起作用。在我的设备设置中启用了自动填充密码
下面是我使用的代码片段:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 12.0, *) {
otp1.textContentType = .oneTimeCode
otp2.textContentType = .oneTimeCode
otp3.textContentType = .oneTimeCode
otp4.textContentType = .oneTimeCode
}
otp1.addTarget(self, action: #selector(didEdited), for: .editingChanged)
otp2.addTarget(self, action: #selector(didEdited), for: .editingChanged)
otp3.addTarget(self, action: #selector(didEdited), for: .editingChanged)
otp4.addTarget(self, action: #selector(didEdited), for: .editingChanged)
otp1.becomeFirstResponder()
}
我在viewController中定义了didEdited方法
@objc func didEdited(textField: UITextField) {
let text = textField.text
if text?.count == 1 {
switch textField {
case otp1:
otp2.becomeFirstResponder()
case otp2:
otp3.becomeFirstResponder()
case otp3:
otp4.becomeFirstResponder()
case otp4:
otp4.resignFirstResponder()
default:
break
}
}
if text?.count == 0 {
switch textField {
case otp1:
otp1.becomeFirstResponder()
case otp2:
otp2.text = ""
otp1.becomeFirstResponder()
case otp3:
otp3.text = ""
otp2.becomeFirstResponder()
case otp4:
otp4.text = ""
otp3.becomeFirstResponder()
default:
break
}
}
}
我收到的OTP消息格式如下:"您注册/访问[应用程序名称]的OTP为1654"。
我感谢任何见解或建议来解决这个问题。
1条答案
按热度按时间htrmnn0y1#
你需要玩你的短信文本。只有当OTP代码与某种格式匹配时,iOS才会识别OTP代码。
首先,确保在您的设置中打开了
Autofill passwords
。第二,玩短信。确保otp消息短语有“代码”或“密码”或“密码”和消息是可复制的。
例如,工作:
1.一些文本和SMS代码:12345 -正确
1.一些文本关于和您的代码:1234 -正确
1.一些文本和SMS代码:12345正确
1.您的密码:1234正确
另外,要注意定位。如果您的设备有不同的本地化,这是在短信-自动填充可能会失败。和安全代码只与系统键盘工作。避免使用自定义键盘。