【问题标题】:Android Access Token for Google Drive Api to download a file用于 Google Drive Api 下载文件的 Android 访问令牌
【发布时间】:2018-02-13 19:42:57
【问题描述】:

要根据this从谷歌驱动器下载文件,我们必须使用

获取https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media 授权:承载'ACCESS_TOKEN'

我想知道这个访问令牌到底是什么? 这是android客户端ID吗?在授权标头中传递客户端 ID 时,它会给出 401 未授权错误。 如果我使用下面给定的代码,文件下载成功,但是当我尝试打开它时,它说文件无效

OutputStream outputStream = new ByteArrayOutputStream();
driveService.files().get(fileId)
    .executeMediaAndDownloadTo(outputStream);

【问题讨论】:

  • 您不必模拟客户端,而可以使用 gradle 添加它...
  • @MartinZeitler 怎么办?我们需要在清单文件中添加一些东西吗..?
  • 你是否在 .gradle 文件中添加了依赖项?
  • @NaveedAli 添加了以下依赖项。希望这一切。
  • 是的,我已经添加了依赖项......但我会确认

标签: android oauth-2.0 access-token google-drive-android-api


【解决方案1】:

阅读this 文章后,我才知道究竟什么是访问令牌 Mobile Api Security

在用于移动 API 安全的 OAuth2 中

  1. 用户打开您的移动应用程序并提示输入他们的用户名或电子邮件和密码。

  2. 您从移动应用向 API 服务发送 POST 请求,其中包含用户的用户名或电子邮件和密码数据(通过 SSL!)。

  3. 您验证用户凭据,并为用户创建一个在一定时间后过期的访问令牌。

  4. 您将此访问令牌存储在移动设备上,将其视为允许您访问 API 服务的 API 密钥。

  5. 一旦访问令牌过期且不再有效,您将重新提示用户输入他们的用户名或电子邮件和密码U。

【讨论】:

  • 您获得了访问令牌,然后需要获得刷新令牌......而您完全是在重新发明轮子,这在 Android 上根本不需要。不会投反对票,而这种方法毫无意义。为什么你浪费时间编写一个不起作用的客户端——而有一个客户端,它可以工作并且正在积极维护?只需接受上面的答案并让它很快工作......你有没有尝试过?
  • 兄弟 我把这个任务搁置了,因为我被转移到另一个项目。我不清楚访问令牌,这就是我问这个问题的原因,但现在在提到的文章的帮助下,现在很清楚了..我赞成您的回答..即使我尝试了您的台词,问题仍然存在..这就是为什么我不能接受它...现在我没有足够的时间回到此任务..因此我不能接受您的回答抱歉为此:)
  • 您显然必须使用加载的库的类而不是您的代码。这是文档:developers.google.com/api-client-library/java/apis/drive/v3 - 这里解释了它的 oAuth2 实现:developers.google.com/api-client-library/java/…
【解决方案2】:

您可以将Drive API Client Library for Java 添加到模块的build.gradle... 而不是为 谷歌驱动器 REST API。然后,clientId 应该来自 google-services.json 文件(并且可能与 REST 凭据不同,请检查控制台)。

dependencies {

//Google HTTP Client:

compile 'com.google.http-client:google-http-client-android:1.22.0'
compile 'com.google.http-client:google-http-client-jackson2:1.22.0'

//Google API Client:

compile 'com.google.api-client:google-api-client-android:1.22.0'
compile 'com.google.api-client:google-api-client-jackson2:1.22.0'

//Google OAuth Client:

compile 'com.google.oauth-client:google-oauth-client:1.22.0'

//Google Drive API:

compile 'com.google.apis:google-api-services-drive:v3-rev65-1.22.0'

}

然后运行./gradlew clean 下载库。

【讨论】:

  • 是访问令牌,客户端ID??
  • @NaveedAli 存在对 Google OAuth 客户端的依赖项......所以您可能不需要担心这一点。为 Android 创建一个 REST 客户端是完全没有意义的,而有一个现成的 Android 的 Java 客户端......只需使用它并尝试为 Android 创建 Web 应用程序。
  • @Naveed Ali 访问令牌不是客户端ID,请查看我的答案here
  • @noogui 你们似乎都搞乱了可用于访问 Google Drive 的不同 API……您的 JavaScript 与 Java 问题无关。 bubblecode.net/en/2016/01/22/understanding-oauth2 ...而在 Android 上不必从头开始编写任何代码,因为有一个 google-oauth-client。解决方法从根本上说是拙劣的,同时使用了(错误的)REST API。
  • @MartinZeitler 你是对的。我只是指出它不是“客户端 ID”,您可以从谷歌开发控制台复制粘贴。再次,你是对的:) JS 示例只是为了演示 Java 谷歌 oauth 客户端中的过程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
相关资源
最近更新 更多