如何使用 Android API 和特定帐户连接到 Google 驱动器?

How to connect to Google Drive using the Android API and a specific account?

我想使用 Google 驱动器进行云同步。

是否可以使用 Google 驱动器 API 用于 Android 连接到将充当云存储服务器的特定帐户?

当我尝试连接指定的 Google 帐户时,如何设置用户帐户和密码?

到目前为止,我正在使用:

 mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addApi(Drive.API)
        .addScope(Drive.SCOPE_FILE)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();

但这为用户提供了一个登录对话框,用于 select 它自己的本地帐户,这不是我想要做的。谢谢

这是我对类似问题的 this 回答的摘录:

向 Google API 发出请求需要两个主要项目:

  1. refresh_token - 用于获取更多 access_tokens 且永不过期
  2. access_token - 用于发送 API 次调用(例如:上传文件),每 60 分钟过期一次。

为了获得其中任何一个,您必须遵循特定的步骤。

  1. Obtain a OAuth 2.0 client ID through the Google Developers Console

  2. Obtain an access token from the Google Authorization Server

  3. Send the access token to an API

  4. Refresh the access token, if necessary

可以找到有关此 "general" 过程的更多具体信息 here

棘手的步骤是获取刷新令牌,因为一旦将其存储在安全位置,您就可以使用简单的 httpRequests 执行任何操作。

要获得刷新令牌,用户必须同意让您的项目访问某些功能。这在Google语言中叫做scopes。您可以通过许多不同的方式来做到这一点(根据 Google):

There are several ways to make this request, and they vary based on the type of application you are building. For example, a JavaScript application might request an access token using a browser redirect to Google, while an application installed on a device that has no browser uses web service requests.

他们没有告诉您的一件事是,在您的情况下,使用什么媒介获取 refresh_token 并不重要,因为您只使用一个帐户。 Google 驱动器 API 并不是真正设计用作服务器。它旨在供希望存储每个用户帐户信息的开发人员使用。就像您有图片应用程序一样,您可以拥有将编辑后的图片存储在某人的个人 Google 云端硬盘帐户中的功能。

您(以及最近询问的许多其他人)想要做的基本上是使用云端硬盘帐户作为服务器。这意味着您获得 refresh_token 的媒介不必与您使用云端硬盘帐户的媒介相关。

例如,在我的具体案例中,我想要一种方法来为 android 应用程序免费在服务器上存储用户图片。我正在使用这个名为 Parse 的免费服务作为我的数据库服务器,但它们在其免费套餐中为您提供的文件存储空间非常有限。

因此,我决定尝试弄清楚如何使用 Google 驱动器帐户来扩展我的存储空间。我创建了一个类似 "hostingaccount@gmail.com" 的通用 gmail 帐户作为文件的宿主(15g 免费)。

为了获得我的 refresh_token,我设置了一个 php 服务器来验证那个帐户。当有人进入我设置的页面时,系统会提示他们登录,然后授予对我的项目的访问权限,以使用他们的 Google Drive 帐户(特定范围:https://www.googleapis.com/auth/drive)。然后我设置脚本以在屏幕上打印该帐户的 refresh_token。我复制了那个字符串并将其放入我的服务器,现在我可以轻松地将 httpRequests 发送到:

https://www.googleapis.com/oauth2/v3/token/ 获取访问令牌并:

https://www.googleapis.com/upload/drive/v2/files 上传文件。

我 link 它位于此编辑的顶部,但 答案向您展示了如何使用我的 php 方法获取刷新令牌。我从来没有花时间尝试弄清楚如何以任何其他方式获取刷新令牌,但是如果您阅读了我的整个长答案,我想我提到我相信这也可以通过 Android Google 驱动器 API.

我已经尝试帮助很多人解决这个问题,也许我应该开一个博客并制作一个教程 ;)