【问题标题】:How do I build a GoogleCredential without a client secret?如何在没有客户端密码的情况下构建 GoogleCredential?
【发布时间】:2013-02-08 09:22:38
【问题描述】:

我正在创建一个 Android 应用程序,它使用常规的 Google Drive 帐户作为应用程序拥有的帐户,如上所述,非常简洁,在这里:

Use regular Google accounts as application-owned accounts

不幸的是,关于如何在云端硬盘上执行任何操作的所有描述都引用了客户端机密,如下所述:

Google APIs Console - missing client secret

对于已安装的应用程序,它不再存在。通过构建一个实际的网页,我设法获得了一个 OAuth2 令牌。从这里我获得了一个访问令牌和一个刷新令牌,如第一个链接中所述。我想用这些创建一个GoogleCredential 对象,据我所知,这应该是这样的:

    HttpTransport httpTransport = new NetHttpTransport();
    JsonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setClientSecrets(
            new GoogleClientSecrets().setInstalled(
                    new Details()
                    .setAuthUri(AUTH_URI)
                    .setClientId(CLIENT_ID)
                    //.setClientSecret("but I haven't got one!")
                    .setRedirectUris(REDIRECT_URIS)
            )
    )
    .build()
    .setAccessToken(ACCESS_TOKEN) //defined above
    .setRefreshToken(REFRESH_TOKEN); //defined above
    Drive.Builder driveBuilder = new Drive.Builder(httpTransport, jsonFactory, null);
    driveBuilder.setHttpRequestInitializer(credential);

我已将 setClientSecret(...) 调用注释掉,因为我没有已安装应用程序的客户端密码。

基本上,我无法制作这个证书,而且我看到的关于制作证书的每条建议都属于以下三类之一:

  1. 专为用户登录自己的帐户而设计。不能接受的;我希望所有用户都拥有一个云端硬盘帐户,但需要一个普通帐户,而不是服务帐户(客户指定)。
  2. 基于 AccountManager 或其他一些身份验证系统。出于同样的原因不可接受。
  3. 惊恐地举起双手,对 Google API 的过分行为感到震惊。建议以老式方式提出请求。

顺便说一句,在没有设置客户端密码的情况下,我在Preconditions.class 中得到了一个NullPointerException。它并没有告诉我很多关于这个的事情。我还尝试通过子类化直接创建 GoogleCredential,它指示我使用 GoogleCredential.Builder,这就是我发现自己在这里的原因。

我该怎么做才能解决这个客户机密问题?

【问题讨论】:

    标签: android google-drive-api


    【解决方案1】:

    答案似乎是取消注释该行。只要 something 在客户端密码字段中,GoogleCredential.Builder 就成功构造了一个凭证对象。但它真的得到了驱动吗?坚持下去。

    编辑:不,我收到“invalid_client”错误。这非常令人沮丧。

    【讨论】:

      【解决方案2】:

      这是一个问题的链接,该问题在编辑中提供了自己的答案,使用已接受答案的帮助:

      How setup Google Drive Credentials within Android App?

      简而言之,主要是你需要从开发者 api 控制台获取一个简单的 api 访问密钥。如果找不到,可能需要设置驱动api访问。

      【讨论】:

      • 如何设置驱动 API 访问权限?
      • 转到:console.developers.google.com/project,点击您的项目名称,然后点击左侧菜单中的 APIs & Auth。现在应该可以在右侧看到一大堆 API(例如 Big Query API、Youtube API)。查找“Drive API”。
      • 谢谢!我可能有一段时间没有机会看这个了(因为我们最终切换到只有机器驱动器,我们用它共享​​>来自另一个人类可读驱动器的文件)但是这真是太好了。
      猜你喜欢
      • 2018-12-21
      • 2022-12-12
      • 2018-07-28
      • 2020-02-26
      • 2011-08-30
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多