积木店

许多用户在设置新的 Android 设备时仍然管理自己的凭据。此手动过程可能会变得具有挑战性,并且通常会导致糟糕的用户体验。该块存储API,搭载图书馆谷歌播放服务,看上去通过提供应用程序来保存用户凭据而不保存用户密码相关的复杂性和安全风险的方式解决这个问题。

Block Store API 允许您的应用程序存储用户凭据,稍后可以检索这些凭据以在新设备上重新验证用户。这有助于为用户提供更无缝的体验,因为他们在新设备上首次启动您的应用程序时不需要看到登录屏幕。

使用 Block Store 的好处包括:

  • 面向开发人员的加密凭证存储解决方案。凭据在可能的情况下进行端到端加密。
  • 保存令牌而不是用户名和密码。
  • 消除登录流程中的摩擦。
  • 使用户免于管理复杂密码的负担。
  • Google 会验证用户的身份。

在你开始之前

配置您的应用

  1. 在项目级build.gradle文件,包括谷歌的Maven仓库中你都buildscriptallprojects部分:

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. 添加的块存储API,将模块的应用程序级的摇篮文件,这通常是依赖app/build.gradle

    dependencies {
      implementation 'com.google.android.gms:play-services-auth-blockstore:16.0.2'
    }
    

这个怎么运作

当用户登录您的应用程序时,您可以将您为该用户生成的身份验证令牌保存到 Block Store。这是通过调用setBytes()上的一个实例StoreBytesData.Builder用户的凭据存储到源设备。使用 Block Store 保存令牌后,令牌将被加密并存储在设备本地。

以下代码片段显示了如何保存身份验证令牌:

val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
        .setBytes(/* BYTE_ARRAY */)
        .build()
client.storeBytes(data)
        .addOnSuccessListener{ result ->
            Log.d(TAG, "Stored: ${result.getBytesStored()}")
        }

稍后,当用户在新设备上执行设备到设备恢复流程时,Google Play 服务首先验证用户,然后检索您的 Block Store 数据。作为恢复流程的一部分,用户已经同意恢复您的应用数据,因此不需要额外的同意。当用户打开您的应用程序,你可以通过调用请求块存储您的令牌retrieveBytes()然后可以使用检索到的令牌使用户在新设备上保持登录状态。

val client = Blockstore.getClient(this)
client.retrieveBytes()
        .addOnSuccessListener { result ->
            Log.d(TAG, "Retrieved: ${String(result)}")
}