2

我正在尝试设置一个应用程序,该应用程序使用 Google Smartlock 功能来获取存储在 Google 密码管理器中的凭据并自动登录。为此,我建立了一个测试网站,用户可以在其中登录(在 Google Chrome 中浏览时) ,如果她选择保存该网站的密码,它将保存在 Google 的密码管理器中。我拥有的示例应用程序应该能够自动获取存储的凭据并使用它们登录到应用程序内容页面。

我已彻底遵循文档。这是托管在网站根目录的数字资产文件:

[{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://officeloginsso.azurewebsites.net"
  }
 },
 {
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mslogin.t_sopal.msloginsso",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
    ]
  }
 },{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.login.codelab.sopalsmartlock",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
    ]
  }
}]

包含 json 文件链接的清单文件片段:

<application>    
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
</application>

字符串.xml:

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

该应用程序已发布(有区域限制)并且已托管 json 文件,该文件返回响应:

 HTTP/1.1 200 OK
 Content-Type: application/json

尽管完成了这些操作,该应用程序仍然无法获取通过网站存储的用户名/密码。我在这里缺少什么吗?

4

3 回答 3

0

由于您已assetlinks.json在此路径中定义

https://officeloginsso.azurewebsites.net/.well-known/assetlinks.json

robots.txt在您的文件中定义以下行非常重要:

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

允许 GoogleBot 访问您的文件:

https://officeloginsso.azurewebsites.net/.well-known/assetlinks.json

阅读robots.txt

于 2021-07-28T22:03:48.243 回答
0

根据评论中的讨论,解决方案是确保资产链接文件与已发布的 Play 商店应用程序的包和签名相匹配,并且正在测试的 apk 使用与已发布应用程序相同的证书进行签名(即,不是从调试/开发密钥库)。如果您想在发布到生产渠道之前进行测试,您可以使用 alpha/beta 渠道。

一般来说,这是要检查的事情(问题中提到了一些):

  • 确保您的资产链接文件是包含应用程序(Play 商店包和证书指纹)和任何相关登录域(桌面、移动网络、区域域等)的有效 json,每个都需要它自己的assetlinks.json - 已知位置,但可能指向规范副本)没有路径组件(例如,没有尾部斜杠)

  • 检查(例如使用 curl -I)该文件是否使用 HTTP 200(无重定向)从众所周知的位置(必须完全可用/.well-known/assetlinks.json)和“Content-Type:application/json”标头提供,并且可供机器人访问/爬虫

  • 验证应用清单中的asset_statements 是否位于application并且是有效的转义json 并指向众所周知的https 位置中的资产链接文件。该应用程序需要发布才能我们检测到这一点,但您可以使用 alpha/beta 通道进行测试,只要该 apk 具有最新版本代码

一旦满足这些要求并且应用程序在 Play 商店中发布,关联将在 1-2 个工作日内自动启用。有关这些要求的详细信息,请访问https://developers.google.com/identity/smartlock-passwords/android/associate-apps-and-sites

于 2016-07-31T04:10:54.970 回答
-1

要将 Smart Lock for Passwords 集成到您的 Android 应用程序中,您必须将对Credentials API的调用添加到应用程序的启动和登录流程中。

要检索凭据:

  • 当应用程序启动时,如果没有用户已经登录,请调用CredentialsApi.request().

  • 如果getStatus().isSuccess()返回 true,则获取用户的凭据getCredential()并使用它们进行登录。

  • 如果getStatus().isSuccess()返回 false 并getStatusCode()返回RESOLUTION_REQUIRED,则需要用户输入才能选择凭据。调用startResolutionForResult()以提示用户选择已保存的帐户,然后调用getParcelableExtra(Credential.EXTRA_KEY)以获取用户的凭据并使用它们登录。

注意:如果使用检索到的凭据登录失败,因为密码不正确或帐户不存在,请从 Smart Lock 中删除凭据。

文档展示了如何将 Smart Lock for Passwords 集成到您的 Android 应用程序中。

于 2016-06-29T12:10:07.977 回答