android - 如何在您的 Android 应用程序中使用谷歌帐户

标签 android authentication accountmanager

我想开发一个 Android 应用程序,允许用户使用他们的 Google 帐户(我认为它始终是一个电子邮件地址)登录,而不是强制用户创建一个新帐户。我对此有 3 个问题:

  • 当用户第一次启动应用程序时,我必须使用 AccountManager,对吧?如果用户只有一个 com.google 帐户,我会使用那个,如果没有,我会问他想使用哪个。我的问题是,我能否确定 AccountManager 中的每个 com.google 帐户都经过了正确的身份验证,并且应用程序可以确定用户就是他所说的那样,这样我就不必让他选择帐户每次应用程序启动时?

  • 该应用程序将有一个服务器,该服务器将在数据库中存储用户已解锁的受限内容,这就是它需要 Google 帐户的原因,以便将用户的外键与内容的外键进行匹配知道该用户解锁了什么。您如何建议我将数据库中的 Google 帐户保存为用户表的主键?我可以存储 Google 帐户的电子邮件,但这不会有任何隐私问题吗?我还能用什么?我想 Google 帐户没有类似于 Facebook ID 的整数值。

  • 对于我提到的这些操作,我是否需要使用 OpenID 或 oAuth 2.0?我问这个是因为当应用程序没有互联网连接时,我希望用户仍然能够访问他解锁并先前下载到手机中的受限内容。如果我使用需要互联网连接的 OpenID,对吗?所以用户不应该能够进入应用程序,这不是我想要的。

谢谢

最佳答案

使用客户管理器检查手机上可用的帐户并询问用户他想使用哪个帐户听起来是个好主意。我认为使用 OAuth 2.0 并获取 userinfo 的 OAuth 2.0 访问 token 是个好主意。在您的客户端应用程序中(https://www.googleapis.com/auth/userinfo.profile 可能是您要使用的范围),并在客户端与服务器通信时将其发送到您的服务器。然后使用 userinfo Google API您的服务器可以使用访问 token 来确保用户是他声称的人。使用此 API,您可以获得用户 ID,您可以使用它来代替用户的电子邮件。

获取授权 token 需要互联网访问权限,但由于只有当您与自己的服务器通信时才需要它,您可以在那个时候获取 token 。

我不是 100% 确定 AccountManager 提供的账户是否可信,但它会为您提供手机上可用的谷歌账户,我不知道有什么方法可以在手机上添加账户无权访问该帐户。如果这是可能的,那也将是一个非常大的安全问题,所以我认为您可以相信 AccountManager 提供的帐户是真实的。

当您在客户端获得 OAuth 2.0 token 时,我建议您尽可能使用 Google Play 的 GoogleAuthUtil 而不是客户管理器。有关这方面的更多详细信息,请参阅:In a nutshell what's the difference from using OAuth2 request getAuthToken and getToken

关于android - 如何在您的 Android 应用程序中使用谷歌帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15429491/

相关文章:

android - 如何从设置 UI 中隐藏我的客户客户经理

android - 某些操作不调用自定义 ContactsDirectoryProvider

java - 在android中读取数据sqlite失败

c# - Windows Azure 表存储帐户中如何拥有用户和角色信息以进行系统身份验证

android - 检索所有附加了特定帐户的联系人

Android - 授权的最佳实践

java - 用不可见字符(制表符、回车符、组分隔符等)分隔字符串?

android - 如何在 Android Studio 3.0.0 中使用数据绑定(bind)和 Kotlin

php - 使用 php curl http post 在 ownCloud 上创建用户

php - 登录 session PHP