我希望实现在IOS应用中在键盘顶部为OTP条目提出建议的地方。
手机上的IOS版本是12.2。
我的应用程序的ISO SDK版本为12.1。
使用Visual Studio(Windows)2017 15.9.13
现在我已经完成了以下工作……
创建了一个新的控件公共类OTPEntry:Xamarin.Forms.Entry
为控件创建一个渲染器,在此我执行Control.TextContentType = UITextContentType.OneTimeCode;
然后,我在具有正确名称空间等的ContentPage上使用此控件。
因此,当我使用此控件在表单上时,我会使用OTP将文本发送到电话。在电话上,如果我单击该代码,它将提供“复制代码”选项,因此它将被识别为OTP。
但是,为了我的一生,当我点击控件以调出键盘时,我没有按预期在键盘顶部看到代码。
我可能会缺少什么?
似乎实现此步骤的步骤相对简单,但我似乎无法使其正常运行。
任何想法,指针将不胜感激。
下面的代码...
控制-在Xamarin Forms项目中
namespace XXXX
{
public class OTPEntry : Xamarin.Forms.Entry
{
public OTPEntry()
{
}
}
}
RENDERER-IN 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"/>
最佳答案
首先,OneTimeCode
在iOS 12.0之后可用。因此我建议在CustomRenderer中添加以下代码
if (UIDevice.CurrentDevice.CheckSystemVersion(12, 0))
{
Control.TextContentType = UITextContentType.OneTimeCode;
}
发生的情况是,当OTP消息接收到“消息收件箱”中时,iOS运行简单的文本匹配算法,该算法确定该消息是否为有效的OTP消息,并基于该算法在内存中跟踪该消息,然后确定用户何时单击应用程序中启用OTP自动填充的文本字段,iOS键盘弹出该窗口,提示您OTP作为键盘上的建议。这样您的用户就可以将OTP填充到应用程序中,而无需离开应用程序或返回到Messaging应用程序。
您需要检查OTP格式是否正确。验证短信验证码格式是否合法的一种方法是在iPhone上打开[SMS],单击消息验证码,如果从通话选项的底部复制验证码,选项,表明可能;
并且不要忘记在系统设置->帐户和密码中打开自动填充密码。