iOS 密码自动填充 登录页面键盘选择账号/密码

登录页面用户去填写账号密码后,提示用户保存到icloud或者是自带的密码app中,下次登录时直接在键盘中点击选择,这个交互就很好,如下示例:

用户点击键盘中的QuickTypeBar 区域直接填充已保存的密码,交互就非常愉快及快捷,不必每次再去繁琐的输入!

开发准备

一、app代码配置

objectivec 复制代码
//输入账号的textField配置
_phoneTF.textContentType = UITextContentTypeUsername;
objectivec 复制代码
//输入密码的textField配置
 _codeTF.textContentType = UITextContentTypePassword;

二、app的target配置

点击加号后将webcredentials:后面改为你的域名,比如:abcd.com,尽量改为你的正常域名哦!在下面第三步的时候就需要用到!必须保持一致!

三、登录事件

在你的登录逻辑中添加以下代码

objectivec 复制代码
// 输入的账号
NSString *account = [weakSelf.phoneTF.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// 输入的密码
NSString *password = [weakSelf.codeTF.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// webcredentials:example.com 填写的服务器地址
NSString *services = @"abcd.com";
// 存储密码
SecAddSharedWebCredential((CFStringRef)services,(CFStringRef)account,(CFStringRef)password,^(CFErrorRef _Nullable error){
    if(error)
    {
        NSLog(@"错误 %@",error);
    }
    else{
        NSLog(@"成功");
    }
});

四、开发者中心配置

登录开发者https://developer.apple.com/网站,找到你的项目bunldeID,勾选Associated Domains复选框,并点击右上角的save保存按钮

创建一个名为apple-app-site-association的文件,不要任何后缀名!!!打开后粘贴以下内容,

teamId.bundleId替换为上图两处的id拼接在一块后保存此文件。

objectivec 复制代码
{ 
    "webcredentials": { 
    	"apps": ["teamId.bundleId"]  
	} 
}

示例:

则文件apple-app-site-association内容为:

{

"webcredentials": {

"apps": "L4DFAB2343.com.abc.management"

}

}

五、服务器端配置

在服务器的根目录创建一个.well-known的文件夹,将上述生成的文件apple-app-site-association放在这个目录中。

使用你的浏览器打开以下连接验证是否成功,将example.com替换为上述第二步使用的域名!你将能看到浏览器下载了一个文件或者是打了一个页面,说明配置成功!若不成功,则检查上述步骤是否完全正确!以下二选一验证即可。

https://example.com/.well-known/apple-app-site-association

或者通过以下页面进行验证,将example.com替换为上述的域名!

https://app-site-association.cdn-apple.com/a/v1/example.com

到此全部完成。

1.要仔细看看创建的文件apple-app-site-association,一定不能带有扩展名。

2.apple-app-site-association文件内容是 JSON,也要检查JSON格式是否正确

运行APP,则可以看到在登录页面输入账号时键盘的表现!

最后注意事项:

/**

UIKeyboardTypePhonePad

UIKeyboardTypeNumberPad

是专为输入电话号码设计的数字小键盘,默认不会自动触发系统的密码自动填充建议栏,这是iOS系统的原生特性限制。

*/

textField的键盘类型为上述两者时,是不会弹出密码选项的!

_phoneTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;