iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码
本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFill for Apps中提到的几个功能: 密码自动填充/自动生成的强密码/验证码自动填充等.
如果需要更好的实现此功能,网站需要
支持HTTPS,开发Demo可以用GitHub Pages.
在iOS11中,Apple已经做了启发式功能,可以让开发者在无感知的情况下,支持密码的快速填充,但是为了更好的用户体验和降低未来版本中可能出现的bug,建议对不同的功能做一些额外的步骤配置. 默认效果是这样的,QuickType Bar上没有关联域的账户密码可选

功能一: iOS11密码自动填充功能,账户密码在QuickBar中自动显示;iOS12自动保存密码到iCloud钥匙串
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
效果图

工作原理
- iOS会自动推断登录场景
- 检查关联的域是否有效合格,从iCloud 钥匙串中筛选出符合的账户和密码显示在QuickType Bar
- 根据设定输入框的textContentType类别,找到用户名和密码输入框,在用户点击QuickType Bar上的账户密码是填充到对应位置
- 检测登录操作,在登录页面要从视图层次结构中移除的时候,提示是否保存/更新账户密码
开发人员需要配置的步骤
Associated Domains
设置UITextField的textContentType为对应类型
1.在苹果开发者后台开启APP的Associated Domains服务

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等

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;
功能二: iOS12 自动生成建议的用户和强密码
效果图

工作原理/设置步骤
和功能一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;
}

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


功能三: iOS12 自动填充验证码
效果图 , 从短信中获取到验证码后自动显示到QuickType Bar上

工作原理
在输入框成慰第一响应者的时候,使用数据检测器启发式来推断传入消息携带安全代码,把检测到验证码显示到QuickType Bar上,省去用户的操作成本
缺陷:在demo中可以看到,自如发来的验证码也可以被demo获取,对于验证码来源没有做到很好的隔离
开发步骤:
开发步骤和功能一基本一致,在完成功能一的基础上面,设置输入框的输入类别为UITextContentTypeOneTimeCode即可.
注意点
- 您应避免在视图层次结构中构建定制键盘UI,或在控件中设置自定义输入视图。因为如果您这样做,则会阻止iOS显示必要的UI或注入相应的事件以代表您的用户键入代码。
- 关联的网站要支持HTTPS
- 标记textContentType的输入框独立开,不要用一个输入框标记两个类别
- 验证码来源没有做到很好的隔离
参考资料
WWDC18 Automatic Strong Passwords and Security Code Autofill
WWDC17 Introducing Password AutoFill for Apps;
iOS - WWDC18 iOS 自动生成强密码和自动填充验证码/密码的更多相关文章
- 【Golang】基于录制,自动生成go test接口自动化用例
背景 之前写过一篇博客,介绍怎么用Python通过解析抓包数据,完成自动化用例的编写.最近这段时间在使用go test,所以就在想能不能也使用代码来生成自动化用例,快速提升测试用例覆盖率.说干就干. ...
- Abator自动生成ibatis的相关配置和类
一.abator自动生成配置: abator自动生成ibatis的配置文件.mode.sqlMap.dao.bean实例 准备: 1.安装Eclipse插件: 要求eclipse3.1, ...
- SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口
前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...
- 自动生成SSM框架
使用idea 新创建项目 然后 新创建 java .resources 文件夹...... 图上是项目结构 java文件夹下的 文件夹 命名规范 com.nf147(组织名)+ oukele(作者) ...
- json 对c++类的序列化(自动生成代码)
[动机] 之前写网络协议的时候,使用的是google protobuf,protobuf不但在性能和扩展性上有很好的优势,protoc自动生成c++类代码的工具,这点确实给程序员带来了很多便利. 做后 ...
- hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)
绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xm ...
- 使用Excel自动生成sql语句
在近一段日子里,进入了新的项目组,由于项目需要,经常要将一些Excel表中的数据导入数据库中,以前并没有过多的接触过数据导入与数据处理,对于我来说比较痛苦,今天下午花了几个小时处理数据,但是同事给我提 ...
- 如何使用ThinkPHP5 ,自动生成目录?
具体步骤: A.在build.php中按照实际需求修改定义模块的内容: B.修改Public/index.php,在代码中加入: // 读取自动生成定义文件 $build = include '/.. ...
- 工具——代码中自动生成SVN版本号
本节和大家讨论一下程序集版本最后一位使用SVN版本号的自动生成方法,这里就向大家简单介绍一下.在进行自动部署的时候,经常需要用脚本获取程序的最新版本号.现在我们定义每个程序集的版本信息的最末段表示SV ...
随机推荐
- 对5月13号中BaseDao方法进行优化改造,更接近于框架的编写
/* * 通用查询.更新升级版 * */ public class BaseDao2 { static { try { Class.forName(ConfigUtil.getValue(" ...
- Linux系统(ubuntu)部署Asp.Net Core网站
一.前言 亲自动手尝试部署.Net Core在Linux,看了不少文章,感觉是很简单,但是做下去也会有很多问题,今天就写个文章记录下来. 二.环境安装 虚拟机(VMware),在网上找就行. 地址:h ...
- 剑指offer:二叉搜索树与双向链表
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路分析: 这道题一开始的思路是借用队列结构,首先中序遍历二叉树,按顺序 ...
- js控制input框只能输入数字和一位小数点和小数点后面两位小数
<script language="JavaScript" type="text/javascript"> function clearNoNum( ...
- 同时购入两台同款thinkpad笔记本电脑,分别使用同一账户激活office失败--------------解决方法(账户下有多个Office激活信息,重装后提示“许可证不正确或者最大激活次数”)
如题所述,该问题曾多次与京东商城售后,京东thinkpad品牌售后,thinkpad售后等进行沟通,最后通过微软的电话激活才成功,不过在之后发现了这么一个帖子,应该是官方给出的,应该合理,没有实际验证 ...
- pm2 工具来管理 node 服务端
如下: nodeServer.js 'use strict'; const http = require('http'); const server = http.createServer(funct ...
- docker安装并运行rabbitmq
拉取镜像: [mall@VM_0_7_centos ~]$ [sudo] password for mall: : Pulling from library/rabbitmq 5b7339215d1d ...
- .NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...
- windows下Java调用可执行文件
缘起: 由于没有找到java转换文件的接口,因此使用java调用exe文件进行文件转换 public void convertFile(){ Runtime rn = Runtime.getRunti ...
- Java 8 集合之流式(Streams)操作, Streams API 详解
因为当时公司的业务需要对集合进行各种各样的业务逻辑操作,为了提高性能,就用到了这个东西,因为以往我们以前用集合都是需要去遍历(串行),所以效率和性能都不是特别的好,而Streams就可以使用并行的方式 ...