0

我正在尝试从以下位置执行示例:

https://code.google.com/p/google-api-java-client/source/browse?repo=samples#hg%2Ffusiontables-cmdline-sample

这基本上是一个关于如何验证和使用 Fusion API 的示例。我不能让它工作......在这一点上:

// authorize
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");

浏览器显示“错误:redirect_uri_mismatch”。

这里奇怪的是,其他使用 Oauth 进行身份验证的示例(谷歌加 API 和云存储之一)不使用与这个相同的方法,这基本上包括使用 JSON 文件,您可以在服务帐户一次下载该文件已通过 API 控制台创建。

实际上,有一个问题使用了这个例子中的方法:

谷歌融合表 400 invalid_grant

我的主要问题是..哪一个是正确的?我不确定

第二个是...此示例在 JSON 文件中查找名为 client-secret 的项目,而我没有该项目。我认为这不是导致代码无法运行的原因,但我想知道这个客户机密是什么......

关于如何进行的一些见解将不胜感激

谢谢!亚历克斯

4

1 回答 1

0

好吧,如果有人和我有同样的情况……我会发布我发现有效的解决方案。我所做的基本上是修改了示例(特别感谢 Christian Junk 的工作),因此它在身份验证方面看起来更像其他示例(存储和加号)。

    HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

    // check for valid setup
    if (SERVICE_ACCOUNT_EMAIL.startsWith("Enter ")) {
      System.err.println(SERVICE_ACCOUNT_EMAIL);
      System.exit(1);
    }
    String p12Content = Files.readFirstLine(new File("key.p12"), Charset.defaultCharset());
    if (p12Content.startsWith("Please")) {
      System.err.println(p12Content);
      System.exit(1);
    }
    // service account credential (uncomment setServiceAccountUser for domain-wide delegation)
    GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
        .setServiceAccountScopes(FusiontablesScopes.FUSIONTABLES)
        .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
        // .setServiceAccountUser("user@example.com")
        .build();


    // set up global FusionTables instance
    fusiontables = new Fusiontables.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();

这与原始示例的方法不同,但它适用于我,我可以列出表、创建新表、填充它们并删除它们。

我只是希望这些示例更容易在 Oauth 和 Fusion 表文档页面中找到,这将为我节省一些宝贵的时间 :)

于 2013-05-08T13:07:42.500 回答