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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值