当前位置: 首页 > 知识库问答 >
问题:

Google Analytics 3.0 auth流

边翔宇
2023-03-14

原题:

我试图向Google Analytics API提出请求。我正在浏览Hello Analytics教程,试图复制这些步骤。无论我尝试什么,我似乎都无法成功地验证。

教程中有以下内容:

打开您创建的名为helloanalyticsapi.java的文件,并添加以下方法:

private static Analytics initializeAnalytics() throws Exception {
    // Authorization.
    Credential credential = OAuth2Native.authorize(
        HTTP_TRANSPORT, JSON_FACTORY, new LocalServerReceiver(),
        Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY));

    // Set up and return Google Analytics API client.
    return Analytics.builder(HTTP_TRANSPORT, JSON_FACTORY)
        .setApplicationName("Google-Analytics-Hello-Analytics-API-Sample")
        .setHttpRequestInitializer(credential)
        .build();
  }

当用户遇到此脚本时,应用程序将尝试打开默认浏览器,并将用户导航到Google.com上的URL。此时,将提示用户登录并授予应用程序对其数据的访问权限。一旦被授予,应用程序将尝试从浏览器窗口读取代码,然后关闭该窗口。

如果您只调用不需要用户数据的API,比如Google自定义搜索API,那么API键可能更容易实现。但是,如果您的应用程序已经使用了OAuth2.0访问令牌,那么也不需要生成API密钥。事实上,如果OAuth2.0访问令牌已经与相应的项目相关联,Google会忽略传递的API密钥。

我找不到许多只使用API密钥的auth流的代码示例--我找到的大多数代码都显示了使用客户端ID和下载的。p12文件,例如GoogleCredentialJavadoc。我能找到的一个示例应用程序是Google的Books示例应用程序。无论如何,以下是我所尝试的(模仿教程中的第一个请求,该请求从管理API获得帐户列表):

Analytics analytics =
        new Analytics.Builder(httpTransport, jsonFactory, null)
        .setApplicationName("Dev API Access")
        .build();
Management.Accounts.List list =
        analytics.management().accounts().list().setKey(apiKey);
Accounts accounts = list.execute();

其中“Dev API Access”是我的API控制台仪表板中的“Name”字段。API密钥是限制在我的IP地址的服务器密钥。此操作失败,响应如下:

401 Unauthorized
{
  "code": 401,
  "errors": [
    {
      "domain": "global",
      "location": "Authorization",
      "locationType": "header",
      "message": "Login Required",
      "reason": "required"
    }
  ],
  "message": "Login Required"
}

我也试过这个:

Analytics analytics =
        new Analytics.Builder(httpTransport, jsonFactory, null)
        .setApplicationName("Dev API Access")
        .setGoogleClientRequestInitializer(new AnalyticsRequestInitializer(apiKey))
        .build();

Management.Accounts.List list = analytics.management().accounts().list();
Accounts accounts = list.execute();
Credential credential =
        new GoogleCredential.Builder()
        .setTransport(httpTransport)
        .setJsonFactory(jsonFactory)
        .setServiceAccountId(serviceAccountId)
        .setServiceAccountScopes(AnalyticsScopes.ANALYTICS_READONLY)
        .setServiceAccountPrivateKeyFromP12File(new File(p12FilePath))
        .setServiceAccountUser(serviceAccountUser)
        .build();

Analytics analytics =
        new Analytics.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName("Dev API Access")
        .build();

Management.Accounts.List list = analytics.management().accounts().list();
Accounts accounts = list.execute();
400 Bad Request
{
  "error": "invalid_grant"
}

“无效授权”是什么意思,如何成功地进行身份验证(理想情况下没有OAuth2)?

暂时还没有答案

 类似资料:
  • 问题内容: 我有3台机器: 文件所在的服务器 运行REST服务的服务器(泽西岛) 可以访问第二台服务器但不能访问第一台服务器的客户端(浏览器) 我如何直接(不将文件保存在第二台服务器上)将文件从第一台服务器下载到客户端计算机? 从第二台服务器可以获取 ByteArrayOutputStream 来从第一台服务器获取文件,我可以使用REST服务将此流进一步传递给客户端吗? 这样行吗? 因此,基本上我

  • 问题内容: 我正在使用Java开发SIP应用程序,并且想知道目前最常用的SIP库是什么。 MJSIP? 问题答案: 据我所知,它的JAIN- SIP 。顺便说一句,很高兴了解MjSip。您可能对JBoss Mobicent的 关注感兴趣,当前用户指南尚不完整。并且您不会在Mobicent上找到太多帮助。 或者,正如metadaddy说在这里,“你可能想看看SailFin -它是一个SIP Serv

  • 问题内容: 在上一个问题中如何在Java 8中动态进行过滤?StuartMarks给出了一个很好的答案,并提供了一些有用的实用程序来处理从流中选择topN和topPercent。 我将从他的原始答案中将它们包括在这里: 我的问题是: [1]如何从具有一定数量项目的流中获取3到7的顶级项目,因此,如果流中有A1,A2 .... A10中的项目,则调用 将返回{A3,A4,A5,A6,A7} 我能想到

  • 问题内容: 将字符串拆分为流的 最佳 方法是什么? 我看到了这些变化: 我的优先事项是: 坚固性 可读性 性能 一个完整的可编译示例: 问题答案: / 由于返回数组,因此我始终建议您使用流式处理数组的规范用法。 / 是一个 varargs 方法,它恰好接受一个数组,这是由于varargs方法是通过数组实现的,并且在将varargs引入Java以及改型为接受可变参数的现有方法时,存在兼容性方面的问题

  • 问题内容: 我是Java 8的新手,不确定如何使用流及其排序方法。如果我的地图如下,如何使用Java 8按值对地图进行排序以仅获取前10个条目。 我知道在Java 8之前,我们可以按以下链接进行排序:http://codingdict.com/questions/116310 问题答案: 您可以随时开始阅读文档和一些 教程。 参考 http://www.leveluplunch.com/java/

  • 问题内容: 我有以下情况 我已经合并所有列表从从对象地图。 知道如何使用Java 8流API吗? 问题答案: 我想这就是您要寻找的。 例如:

  • 问题内容: 我需要使用bouncycastle提供程序使用pgp加密流。我可以找到的所有示例都是关于获取纯文本文件并对其进行加密的,但是我没有文件,因此务必不要将纯文本写入磁盘。 我见过的大多数方法都在使用 希望传递纯文本的PGPUtil.writeFileToLiteralData。我宁愿传递byte []或inputStream。 有人可以指出一个例子吗 从字符串/字节[] /输入流开始 将所

  • 问题内容: 我一直在寻找新的rx java 2,但我不确定我是否已经明白了这个主意… 我知道我们所拥有的并没有支持。 因此,基于例如,可以说我有有: 在大约128个值之后,这将崩溃,这很明显我消耗的速度比获取项目要慢。 但是,我们有相同的 即使我延迟使用它,它仍然完全不会崩溃。为了工作,可以说我放了一个运算符,崩溃已经消失了,但并不是所有值都被发出。 因此,我目前在脑海中找不到答案的基本问题是,为