在 Android 上通过一键式登录使用 Google Drive API

Posted

技术标签:

【中文标题】在 Android 上通过一键式登录使用 Google Drive API【英文标题】:Using Google Drive API with One-Tap Sign-In on Android 【发布时间】:2021-11-28 23:39:44 【问题描述】:

我在我的 android 应用程序中实现了 Google 的 One-Tap Sign-Up/In,通过它我使用 oneTapClient.getSignInCredentialFromIntent(result.data) 获得了 SignInCredential 类型的凭据。我可以从这个SignInCredential 对象中进一步获取idToken

此外,我想使用 Drive API 访问用户的 Google Drive(我已启用 API 并从 API 控制台中选择了所需的范围),我认为这需要我像这样实现 OAuth2 流程:

val cred = GoogleAccountCredential.usingOAuth2(this,Collections.singleton(Scopes.DRIVE_FILE))
cred.selectedAccount
val googleDriveService = com.google.api.services.drive.Drive.Builder(AndroidHttp.newCompatibleTransport(), GsonFactory(), cred ) 
    .setApplicationName(getString(R.string.app_name))
    .build()

我的问题是如何处理从 One-Tap 流程获得的 idToken?我应该以某种方式将它传递给 OAuth2 调用吗?我提到了this oauth2 documentation 和these docs of Google API Clients for Java,但他们都没有回答上述问题。以及如何进一步“接收”oauth 令牌(如果有)?

提前谢谢你。

【问题讨论】:

要访问谷歌驱动器,您需要访问令牌而不是 id 令牌。 Id 令牌只是身份验证。您需要访问令牌和授权才能访问 google drive api。使用您拥有的代码,您应该通过 googleDriveService 发送所有请求 【参考方案1】:

One-Tab 是一种面向帐户创建和登录的服务。正如overview 文档所述:

只需轻轻一按,他们(用户)就可以通过您的服务获得一个安全、基于令牌、无密码的帐户,并受他们的 Google 帐户保护

另一方面,如果您想以用户身份与 API 交互,则需要使用 OAuth 2.0。方法以处理身份验证流程。此服务独立于 One-Tap,因此您需要每个不同的令牌。如果您需要使用 Drive API,可以按照此quickstart 开发一个有效的 OAuth 2.0 令牌流程。

【讨论】:

以上是关于在 Android 上通过一键式登录使用 Google Drive API的主要内容,如果未能解决你的问题,请参考以下文章

Android一键登录-三大运营商

linux mysql免密码登录如何设置

为啥我应该通过 Chrome 的凭据管理 API 使用一键登录

极光一键登录集成手册 | Android

Google+ 登录无法正常工作

android友盟一键登录一直报超时