错误:Analytics Reporting API V4尚未在项目中使用

时间:2016-04-18 17:07:33

标签: google-analytics google-analytics-api

我正在尝试从JAVA代码访问我的Google Analytics数据。但是当运行以下代码时

return $user->with('heroes')->get()->toJson()

我收到以下错误:

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 API也已启用。

The Analytics API is enabled

我无法弄清楚究竟是什么问题。

1 个答案:

答案 0 :(得分:5)

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

在屏幕截图中,您启用了Analytics API。其中包含Management API V3和旧Core Reporting API V3

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