本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFill for Apps中提到的几个功能: 密码自动填充/自动生成的强密码/验证码自动填充等.
如果需要更好的实现此功能,网站需要
支持HTTPS
,开发Demo可以用GitHub Pages.
在iOS11中,Apple已经做了启发式功能,可以让开发者在无感知的情况下,支持密码的快速填充,但是为了更好的用户体验和降低未来版本中可能出现的bug,建议对不同的功能做一些额外的步骤配置. 默认效果是这样的,QuickType Bar上没有关联域的账户密码可选
默认支持的效果
Infer login scenario
Check eligibility based on associated domains Find user name and password fields
Detect sign-in action
Prompt to save or update password
密码自动填充
Associated Domains
设置UITextField的textContentType为对应类型
1.在苹果开发者后台开启APP的Associated Domains服务
苹果开发者后台APP配置
2.记录Prefix和app的BundleID,生成apple-app-site-association文件,放到关联域网站服务器的.well-known目录下面或者根目录下 . 注意:
网站需要支持HTTPS,Demo中为了演示,可以把项目和个人的Github Pages关联,文件放到自己的Github Pages.
{
"webcredentials":{
"apps":["XW5558TH45.com.beike.testapp"]
}
}
网站设置:文件放到关联域的服务器
官方示例存放目录:
官方示例文件存放
3.Xcode中项目配置,开启Domains,点击"+"添加一项, webcredentials:后面的"coderxllau.github.io"改为自己关联的域,例如webcredentials:www.baidu.com等
Xcode中项目配置
4.Xcode中除了开启并关联域,还需要更改输入框textContentType为指定类别
iOS 11和iOS 12中分别新增了新的Type.
UIKIT_EXTERN UITextContentType const UITextContentTypeUsername NS_AVAILABLE_IOS(11_0);
UIKIT_EXTERN UITextContentType const UITextContentTypePassword NS_AVAILABLE_IOS(11_0);
UIKIT_EXTERN UITextContentType const UITextContentTypeNewPassword NS_AVAILABLE_IOS(12_0);
UIKIT_EXTERN UITextContentType const UITextContentTypeOneTimeCode NS_AVAILABLE_IOS(12_0);
self.userNameField.textContentType = UITextContentTypeUsername;
self.passwordField.textContentType = UITextContentTypePassword;
自动生成强密码
和功能一Password Autofill基本一样,不同的地方是在iOS 12中新增UITextContentTypeNewPassword,用这个字段标记新密码输入框即可在用户点击的时候自动生成强密码填充
self.nameField.textContentType = UITextContentTypeUsername;
if (@available(iOS 12.0, *)) {
self.passwordField.textContentType = UITextContentTypeNewPassword;
self.passwordField.passwordRules = [UITextInputPasswordRules passwordRulesWithDescriptor:@"required: lower; required: upper; allowe: digit; required: [-]; minlength: 5;"];
} else {
self.passwordField.textContentType = UITextContentTypePassword;
}
image.png
自动生成的密码,我们可以通过一些方法指定生成的密码格式和规则. 可以在官方提供的密码格式工具Password Rules Validation Tool
上面调试自己的密码格式,将生成的密码格式描述复制下来,设置给UITextField的passwordRules属性.
if (@available(iOS 12.0, *)) {
self.passwordField.textContentType = UITextContentTypeNewPassword;
self.passwordField.passwordRules = [UITextInputPasswordRules passwordRulesWithDescriptor:@"required: lower; required: upper; allowe: digit; required: [-]; minlength: 5;"];
}
密码生成格式规则
IB中设置密码生成格式
验证码自动识别
工作原理
在输入框成慰第一响应者的时候,使用数据检测器启发式来推断传入消息携带安全代码,把检测到验证码显示到QuickType Bar上,省去用户的操作成本
缺陷:在demo中可以看到,自如发来的验证码也可以被demo获取,对于验证码来源没有做到很好的隔离
开发步骤:
开发步骤和功能一基本一致,在完成功能一的基础上面,设置输入框的输入类别为UITextContentTypeOneTimeCode即可.
WWDC18 Automatic Strong Passwords and Security Code Autofill
WWDC17 Introducing Password AutoFill for Apps;
作者:shannoon
链接:https://www.jianshu.com/p/7e812c43b08f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。