记住您的用户

每个人都会因为您记住了他们的名字而高兴。要让您的应用更受欢迎,您可以做的最简单、最有效的方法之一就是记住您的用户,尤其是当用户升级到新设备或开始同时携带平板电脑和手机时。但是如何知道用户是谁?如何在新设备上识别这些联系人?

对于许多应用来说,答案是使用 AccountManager API。获得用户的许可后,您可以使用帐号管理器提取用户存储在其设备上的帐号名称。

通过与用户帐号集成,您可以执行多种操作,例如:

  • 使用用户的电子邮件地址自动填充表单。
  • 检索与用户(而非设备)相关联的 ID。

确定 AccountManager 是否适合您

应用通常会使用以下三种方法之一尝试记住用户:

  1. 要求用户输入用户名。
  2. 检索唯一的设备 ID 以记住设备。
  3. AccountManager 检索内置帐号。

选项 (1) 有问题。首先,要求用户在使用应用之前输入内容,这样会自动降低应用的吸引力。其次,我们无法保证用户选择的用户名是唯一的。

选项 (2) 给用户带来的麻烦会少一些,但很难上手。更重要的是,它只能让您记住一台设备上的用户。想象一下,如果用户升级到一款崭新的设备,但发现您的应用已经不再记住了,该有多沮丧。

选项 (3) 是首选方法。借助帐号管理器,您可以获取用户设备上存储的帐号的相关信息。借助帐号管理器,无论用户拥有多少台设备,只需在界面中额外添加几次点按,即可记住用户。

确定要使用的账号类型

Android 设备可以存储来自多个不同提供程序的多个帐号。在针对帐号名称查询 AccountManager 时,您可以选择按帐号类型进行过滤。帐号类型是一个字符串,用于唯一标识发布该帐号的实体。例如,Google 帐号的类型为 com.google,而 Twitter 使用 com.twitter.android.auth.login

请求 GET_ACCOUNTS 权限

为了获取设备上的帐号列表,您的应用需要 GET_ACCOUNTS 权限。如需请求此权限,请在您的清单文件中添加 <uses-permission> 标记:

<manifest ... >
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    ...
</manifest>

告知用户并征得用户同意

您可以通过调用 getAccounts()getAccountsByType() 获取用户帐号列表。但请注意,该 API 会返回个人数据和敏感用户数据,每当您的应用访问、收集、使用或分享个人数据和敏感数据时,您都必须向用户明确披露这一事实。对于在 Google Play 上发布的应用,保护用户数据的政策要求您执行以下操作:

  1. 向用户披露您的应用如何访问、收集、使用或分享个人数据和敏感数据。详细了解可接受的披露和征求用户同意
  2. 提供隐私权政策,说明您在设备端和设备外如何使用这些数据。

如需了解详情,请访问关于用户数据的 Google Play 政策

查询 AccountManager 获取账号列表

确定所需的帐号类型后,您需要查询该类型的帐号。通过调用 AccountManager.get() 获取 AccountManager 的实例。然后使用该实例调用 getAccountsByType()

Kotlin

val am: AccountManager = AccountManager.get(this) // "this" references the current Context

val accounts: Array<out Account> = am.getAccountsByType("com.google")

Java

AccountManager am = AccountManager.get(this); // "this" references the current Context

Account[] accounts = am.getAccountsByType("com.google");

这将返回一个 Account 对象数组。如果数组中有多个 Account,则显示一个对话框,要求用户选择一个。

使用账号对象个性化您的应用

Account 对象包含帐号名称,对于 Google 帐号,该名称是电子邮件地址。您可以通过多种方式使用此信息,包括:

  • 作为表单中的建议,让用户无需自行输入帐号信息。
  • 用作您自己的使用情况和个性化信息在线数据库的钥匙。

确定是否需要除账号名称之外的其他信息

帐号名称是记住用户的好方法,但 Account 对象本身并不能保护您的数据,也不会让您访问用户帐号名称之外的任何内容。如果您的应用需要让用户在线访问私密数据,您需要更强大的功能:身份验证。了解如何向现有在线服务进行身份验证以及如何编写自定义身份验证器,以便您可以安装自己的帐号类型。