繁体   English   中英

使用 Google Smartlock Api 在应用程序和网站之间自动集成

[英]Automatic integration between app and website with Google Smartlock Api

我正在尝试设置一个应用程序,该应用程序使用 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

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

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

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

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

  • 检查(例如用卷曲-I)该文件送达从已知位置的HTTP 200(无重定向)(必须是可用正好/.well-known/assetlinks.json )与“内容类型:应用程序/json" 标头,机器人/爬虫可以访问

  • 验证在应用程序清单asset_statements正在application和有效逃脱JSON和指向资产的链接文件中的知名HTTPS位置。 在我们检测到此应用程序之前需要发布该应用程序,但您可以使用 alpha/beta 通道进行测试,只要该 apk 具有最新版本代码

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

由于您已在此路径中定义了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

要将 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 应用程序中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM