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

如何在App中保存凭证实现AutoFill?调用SecAddSharedWebCredential遇报错

解决SecAddSharedWebCredential报错:Autofill is not enabled in Safari settings

Hey there, let's work through this error you're hitting when trying to save shared web credentials. I've dealt with this exact issue before, so here's a breakdown of what's going on and how to fix it:

为什么会出现这个错误?

这个-909错误的根源很直接:用户的Safari设置里没有开启「自动填充密码」功能。哪怕你只是想在App内使用保存的凭证,共享Web凭证系统是依赖iOS的Autofill框架的,必须要求Safari的Autofill开关处于开启状态,才能正常完成凭证的存储操作。

解决方案步骤

1. 引导用户开启Safari的Autofill设置

你需要在App里添加友好的提示,引导用户去系统设置中开启该功能,具体路径是:

  • 打开「设置」→ 找到「Safari」→ 点击「密码」→ 开启「自动填充密码」
  • 同时确保「允许填充来自」选项中,勾选了「iCloud密码」或「本地密码」(根据用户的存储偏好)

2. 代码层面优化:提前检查Autofill状态

为了避免直接抛出错误,你可以在调用SecAddSharedWebCredential之前,先检查Autofill是否可用,示例代码如下:

import Security

// 检查Autofill是否可用的工具函数
func isAutofillAvailable() -> Bool {
    let status = SecIsSharedWebCredentialAvailable()
    return status == errSecSuccess
}

// 调用示例
if isAutofillAvailable() {
    // 替换成你的实际域名、用户名、密码
    SecAddSharedWebCredential("your-app-domain.com" as CFString,
                              "user123" as CFString,
                              "pass456" as CFString) { error in
        if let error = error {
            print("保存凭证失败:\(error.localizedDescription)")
        } else {
            print("凭证已成功保存到共享Web凭证库")
        }
    }
} else {
    // 这里可以弹出UI提示,引导用户去开启设置
    print("请先在Safari设置中开启「自动填充密码」功能")
}

3. 额外注意事项

  • 域名格式要规范:domain参数必须是有效的正式域名(比如your-app.com),不能用IP地址、本地主机名或者自定义字符串,否则也会导致保存失败。
  • 隐私合规提示:在调用保存凭证前,最好先弹窗询问用户是否同意保存,既符合App Store的隐私要求,也能提升用户体验。
  • 权限配置:确保你的App的Info.plist中没有禁用相关系统权限(默认情况下是允许的,无需额外配置)。

只要用户开启了Safari的Autofill功能,这个接口就能正常把凭证存入共享Web凭证库,实现你想要的「App内和Safari跨端自动填充」的需求啦。

内容的提问来源于stack exchange,提问作者Chip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:54:07