【问题标题】:How to add client id to Google Drive Client API for Java如何将客户端 ID 添加到适用于 Java 的 Google Drive Client API
【发布时间】:2017-08-09 13:02:42
【问题描述】:

我刚刚开始在 Android 应用中使用 Google Drive REST API。 (我不能使用Google Drive API for Android,因为该应用程序需要共享文件,也许还有一些其他的东西,GDAA 不支持。)我被困在几点上。

第一个与 OAuth2.0 凭据有关。我浏览了Android quick start example,它工作正常。我在我的 Google 开发者控制台上设置了一个项目,生成了一个 OAuth2.0 客户端 ID 和密码,还下载了 JSON 凭据文件。但是,快速入门示例并未显示如何将其中的任何内容插入应用程序。我在文档中发现的唯一似乎相关的是GoogleClientSecrets,但我没有看到任何关于如何在 Android 应用程序中使用它的信息。 (Java quick start example 使用它,但它没有与 Android 的客户管理器集成,并且似乎不适合 Android 应用程序。)当我运行 Android 版本的快速启动应用程序时,我的开发者控制台上没有显示任何活动,这向我建议该应用程序以某种匿名模式运行。据我了解,这会将应用程序的每日交易配额限制在非常低的范围内。

其次,我注意到 GDAA 和 JavaScript 的 REST API 都有很好的文件选择器 API。我在 Java/Android API 中找不到类似的东西。

以下是我的具体问题:

  • 如何在 REST API for Android Java 应用程序中使用开发人员控制台中的应用程序的 OAuth2.0 凭据?我觉得我只是错过了一些明显的东西。
  • 是否有适用于 Android 版 Google Rest API 的文件选择器 API?

【问题讨论】:

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


    【解决方案1】:

    将从 Google API 控制台下载的 client_id.json 文件保存到应用的 src/main/res 目录中。

    我遇到了同样的问题,但是在我使用包含的文件构建我的应用程序后,Google API 开始工作。

    【讨论】:

      【解决方案2】:

      在我执行 Quickstart 示例时单步执行该库后(这是一个痛苦的过程,因为没有源代码),我找到了答案。事实证明,您需要在清单中指定客户端 ID。具体来说,您需要在<application> 标签下:

      <meta-data
          android:name="com.google.app.id"
          android:value="app ID from your API console"/>
      

      一旦此条目出现在清单中,那么当应用使用 Google Drive REST API 与 Google 的服务器交互时,该交易就会正确地记录为应用控制台中的流量。如果没有此条目,该应用程序似乎可以在我的测试中运行,但没有记录流量。我似乎记得(从一个旧的 Google I/O 视频中)这种“匿名”应用仍然可以工作,但使用配额非常低(每天 10 或 100 个查询)。

      对于那些好奇的人,我在 com.google.android.gms.common.internal.zzz 类中找到了这个密钥,在 play-services-basement-10.2.0 库中找到。

      【讨论】:

        【解决方案3】:

        如何在 REST API 中使用开发者控制台中应用的 OAuth2.0 凭据

        https://developers.google.com/android/guides/api-client 周围的页面为您提供了您需要了解的所有信息。特别要注意,您使用的 Java 快速入门适用于通用 Java。 Android 上的 Google Play 服务管理凭据和帐户的方式是非常特定于 Android 的。

        是否有适用于 Android 版 Google Rest API 的文件选择器 API?

        我不知道,但根据您的用例,您也许可以使用 GDAA 选择器。最终,GDAA 和 Java REST API 都位于云端硬盘存储之上。

        【讨论】:

        • 我使用的 Java 快速入门不适用于通用 Java;它专门用于 Android 的 REST 快速入门。有一个单独的通用 Java 快速入门 here。您指向我的页面仍然没有回答我的问题。我如何处理通过我的开发者控制台生成的客户端 ID?任何文档(我可以找到)中都没有关于该信息在我的应用程序中的位置。关于将 REST 与 GDAA 选择器混合:是否存在应用程序提示两次访问用户驱动器权限的风险?
        • 您是否阅读了developers.google.com/android/guides/client-auth 以及您发布的 Android 快速入门链接中的第 1 步和第 2 步?关键是使用 Play Services 管理身份验证对话的 Android 应用程序的客户端身份验证不会像(例如)通用 Java 或 php 应用程序那样使用客户端 ID。
        • 是的,我读到了。它解释了如何在开发者控制台中注册我的签名证书,但没有说明如何使用控制台生成的 API 密钥。这就是我卡住的地方。 REST 快速入门的纯 Java 版本显示了如何读取 JSON 文件以获取此信息,但 Android REST 快速入门没有显示类似的内容。我想我正在寻找可以进入清单的东西,比如对Google Places API 的处理。你是说云端硬盘不需要这个吗?
        • 对于 Android 凭据,客户端 ID 绑定到 API 控制台中的包签名,因此无需将其安装在应用程序或清单中。仅仅凭借来自 myapp.example.com 的调用,Google 就知道客户端 ID。这一切都假设您将 Play 服务用于 Auth 流程。如果您自己滚动(绝对不推荐),那么您将像在通用 Java 应用程序中一样使用它。
        • 当应用程序仅根据您描述的包签名进行认证时,应用程序流量似乎不会出现在我的开发人员的 API 控制台中。当客户端 ID 嵌入到清单中时(正如我在回答中所描述的那样),就会记录流量。如果事情如您所描述的那样,是什么解释了这种差异?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        相关资源
        最近更新 更多