swift iOS中的自动OTP验证:OTP未出现在键盘工具栏上

amrnrhlw  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(154)

我正在尝试在我的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"。
我感谢任何见解或建议来解决这个问题。

htrmnn0y

htrmnn0y1#

你需要玩你的短信文本。只有当OTP代码与某种格式匹配时,iOS才会识别OTP代码。
首先,确保在您的设置中打开了Autofill passwords
第二,玩短信。确保otp消息短语有“代码”或“密码”或“密码”和消息是可复制的。
例如,工作:
1.一些文本和SMS代码:12345 -正确
1.一些文本关于和您的代码:1234 -正确
1.一些文本和SMS代码:12345正确
1.您的密码:1234正确
另外,要注意定位。如果您的设备有不同的本地化,这是在短信-自动填充可能会失败。和安全代码只与系统键盘工作。避免使用自定义键盘。

相关问题