【问题标题】:How to connect to Google Drive using the Android API and a specific account?如何使用 Android API 和特定帐户连接到 Google Drive?
【发布时间】:2015-09-04 00:38:26
【问题描述】:

我想使用 Google 云端硬盘进行云同步。

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

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

到目前为止我正在使用:

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

但这为用户提供了一个登录对话框来选择自己的本地帐户,这不是我打算做的。谢谢。

【问题讨论】:

  • 无法帮助使用 android,但尝试使用 Google 服务帐户
  • 是的,据我所知,您无法连接到特定帐户。
  • 如果您授予服务帐户访问您 google 驱动器上某个文件夹的权限,它将可以访问该文件夹。
  • 其实这两个cmets都是假的。您可以访问特定帐户。请参阅我提出并回答的问题:stackoverflow.com/questions/32230977/… 与您的问题相比,它更具体一些,但有可能。如果您需要更多帮助,请告诉我。

标签: android google-drive-api google-drive-android-api


【解决方案1】:

这是我在类似问题上给出的this 答案的摘录:

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

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

为了获得其中任何一个,您必须遵循某些步骤。

  1. 通过 Google Developers Console 获取 OAuth 2.0 客户端 ID

  2. 从 Google 授权服务器获取访问令牌

  3. 将访问令牌发送到 API

  4. 如有必要,请刷新访问令牌

关于这个“一般”流程的更多具体信息可以在here找到。

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

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

有几种方法可以提出这个请求,它们会根据具体情况而有所不同 您正在构建的应用程序类型。例如,一个 JavaScript 应用程序可能会使用浏览器重定向请求访问令牌 谷歌,而安装在没有浏览器的设备上的应用程序 使用网络服务请求。

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

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

例如,在我的具体案例中,我想要一种方法来将用户图片免费存储在服务器上,以供 Android 应用使用。我正在使用这个名为 Parse 的免费服务充当我的数据库服务器,但它们在免费层中为您提供的文件存储非常有限。

因此,我决定尝试弄清楚如何使用 Google 云端硬盘帐户来扩展我的存储空间。我创建了一个通用 gmail 帐户,例如“hostingaccount@gmail.com”作为文件的主机(免费 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 上传文件。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多