WWDC18 Automatic Strong Passwords and Security Code Autofill

阅读数:40 2019 年 9 月 23 日 10:30

WWDC18 Automatic Strong Passwords and Security Code Autofill

本文将介绍 WWDC18 Automatic Strong Passwords and Security Code Autofill 和 WWDC17 Introducing Password AutoFill for Apps 中提到的几个功能:密码自动填充 / 自动生成的强密码 / 验证码自动填充等。

如果需要更好的实现此功能,网站需要支持 HTTPS,开发 Demo 可以用 GitHub Pages。在 iOS11 中,Apple 已经做了启发式功能,可以让开发者在无感知的情况下,支持密码的快速填充,但是为了更好的用户体验和降低未来版本中可能出现的 bug,建议对不同的功能做一些额外的步骤配置。默认效果是这样的,QuickType Bar 上没有关联域的账户密码可选。

WWDC18 Automatic Strong Passwords and Security Code Autofill

默认支持的效果

功能一:iOS11 密码自动填充功能,账户密码在 QuickBar 中自动显示;iOS12 自动保存密码到 iCloud 钥匙串

Infer login scenario
Check eligibility based on asociated domains Find user name and password fields
Detect sign-in action
Prompt to save or update password

1. 效果图

WWDC18 Automatic Strong Passwords and Security Code Autofill

密码自动填充

2. 工作原理

  • iOS 会自动推断登录场景

  • 检查关联的域是否有效合格, 从 iCloud 钥匙串中筛选出符合的账户和密码显示在 QuickType Bar

  • 根据设定输入框的 textContentType 类别, 找到用户名和密码输入框, 在用户点击 QuickType Bar 上的账户密码是填充到对应位置

  • 检测登录操作, 在登录页面要从视图层次结构中移除的时候, 提示是否保存 / 更新账户密码

3. 开发人员需要配置的步骤

Associated Domains
设置 UITextField 的 textContentType 为对应类型

1)在苹果开发者后台开启 APP 的 Associated Domains 服务

WWDC18 Automatic Strong Passwords and Security Code Autofill

苹果开发者后台 APP 配置

2)记录 Prefix 和 app 的 BundleID,生成 apple-app-site-association 文件,放到关联域网站服务器的,well-known 目录下面或者根目录下 。

注意: 网站需要支持 HTTPS,Demo 中为了演示,可以把项目和个人的 Github Pages 关联,文件放到自己的 Github Pages。

复制代码
{
"webcredentials":{
"apps":["XW5558TH45.com.beike.testapp"]
}
}

WWDC18 Automatic Strong Passwords and Security Code Autofill

网站设置: 文件放到关联域的服务器

官方示例存放目录:

WWDC18 Automatic Strong Passwords and Security Code Autofill

官方示例文件存放

3.Xcode 中项目配置,开启 Domains,点击 "+" 添加一项,webcredentials:后面的 " coderxllau.github.io " 改为自己关联的域,例如 webcredentials:www.baidu.com 等

WWDC18 Automatic Strong Passwords and Security Code Autofill

Xcode 中项目配置

4.Xcode 中除了开启并关联域,还需要更改输入框 textContentType 为指定类别。
iOS 11 和 iOS12 中分别新增了新的 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;

功能二: iOS12 自动生成建议的用户和强密码
1. 效果图

WWDC18 Automatic Strong Passwords and Security Code Autofill

自动生成强密码

2. 工作原理 / 设置步骤

和功能一 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;
}

WWDC18 Automatic Strong Passwords and Security Code Autofill

3. 密码的格式

自动生成的密码,我们可以通过一些方法指定生成的密码格式和规则。可以在官方提供的密码格式工具 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;"];
}

WWDC18 Automatic Strong Passwords and Security Code Autofill

密码生成格式规则

WWDC18 Automatic Strong Passwords and Security Code Autofill

IB 中设置密码生成格式

功能三: iOS12 自动填充验证码
1. 效果图

从短信中获取到验证码后自动显示到 QuickType Bar 上。

WWDC18 Automatic Strong Passwords and Security Code Autofill

验证码自动识别

2. 工作原理

在输入框成慰第一响应者的时候,使用数据检测器启发式来推断传入消息携带安全代码,把检测到验证码显示到 QuickType Bar 上,省去用户的操作成本。

缺陷:在 demo 中可以看到,自如发来的验证码也可以被 demo 获取,对于验证码来源没有做到很好的隔离。

3. 开发步骤

开发步骤和功能一基本一致,在完成功能一的基础上面,设置输入框的输入类别为 UITextContentTypeOneTimeCode 即可。

注意点

  • 您应避免在视图层次结构中构建定制键盘 UI,或在控件中设置自定义输入视图。因为如果您这样做,则会阻止 iOS 显示必要的 UI 或注入相应的事件以代表您的用户键入代码。

  • 关联的网站要支持 HTTPS

  • 标记 textContentType 的输入框独立开, 不要用一个输入框标记两个类别

  • 验证码来源没有做到很好的隔离

参考资料

WWDC18 Automatic Strong Passwords and Security Code Autofill
WWDC17 Introducing Password AutoFill for Apps

作者介绍:
刘乡龙,贝壳找房 iOS 工程师,目前负责贝壳找房 APP iOS 端研发工作。

本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。

原文链接:

https://mp.weixin.qq.com/s/rATGiSp_u2DFizodhY8JZw

评论

发布