1

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

将常规 Google 帐户用作应用程序拥有的帐户

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

Google API 控制台 - 缺少客户端密码

对于已安装的应用程序,它实际上不再存在。通过构建一个实际的网页,我设法获得了一个 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. 专为用户登录自己的帐户而设计。不能接受的; 我希望所有用户都有一个 Drive 帐户,但需要一个普通帐户,而不是服务帐户(指定的客户)。
  2. 基于 AccountManager 或其他一些身份验证系统。出于同样的原因不能接受。
  3. 对 Google API 的过分行为感到震惊。建议用老式的方式提出请求。

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

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

4

2 回答 2

0

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

如何在 Android 应用程序中设置 Google Drive Credentials?

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

于 2014-03-15T22:29:10.150 回答
0

答案似乎是取消注释该行。GoogleCredential.Builder只要客户端机密字段中有内容,就可以成功构造凭证对象。但它真的得到了驱动吗?停在附近。

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

于 2013-02-22T17:17:38.737 回答