自动填充凭证
Android、iOS 和 Web 都内置了密码管理器,能够自动检测用户名和密码字段,并安全地存储和调用这些凭证。
为了让苹果和谷歌能自动填充和保存凭证,必须在你的网站和应用之间配置双向关联。在本指南中,我们将遵循与深度链接相同的步骤,但会增加Capacitor 配置和使用 autocomplete 属性的步骤。
编写应用代码
你的应用需要为用户名和密码使用 ion-input,并且必须使用 autocomplete 属性。示例如下:
- Angular
- Javascript
<form>
<ion-list>
<ion-item>
<ion-label>电子邮件地址</ion-label>
<ion-input
appAutofill
type="email"
name="email"
autocomplete="email"
[(ngModel)]="email"
required
email
></ion-input>
</ion-item>
<ion-item>
<ion-label>密码</ion-label>
<ion-input
appAutofill
type="password"
name="password"
autocomplete="current-password"
required
[(ngModel)]="password"
></ion-input>
</ion-item>
</ion-list>
<ion-button type="submit">提交</ion-button>
</form>
由于一个与 ion-input 自动填充字段相关的 webkit bug,你需要一个变通方案:将 这个指令 复制到你的代码中。
这个 示例应用 使用了本指南中的技术,允许在 iOS、Android 和 Web 上自动填充凭证。
<form>
<ion-list>
<ion-item>
<ion-label>电子邮件地址</ion-label>
<ion-input type="email" name="email" autocomplete="email" required email></ion-input>
</ion-item>
<ion-item>
<ion-label>密码</ion-label>
<ion-input id="pwd" type="password" name="password" autocomplete="current-password" required></ion-input>
</ion-item>
</ion-list>
<ion-button type="submit">提交</ion-button>
</form>
由于一个与 ion-input 自动填充字段相关的 webkit bug,你需要以下变通代码:
document.getElementById('pwd').children[0].addEventListener('change', (e) => {
this.password = (e.target as any).value;
});
autocomplete 属性允许自动填充凭证类型,如 username、current-pasword、new-password。即使不进行额外配置,它也可用于电话号码、一次性验证码、信用卡信息等(更多类型)。
设置 Capacitor 服务器主机名
默认情况下,Capacitor 会使用 localhost 域提供服务(在 iOS 上是 capacitor://localhost,Android 上是 http://localhost)。由于你希望密码管理器为你的应用建议存储的凭证,你需要将配置从 localhost 更改为 my-app.com(你为应用关联的域名)。
你可以在 capacitor.config.ts 或 capacitor.config.json 文件中进行此设置:
const config: CapacitorConfig = {
...
server: {
hostname: 'my-app.com',
androidScheme: 'https',
}
};
iOS 配置
在 XCode 中配置
在 XCode 中打开你的项目,并导航到 Signing & Capabilities。

- 点击
+,添加Associated Domains功能。 - 在 Domains 部分点击
+,输入applinks:my-app.com,其中my-app.com是你拥有并将为其创建应用关联文件的域名。 - 确保
Automatically manage signing已启用(否则你需要在 Apple Developer Portal 中配置 App Id、Capabilities 和 Profiles)。
Apple 应用网站关联文件
创建名为 apple-app-site-association 的网站关联文件,内容类似以下示例,将 TEAMID.BUNDLEID 替换为你自己的苹果团队 ID 和应用包 ID(例如:8L65AZE66A.com.company.myapp)。
{
"applinks": {
"details": [
{
"appID": "TEAMID.BUNDLEID",
"paths": ["*"]
}
]
}
}
注意:尽管这是一个 JSON 文件,但不要添加文件扩展名。
将该文件上传到你的网站上的 .well-known 文件夹(必须通过 HTTPS 托管)。
URL 应遵循以下格式:https://my-app.com/.well-known/apple-app-site-association
验证
你可以在 iOS 设备上验证你的应用网站关联文件是否正确。
前往 设置 > 开发者 > Universal Links -> 诊断。输入 URL(例如 https://my-app.com),将显示类似以下的验证结果:

绿色对勾表示配置验证通过,黄色警告则表示存在问题。
其他验证工具
苹果提供了一个 工具 来验证关联。注意:它有时会对正确的配置显示失败。
Branch 提供了一个 工具 来验证链接、内容类型和 JSON 结构。不过,它可能会在无效的 JSON 模式上显示误报。
保存凭证
要控制使用原生 iOS 密码管理器保存用户名和密码凭证,你需要使用 capacitor-ios-autofill-save-password 插件:
npm install capacitor-ios-autofill-save-password
如果你的应用目标平台是 iOS,代码需要在成功登录后保存凭证(其他平台不需要):
if (Capacitor.getPlatform() === 'ios') {
await SavePassword.promptDialog({
username: '[输入的用户名]',
password: '[输入的密码]',
});
}
当调用上述代码时,如果保存新凭证或密码与设备上保存的不同,你将看到以下对话框。如果保存的凭证没有变化,你将不会看到此对话框。

自动填充实践
正确配置后,你的应用将显示如下辅助栏,展示域名和用户名。点击它将自动填充表单中的凭证。
如果只看到钥匙图标和“密码”文本,则可能需要保存第一个凭证,或者你的应用可能配置有误。

Android 配置
请按照 Android 深度链接指南 创建网站关联文件并修改 AndroidManifest.xml,同时还需验证以下内容:
- 您的域名已启用 HTTPS,并拥有有效的受信任证书
- 您的
capacitor.config.ts文件中已将hostname属性设置为您的域名(需与AndroidManifest.xml中的android:host匹配),并已将androidScheme设置为https:
"server": {
"androidScheme": "https",
"hostname": "my-app.com"
}
Web 配置
如果您的应用面向 Web 端,请遵循 深度链接指南。
如果在设备上安装了您的应用,当您在 iOS Safari 中访问您的网站时,页面顶部会显示一个横幅,提供打开应用的选项。如果您希望避免此行为,可以考虑为您的应用程序使用单独的子域名。

iOS 故障排除
应用程序配置不当会导致在 iOS 上无法保存或调用凭据,以下是一些常见问题及解决方法。