自动填充凭证功能
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漏洞导致自动填充功能异常,你需要通过复制这个指令到代码中来解决。
这个示例应用使用了本指南的技术,可在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漏洞,你需要添加以下解决代码:
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开发者门户中手动配置App IDs、Capabilities和Profiles)
苹果应用站点关联文件
创建名为apple-app-site-association