在 Android 应用和网站之间设置无缝凭据共享

在您的应用和网站之间实现跨平台无缝凭据共享,从而最大限度地提高用户便利性。当多个网站和 Android 应用共用一个账号管理后端时,用户只需保存一次凭据,系统就会在任何关联的网站或 Android 应用中自动提供这些凭据。

设置凭据共享有两种支持的方法:

  • Play 管理中心:对于大多数开发者来说,在与 Android 应用设置凭据共享时,建议使用此方法。借助此方法,您无需发布新版应用即可配置凭据共享。请注意,即使使用 Play 管理中心,您仍然需要在网站上发布有效的 assetlinks.json 文件。
  • 数字资产关联 (DAL):适用于高级用例,例如支持配置更复杂的多个应用或网域。

最佳做法

为了提供最佳用户体验和安全性,请在以下接触点实现无缝的凭据共享:

  • 登录表单:启用自动凭据填充功能。
  • 注册表单:安全地存储新凭据,以便在各个平台上使用。
  • 密码更改表单:在所有平台上同步密码更新。
  • 密码重置表单:允许一次重置密码即可更新所有平台。
  • WebView 网域:将凭据共享扩展到应用中处理账号管理(托管方登录、注册、密码更改或密码重置表单)的 WebView 网域
  • Android 应用

这种方法可创建统一的凭据管理系统,从而提高用户便利性和安全性。

在设计账号管理网站时,我们建议您遵循以下账号管理网站最佳实践:

在设计 Android 应用时,我们建议您将应用与 Android Credential Manager 集成

使用 Play 管理中心设置凭据共享

现在,您可以直接通过 Play 管理中心启用无缝凭据共享,而无需发布 Android 应用的新版本。这种方法通过 Play 管理中心界面管理凭据共享配置,从而简化了流程。

前提条件

在使用 Play 管理中心设置凭据共享之前,请确保您已满足以下条件:

  • 拥有访问深层链接应用配置部分所需的 Play 管理中心权限。如果您不是账号所有者,请让您的 Play 管理中心管理员向您授予相应的访问权限。
  • 能够按照 Digital Asset Links (DAL) 语法在各个网域上发布 /.well-known/assetlinks.json 文件。

为新网域启用凭据共享

如需在 Play 管理中心内为新网域设置无缝凭据共享,请按以下步骤操作:

  1. 打开 Play 管理中心,然后前往深层链接页面(吸引更多用户 > 深层链接)。
  2. 应用配置标签页下,点击添加网域
  3. 输入您网站的域名。
  4. 启用凭据共享开关切换到开启状态。
  5. 复制生成的 JSON 文件,并将其发布到指定位置(根据协议https://YOUR_DOMAIN/.well-known/assetlinks.json),或将相关信息添加到现有的 assetlinks.json 文件。
  6. 点击创建网站关联

如果成功,您将返回深层链接页面。

为现有网域启用凭据共享

如需在 Play 管理中心内为现有网域设置无缝凭据共享,请按以下步骤操作:

  1. 选择应用配置标签页。
  2. 网域部分的应用配置下,点击凭据共享列中的开启
  3. 复制生成的 JSON 文件,并将其发布到指定的位置(或将相关信息添加到现有的 assetlinks.json 文件中)。
  4. 点击开启凭据共享

如果成功,您将返回深层链接页面。

仅使用 Digital Asset Links (DAL) 设置凭据共享

对于涉及多个应用或网站的复杂设置,请使用数字资产关联 (DAL) 手动配置凭据共享。

前提条件

在设置无缝凭据共享之前,请确保您已为每个平台完成以下操作:

对于每个 Android 应用:

对于每个网站:

  • 能够按照 Digital Asset Links (DAL) 语法在各个网域上发布 /.well-known/assetlinks.json 文件。
  • 所有账号管理网域(登录、注册、更改密码或重置密码表单)都必须通过 HTTPS 访问。

在 Android 应用和网站之间实现无缝凭据共享

如需在应用和网站之间配置无缝凭据共享,您需要创建并发布 Digital Asset Links 声明列表,以声明哪些实体(网站或 Android 应用)可以共享凭据。

如需声明凭据共享关系,请执行以下操作:

  1. 按照 DAL 语句列表语法,创建一个包含指向网站和 Android 应用的语句的 assetlinks.json 文件:

    [
      {
        "relation":[
          "delegate_permission/common.get_login_creds"
        ],
        "target":{
          "namespace":"web",
          "site":URL
        }
      },
      {
        "relation":[
          "delegate_permission/common.get_login_creds"
        ],
        "target":{
          "namespace":"android_app",
          "package_name":"APP_ID",
          "sha256_cert_fingerprints":[
            "SHA_HEX_VALUE"
          ]
        }
      }
    ]
    

    其中,URL 是您网站的网址,APP_ID 是您的 Android 应用 IDSHA_HEX_VALUE 是 Android 应用签名证书的 SHA256 指纹。

    relation 字段用于描述所声明的关系。如需声明应用和网站共享登录凭据,请指定 delegate_permission/common.get_login_creds 关系。详细了解 DAL 中的关系字符串

    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 应用:

    命名空间

    android_app

    package_name

    应用的清单文件中声明的软件包名称,例如,com.example.android

    sha256_cert_fingerprints

    应用的签名证书的 SHA256 指纹。

  2. 将 Digital Asset Links JSON 文件托管在登录网域中的以下位置:https://DOMAIN[:OPTIONAL_PORT]/.well-known/assetlinks.json,其中 DOMAIN 是完全限定的,并且在使用端口 443 进行 HTTPS 连接时,必须省略 OPTIONAL_PORT

  3. 在 Android 应用的 res/values/strings.xml 文件中嵌入指向您在第 1 步中创建的语句列表的语句,以便在 Android 应用中声明关联。添加一个对象,用于指定要加载的 assetlinks.json 文件。例如:

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

    替换 DOMAINOPTIONAL_PORT(在为 HTTPS 使用端口 443 时必须省略)- 例如 https://www.example.com。对字符串中的所有撇号和引号进行转义。

    您还可以在 strings.xml 文件中添加 JSON 代码段,如 DAL 文档中所示,但使用 include 语句可让您在不发布应用的新版本的情况下更改语句。

  4. 将以下代码行添加到应用的 AndroidManifest.xml 文件中的 <application> 下,以引用清单中的声明:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>
    
  5. 将 Android 应用的新版本发布到 Google Play 管理中心

按照上述步骤操作后,您已成功在您的网站和 Android 应用之间设置无缝凭据共享。

请注意,这并不是为共享凭据设置 DAL 的唯一有效方法,但这种方法可以简化日后向无缝凭据共享网络添加新实体的过程,促进代码重复使用,并降低更新期间出现错误的可能性。