google-analytics - 错误 : Analytics Reporting API V4 has not been used in project

标签 google-analytics google-analytics-api

我正在尝试从 JAVA 代码访问我的 Analytics(分析)数据。但是当下面的代码运行时,

package com.test.googleapi;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.analyticsreporting.v4.AnalyticsReporting;
import com.google.api.services.analyticsreporting.v4.model.DateRange;
import com.google.api.services.analyticsreporting.v4.model.Dimension;
import com.google.api.services.analyticsreporting.v4.model.GetReportsRequest;
import com.google.api.services.analyticsreporting.v4.model.GetReportsResponse;
import com.google.api.services.analyticsreporting.v4.model.Metric;
import com.google.api.services.analyticsreporting.v4.model.ReportRequest;

public class AnalyticsApiTest {
    public static void main(String[] args) throws Exception {
        GoogleCredential credential = GoogleCredential
                .fromStream(new FileInputStream(new File("assets/client-secrets/service-account-key.json")))
                .createScoped(Collections.singleton("https://www.googleapis.com/auth/analytics.readonly"));
        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        AnalyticsReporting analyticsReporting = new AnalyticsReporting.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName("Test")
                .build();

        DateRange dateRange = new DateRange();
        dateRange.setStartDate("2015-06-15");
        dateRange.setEndDate("2015-06-30");

        // Create the Metrics object.
        Metric sessions = new Metric()
            .setExpression("ga:sessions")
            .setAlias("sessions");

        //Create the Dimensions object.
        Dimension browser = new Dimension()
            .setName("ga:browser");

        // Create the ReportRequest object.
        ReportRequest request = new ReportRequest()
            .setViewId("XXXX")
            .setDateRanges(Arrays.asList(dateRange))
            .setDimensions(Arrays.asList(browser))
            .setMetrics(Arrays.asList(sessions));

        ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
        requests.add(request);

        // Create the GetReportsRequest object.
        GetReportsRequest getReport = new GetReportsRequest()
            .setReportRequests(requests);

        // Call the batchGet method.
        GetReportsResponse response = analyticsReporting.reports().batchGet(getReport).execute();

    }
}

我收到以下错误:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Analytics Reporting API V4 has not been used in project analytics-test-1279 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=analytics-test-1279 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
    "reason" : "forbidden"
  } ],
  "message" : "Analytics Reporting API V4 has not been used in project analytics-test-1279 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/analyticsreporting.googleapis.com/overview?project=analytics-test-1279 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
  "status" : "PERMISSION_DENIED"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at com.test.googleapi.AnalyticsApiTest.main(AnalyticsApiTest.java:73)

我已经在 analytics-test-1279 项目中设置了服务帐户 key 。 Analytics API 也已启用。

The Analytics API is enabled

我无法弄清楚这里到底是什么问题。

最佳答案

如错误消息中所述,您需要启用 Analytics Reporting API .他们在错误中轻松地为您提供了指向同一页面的直接链接。

从您的屏幕截图中,您已经启用了 Analytics API .其中包含 Management API V3和旧Core Reporting API V3 .

随着 Analytics Reporting API V4 的发布您需要启用全新的 API。好消息是authorize仍然使用相同的范围,因此您的用户无需重新授权您的应用程序。

关于google-analytics - 错误 : Analytics Reporting API V4 has not been used in project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700170/

相关文章:

google-analytics - Google Analytics 页内分析中增强的链接归因不起作用

javascript - 如何禁用默认的 Google Analytics 虚拟页面记录

google-analytics - 页面重新加载时 Google Analytics 结束 session

新的 Google Analytics (analytics.js) 设置中未跟踪事件

jquery - dataLayer.push() 不会触发 HTTP 请求

php - 如何每天进行cron更新来自Google Analytics(分析)的数千个页面的浏览量

google-analytics - 为什么Google Analytics(分析)API在我的过滤器查询中使用“\”?

ios - 是否可以在 IOS 模拟器中使用 Google Analytics 跟踪应用程序?

api - 通过 Reporting API 从 Google Analytics 获取 ClientId 和 UserId

google-analytics - Google Analytics Management API-批处理请求返回“配额错误:超出写入速率限制”