iOS 14 App如何通过代码强制当前Tab页唤起Save Password弹窗
解决方案
iOS 系统的保存密码弹窗默认触发时机为输入框辞去第一响应者、当前视图控制器出栈/消失、页面切换等场景,你切换Tab时触发弹窗就是因为当前登录页的输入框结束编辑/当前VC被移出视图层级,目前有两种成熟方案可以实现校验通过后立即触发弹窗:
方案1(推荐):主动让输入框结束编辑
无需调用额外接口,只要在Test按钮的凭据校验通过回调里,主动让账号、密码输入框辞去第一响应者,系统就会自动触发保存密码弹窗,完全遵循原生逻辑,兼容性最好:
// Swift 示例 // 凭据校验通过后执行 usernameTextField.resignFirstResponder() passwordTextField.resignFirstResponder()
// Objective-C 示例 [usernameTextField resignFirstResponder]; [passwordTextField resignFirstResponder];
方案2:主动调用Security框架接口触发
如果业务场景不希望输入框失去焦点,可以调用系统提供的SecAddSharedWebCredential接口主动唤起弹窗:
调用示例
// Swift 示例 import Security // 凭据校验通过后执行 let domain = "your-associated-domain.com" // 替换为你在Associated Domains中配置的域名,不要加applinks:等前缀 let username = usernameTextField.text ?? "" let password = passwordTextField.text ?? "" SecAddSharedWebCredential(domain as CFString, username as CFString, password as CFString) { error, _ in if let error = error { // 可自行处理错误场景,比如用户取消保存、域名不匹配等 print("保存密码出错: \(error)") } }
// Objective-C 示例 #import <Security/Security.h> NSString *domain = @"your-associated-domain.com"; NSString *username = usernameTextField.text; NSString *password = passwordTextField.text; SecAddSharedWebCredential((__bridge CFStringRef)domain, (__bridge CFStringRef)username, (__bridge CFStringRef)password, ^(CFErrorRef _Nullable error, void * _Nullable result) { if (error) { NSLog(@"保存密码出错: %@", error); } });
注意事项
- 传入的域名必须和Xcode中Associated Domains配置的域名完全一致,不能带http/https前缀、路径或者
applinks:前缀 - 调用前必须已经完成Associated Domains配置,且对应的
apple-app-site-association文件配置正确,否则不会弹出提示
内容的提问来源于stack exchange,提问作者geohei
相关产品推荐
相关产品推荐

