在 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的主要内容,如果未能解决你的问题,请参考以下文章