前言
这个功能已经推出很久了,也在很多APP上都实现了这个功能,今天发现这个功能很友好以及手上的APP还未实现这个功能, 索性温习并记录一下。
密码自动填充简化了iOS应用和网页的登录和帐户创建任务。只需轻点几下,您的用户就可以创建并保存新密码或登录现有帐户。用户甚至不需要知道他们的密码;系统处理一切。这种便利性增加了用户完成应用程序登录或注册流程并更快地开始使用您的应用程序的可能性。此外,通过鼓励用户选择唯一的强密码,您可以提高应用的安全性。 默认情况下,密码自动填充会将用户的登录凭据保存在其当前的iOS设备上。 iOS可以使用iCloud Keychain在用户的设备上安全地同步这些凭据。密码自动填充仅为应用程序的关联域推荐凭据,并且用户必须在访问这些凭据之前使用Face ID或Touch ID进行身份验证。有关隐私和安全性的更多信息,请参阅隐私方法和iOS安全指南。 密码自动填充还提供实施凭证提供程序扩展的第三方密码管理器的凭据。有关凭据提供程序扩展的更多信息,请参阅AuthenticationServices框架。
密码自动填充使用启发式方法确定用户何时登录或创建新密码,并自动提供密码QuickType栏。这些启发式方法在大多数应用程序中为用户提供了一些密码自动填充支持,即使这些应用程序尚未更新以支持自动填充功能。但是,要提供最佳用户体验并确保您的应用完全支持密码自动填充,需要在应用中关联域名并在输入框设置正确的类型。触发自动填充的条件是需要用户点击了输入视图以及点击了键盘中的自动填充按钮。如果用户安装了APP,系统会将应用与应用关联域名列表并从Associated Domains Entitlement获取每个域,将尝试下载该域的Apple App Site Association文件,如果上述步骤都顺利的话,系统会将应用程序与该域关联,并为该域的凭据启动密码自动填充。使用账号密码自动填充需要系统在iOS11.0及更高的系统,伴随着iOS10.0及以上系统已经占据了90%+比例,所以我们有必要提供更好的体验,帮助用户在短时间内快速登录。
操作流程:
①在工程中开启Associated Domains,或者是在苹果后台的项目配置文件中开启,本文demo为自动签名。开启后运行项目会发现点击输入框后键盘上方会有一个钥匙图案,可以点击选择选择指定的账号和密码来进行。填充输入框。
点击添加按钮会直接增加一个 webcredentials:example.com
,官方给的格式是:<service>:<fully qualified domain>:<port number>
。而图片中的webcredentials是网页和应用共享证书的服务,具体如下:
applinks: 通用链接服务
webcredentials:网页和应用共享证书凭据服务
activitycontinuation:HandOff服务
网站如果需要适应example.com的子域名的话,则为.example.com
,并且保证每条增加的都应有**webcredentials: **头部。
②创建文件:apple-app-site-association 其中24GJHXXX为teamID,不是证书上的那个ID。另外后面的为app的BundleID,所以格式是:<teamID>.<BundleID>
,如果有多个,可以在数组中添加。并确保该文件json格式正确无误。
{
"webcredentials": {
"apps": ["24XGJHXXX.cn.mypup.PasswordFillDemo"]
}
}
③确保文件上传至①所填的域名目录下或.well-know
文件夹下,官方推荐使用文件夹,并且确保可以以https方式访问到该文件:https://example.com/.wellhnow/apple-app-site-association
④在Xib或代码中把输入框的textContentType填为.username
和.password
⑤我们在手机的【设置】-【密码与账户】- 网站与应用密码】- 新建一个①指定网站的账号和密码,然后运行APP,点击输入框会发现和①的时候不同,直接显示了我们设置的账号,点击即可填充账号和密码,并且点击钥匙图标的时候也是展示该网站的账号列表并有选择其他账号的选项。这跟QQ等支持了自动填充的APP的体验是一样的了。
添加账号密码
话说要是让用户来添加账号密码,在进行填充也不是很方便,正常的逻辑应该是我们注册登录成功的时候保存账号密码,后续登录可以直接使用自动填充来进行登录才是最方便的,这个苹果也想到了,可以添加账号到共享凭据中。下面就是把输入的账号添加到钥匙串并由iCloud进行同步管理,可以进行跨设备使用此账户来进行填充。
let server = "mypup.cn"
let user = User.init(user: userTextField.text ?? "", password: passwordTextField.text ?? "")
SecAddSharedWebCredential(server as CFString, user.user as CFString, user.password as
CFString) { (error) in
guard error == nil else {
print("发生错误", error!.localizedDescription)
return
}
print("存储新账号密码成功")
}
上面的代码会弹出提示让用户是否允许保存,用户同意后后续都能使用此账号在该设备和其他登录了同一ID设备以及浏览器均可进行填充。
总结
利用苹果iOS11 推出密码自动填充的功能来简便用户的登录操作,其中textContentType还有很多特性,通过iCloud、HandOff可以实现跨设备的极佳的体验。另外本文没有提及生成强密码部分,因为在国内还是很少人用这个功能吧,至少本人是这样,怕忘记密码或者在其他端登录不晓得密码的尴尬,苹果提供的生成强密码可以根据指定的规则来生成,还是很方便的对于外国人来说。
转载于作者:幸福的小木子
链接:https://juejin.im/post/5d2450e651882555300feb4d