IOS 应用程序上的一次性密码 - 键盘上方未显示建议

One Time Password On IOS App - Suggestion not appearing above keyboard

我正在寻找在键盘顶部为 IOS 应用程序中的 OTP 条目提供 OTP 的建议。 phone 上的 IOS 版本是 12.2。 我的应用程序的 ISO SDK 版本是 12.1。 使用 Visual Studio (Windows) 2017 15.9.13

现在我做了以下事情......

所以,当我使用此控件在表单上时,我会使用 OTP 向 phone 发送文本。在 phone 上,如果我单击代码,它会提供 "Copy Code" 选项,因此它被识别为 OTP。 然而,对于我来说,当我点击控件调出键盘时,我没有按预期看到键盘顶部的代码。

我可能遗漏了什么? 看起来实现这个的步骤相对简单,但我似乎无法让它工作。

任何想法、指点将不胜感激。

下面的代码...

控制 - 在 Xamarin Forms 项目中

namespace XXXX
{
    public class OTPEntry : Xamarin.Forms.Entry
    {
        public OTPEntry()
        {
        }
    }
}

渲染器 - 在 IOS 项目中

namespace XXXX.YYYY.ZZZZ
{
    public class OTPEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                Control.TextContentType = UITextContentType.OneTimeCode;
            }
...
...
    }
    }
}

用法 - Xamarin Forms 项目中的内容页面

<XXXX:OTPEntry x:Name="txtToken" Keyboard="Numeric" Placeholder="Two Factor Code" HeightRequest="50" WidthRequest="300" TextColor="#2A295B" BackgroundColor="White" Margin="0"/>

所以 - 在验证代码似乎没问题并且对其他人有效后,我开始认为我要疯了。

然后我查看了 phone 设置,发现 "Autofill Passwords" 已关闭。 一旦我打开它,这似乎按预期工作。

首先,OneTimeCode在iOS12之后可用。0.So我建议在CustomRenderer

中添加以下代码
if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0))
{
  Control.TextContentType = UITextContentType.OneTimeCode;          
}

发生的事情是,当 OTP 消息收到消息收件箱时,iOS 运行一个简单的文本匹配算法来确定该消息是否是有效的 OTP 消息,并根据该算法跟踪它在内存中,然后当用户单击应用程序中启用了 OTP 自动填充的文本字段时,iOS 键盘弹出该 OTP 作为键盘中的建议。这样您的用户就可以在应用程序中填写 OTP,而无需离开应用程序或返回消息应用程序。

您需要检查OTP格式是否正确。验证短信验证码格式是否合法的一种方法是在iPhone上打开[SMS],点击短信验证码,如果从call option底部copy captcha option, can表明可以;

并且别忘了在系统设置->账户和密码中打开自动填充密码