如果您的应用使用 Smart Lock(密码专用)共用用户数据库,或者您的应用和网站使用联合登录提供方(例如 Google 登录),您可以将应用与网站相关联,这样用户只需保存一次凭据,然后即可自动登录应用和网站。
如需将应用与网站相关联,请在您的网站上托管一个 Digital Asset Links JSON 文件,并将指向 Digital Asset Link 文件的链接添加到应用的清单中,以声明关联性。
通过在您的网站上托管 Digital Asset Links 声明,您还可以让网站在 Android 8.0 及更高版本上运行时与应用共享自动填充数据。
前提条件
您网站的登录网域必须能通过 HTTPS 访问。
将应用与网站相关联
创建一个 Digital Asset Links JSON 文件。
例如,如需声明网站
https://signin.example.com
和软件包名称为com.example
的 Android 应用可以共享登录凭据,请使用以下内容创建一个名为assetlinks.json
的文件:[{ "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "web", "site": "https://signin.example.com" } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": [ "F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B" ] } }]
relation
字段是包含一个或多个字符串的数组,用于描述所声明的关系。如需声明应用和网站可共享登录凭据,请指定字符串delegate_permission/common.get_login_creds
。target
字段是一个对象,用于指定声明所适用的资源。以下字段用于标识网站:namespace
web
site
网站的网址,格式为
https://domain[:optional_port]
,例如https://www.example.com
。domain 必须是完全限定的,在为 HTTPS 使用端口 443 时必须省略 optional_port。
site
目标只能是根网域:您不能将应用限制为仅与特定子目录相关联。请勿在网址中包含路径,例如尾部斜杠。子网域不会被视为匹配:也就是说,如果您将 domain 指定为
www.example.com
,则网域www.counter.example.com
不会与您的应用相关联。以下字段用于标识 Android 应用:
namespace
android_app
package_name
应用的清单文件中声明的软件包名称,例如 com.example.android
sha256_cert_fingerprints
应用签名证书的 SHA256 指纹。您可以使用以下命令生成指纹: $ keytool -list -v -keystore my-release-key.keystore
如需了解详情,请参阅 Digital Asset Links 参考文档。
将这个 Digital Asset Links JSON 文件托管在登录网域中的以下位置:
https://domain[:optional_port]/.well-known/assetlinks.json
例如,如果您的登录网域是
signin.example.com
,请将 JSON 文件托管在https://signin.example.com/.well-known/assetlinks.json
上。Digital Asset Links 文件的 MIME 类型需为 JSON。确保服务器在响应中发送
Content-Type: application/json
标头。确保您的主机允许 Google 检索您的 Digital Asset Links 文件。如果您有
robots.txt
文件,它必须允许 Googlebot 代理检索/.well-known/assetlinks.json
。大多数网站可以直接允许任何自动化代理检索/.well-known/
路径下的文件,以便其他服务可以访问这些文件中的元数据:User-agent: * Allow: /.well-known/
在 Android 应用中声明关联。
将以下代码行添加到清单文件中的
<application>
下:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
将
asset_statements
字符串资源添加到strings.xml
文件中。asset_statements
字符串是一个 JSON 对象,用于指定要加载的assetlinks.json
文件。您必须对字符串中的所有撇号和引号进行转义。例如:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
> GET /.well-known/assetlinks.json HTTP/1.1 > User-Agent: curl/7.35.0 > Host: signin.example.com < HTTP/1.1 200 OK < Content-Type: application/json
将应用发布到 Google Play 商店。需要先在公开渠道中发布这个视频,然后关联才能被选中。
(可选)填写并提交 Smart Lock(密码专用)关联表单,表明您已完成整个过程。Google 会定期检查通过该表单提交的关联商户是否确实有效,如果出现问题,Google 可能会与您联系。
验证完成后,您应用的用户可以将其凭据保存到您的应用或网站上,并自动登录两者。
示例:将多个应用与同一个网站相关联
您可以将多个应用与一个网站相关联,只需在数字资产链接文件中指定每个应用即可。例如,如需将 com.example
和 com.example.pro
应用与位于 https://signin.example.com/
的网站相关联,请在托管在 https://signin.example.com/.well-known/assetlinks.json
的 JSON 文件中指定这两个应用:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
然后,在这两个应用中声明关联:
将以下代码行添加到清单文件中的
<application>
下:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
将以下字符串资源添加到
strings.xml
文件中:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
示例:将应用与多个网站相关联
您可以在数字资产链接文件中指定每个网站并在每个网站上托管该文件,从而将应用与多个网站相关联。例如,如需将 com.example
和 com.example.pro
应用与位于 https://signin.example.com/
和 https://m.example.com/
的网站相关联,请在托管在 https://signin.example.com/.well-known/assetlinks.json
的 JSON 文件中同时指定应用和这两个网站:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://m.example.com"
},
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
然后,在托管在 https://m.example.com/.well-known/assetlinks.json
的 JSON 文件中,添加主要的 Digital Asset Links 文件:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
最后,在这两个应用中声明关联:
将以下代码行添加到清单文件中的
<application>
下:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
将以下字符串资源添加到
strings.xml
文件中:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>