跨应用和网站启用自动登录

<ph type="x-smartling-placeholder">

如果您的应用使用 Smart Lock(密码专用)与您的 或者您的应用和网站使用联合登录服务提供商 作为 Google 登录,您可以将该应用与网站相关联, 用户保存一次凭据后,就会自动登录 应用和网站

要将应用与网站相关联,请通过托管 网站上的 Digital Asset Links JSON 文件;以及 向应用的清单中添加指向 Digital Asset Link 文件的链接。

通过在您的网站上托管 Digital Asset Links 声明,您还可以启用 在网站中分享自动填充 在 Android 8.0 及更高版本上运行时与应用共享数据。

前提条件

您网站的登录域名必须通过 HTTPS 提供。

将应用与网站相关联

  1. 创建一个 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 必须是完全限定的。 optional_port 为 HTTPS。

    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 参考文档 了解详情。

  2. 将这个数字资产链接 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 标头。

  3. 确保您的主机允许 Google 检索您的 Digital Asset Links 文件。如果您有 robots.txt 文件,它必须允许 Googlebot 代理检索 /.well-known/assetlinks.json。大多数网站可以直接允许任何自动化代理检索 /.well-known/ 路径下的文件,以便其他服务可以访问这些文件中的元数据:

    User-agent: *
    Allow: /.well-known/
    

  4. 在 Android 应用中声明关联。

    1. 将以下代码行添加到清单文件中的 <application> 下:

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. 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
      
  5. 将应用发布到 Google Play 商店。需要公开发布 渠道以供选择。

  6. (可选)填写并提交 <ph type="x-smartling-placeholder"></ph> Smart Lock(密码专用)联属表单 整个过程。Google 会定期检查联属关系 通过此表单提交的表单确实有效, 问题。

验证完成后,您应用的用户可以将其凭据保存在 自动登录您的应用或网站

示例:将多个应用与一个网站相关联

您可以将多个应用与一个网站相关联,只需在 数字资产链接文件。例如,要将 com.example 和 网站地址为 https://signin.example.com/,有 com.example.pro 个应用,请指定 JSON 文件中 https://signin.example.com/.well-known/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": "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"
    ]
  }
}]

然后,在这两个应用中声明关联:

  1. 将以下代码行添加到清单文件中的 <application> 下:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 将以下字符串资源添加到 strings.xml 文件中:

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>
    

示例:将应用与多个网站相关联

您可以将应用与多个网站相关联,只需在 Digital Asset Links 文件,并在每个网站上托管该文件。例如, 将 com.examplecom.example.pro 应用与位于以下网址的网站相关联: https://signin.example.com/https://m.example.com/,分别指定 JSON 文件中托管 https://signin.example.com/.well-known/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": "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,包括主要“Digital”(数字) Asset Links 文件:

[{
  "include": "https://signin.example.com/.well-known/assetlinks.json"
}]

最后,在这两个应用中声明关联:

  1. 将以下代码行添加到清单文件中的 <application> 下:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 将以下字符串资源添加到 strings.xml 文件中:

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>