You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:08