Android NDK开发详解用户数据和身份之记住您的用户
记住用户并对用户进行身份验证
Android 用户会青睐他们喜爱的设备和应用。让您的应用广受用户欢迎的一种方式是使其变得个性化。Android 设备知道您的用户是谁、它们有权访问哪些服务,以及将您的数据存储在哪里。在获得用户许可的情况下,您可以利用这些信息让应用提供更加丰富、更具个性化的体验。
在本课程中,您将了解与用户身份进行互动的多种技巧,从而能够:
通过记住用户的帐号名称打造个性化的应用
对用户进行身份验证,以确保他们是实际帐号所有者
通过 Google API 之类的服务获取访问用户在线数据的权限
向用户的设备添加自定义帐号,以便对您自己的后端服务进行身份验证
课程
记住您的用户
使用 AccountManager 了解用户的帐号名称。
对 OAuth2 服务进行身份验证
使用 OAuth2 帮助用户获取访问 Web 服务的权限,同时无需输入登录名或密码。
创建自定义帐号类型
将您自己的帐号类型添加到 Android 帐号管理器中。
记住您的用户
每个人都会因为您记住了他们的名字而高兴。为了使您的应用更具吸引力,最简单、最有效的方式之一就是记住您的用户,尤其是当用户升级到新设备或开始使用平板电脑和手机时。但是如何知道用户是谁?如何在新设备上识别这些用户?
对于许多应用来说,答案是使用 AccountManager API。获得用户的许可后,您就可以使用帐号管理器提取该用户存储在其设备上的帐号名称。
通过与用户帐号集成,您可以执行多种操作,例如:
使用用户的电子邮件地址自动填充表单。
检索与用户而非设备相关联的 ID。
确定 AccountManager 是否适合您
应用通常会使用以下三种方法之一尝试记住用户:
要求用户输入用户名。
检索唯一的设备 ID 以记住设备。
从 AccountManager 检索内置帐号。
选项 (1) 有问题。首先,让用户在进入您的应用之前输入一些内容,会自动降低应用的吸引力。其次,我们无法保证所选的用户名是唯一的。
选项 (2) 给用户带来的麻烦会少一些,但很难正确无误。更重要的是,它只能让您在一台设备上记住用户。想象一下,如果用户开始使用一台崭新的设备,却发现您的应用已经不记得自己了,这该有多令人沮丧。
选项 (3) 是首选方法。通过帐号管理器,您可以获取用户设备上存储的帐号相关信息。在本课程中我们将了解到,使用帐号管理器时,无论用户拥有多少种设备,只需在界面中轻点几下即可记住用户。
确定要使用的帐号类型
Android 设备可以存储来自多个不同提供商的多个帐号。当您为帐号名称查询 AccountManager 时,可以选择按帐号类型进行过滤。帐号类型是一个字符串,用于唯一标识发布该帐号的实体。例如,Google 帐号的类型为“com.google”,而 Twitter 则使用“com.twitter.android.auth.login”。
请求 GET_ACCOUNT 权限
为了获取设备上的帐号列表,您的应用需要获得 GET_ACCOUNTS 权限。请在您的清单文件中添加 标记以请求此权限:
<manifest ... >
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
...
</manifest>
告知用户并征得用户同意
注意:尽管本部分面向在 Google Play 上发布应用的开发者,但无论应用的发布位置如何,最佳做法都是遵循本指南。
如果您通过调用 getAccounts() 或 getAccountsByType() 获取用户帐号列表,请切记,该 API 会返回个人和敏感用户数据。如果您的应用访问、收集、使用或共享个人数据和敏感数据,您必须向用户明确披露这一事实。对于在 Google Play 上发布的应用,保护用户数据的政策要求您执行以下操作:
向用户披露您的应用会如何访问、收集、使用或共享个人数据和敏感数据。请详细了解可接受的披露信息和同意书。
提供隐私权政策,说明您在设备上和设备外如何使用这些数据。
如需了解详情,请访问关于用户数据的 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 对象本身并不会保护您的数据,也不会授予您访问用户帐号之外的任何内容的权限。如果您的应用需要允许用户在线访问私有数据,您需要更强大的功能:身份验证。下一课将介绍如何对现有在线服务进行身份验证。之后的课程涉及编写自定义身份验证器,以便您可以安装自己的帐号类型。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2020-06-26。