我有以下 Java 代码来尝试使用 GA4 Java 绑定/类从 GA4 获取单个指标:
String propertyId = "123123123";
GoogleCredentials gc = ServiceAccountCredentials.fromStream(this.getClass().getResourceAsStream("/client_secrets.json"))
.createScoped(Collections.singletonList(StorageScopes.DEVSTORAGE_FULL_CONTROL));
BetaAnalyticsDataSettings betaAnalyticsDataSettings = BetaAnalyticsDataSettings.newBuilder().setCredentialsProvider(FixedCredentialsProvider.create(gc)).build();
BetaAnalyticsDataClient betaAnalyticsDataClient = BetaAnalyticsDataClient.create(betaAnalyticsDataSettings);
RunReportRequest request = RunReportRequest.newBuilder().setProperty("properties/" + propertyId).
addMetrics(Metric.newBuilder().setName("active7DayUsers")).
addDateRanges(DateRange.newBuilder().
setStartDate("2023-07-31").setEndDate("today")).build();
RunReportResponse response = betaAnalyticsDataClient.runReport(request);
这会导致 RunReportResponse 生成出现异常,例如。 g.
com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes
如何获得足够的认证范围?
到目前为止我已经
有什么想法或指示吗?
我已经完成了我能找到的每个 GUI 选项,我为 GA4 帐户和属性设置了完整的管理员权限,并且使用 GA4 GUI 我可以看到属性在那里,数据正在积累等 - 一切都正常,除了API。
这个问题非常普遍,我已经阅读了几篇有关此问题的帖子,但根本没有解决方案。
我还尝试降级帐户和财产的每个权限,并以所有可能的组合升级它们,继续获得
com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scope
我做错了什么?上面的代码有问题吗?
谢谢
请检查另一个选项:转到您的analytics.google帐户,然后单击“财产访问管理”或“财产访问管理”(抱歉,我的页面是意大利语,我正在使用浏览器的“翻译成英语”选项以便于理解) )
然后您应该会在此处的 client_secrets.json 文件中看到具有
Administrator
角色的电子邮件。
Java部分:
假设 credentialsJsonPath 变量是
String
以及您的秘密 json 文件的路径,而 propertyId 是包含您的客户端 propertyId 的变量。 GoogleCredentials credentials =
GoogleCredentials.fromStream(new FileInputStream(credentialsJsonPath));
BetaAnalyticsDataSettings betaAnalyticsDataSettings =
BetaAnalyticsDataSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credentials))
.build();
try (BetaAnalyticsDataClient analyticsData =
BetaAnalyticsDataClient.create(betaAnalyticsDataSettings)) {
int offset=0;
int limit=100000;
RunReportRequest request =
RunReportRequest.newBuilder()
.setProperty("properties/" + propertyId)
.addDateRanges(DateRange.newBuilder().setStartDate("your start date").setEndDate("your end date"))
.addDimensions(Dimension.newBuilder().setName("date"))
.addDimensions(Dimension.newBuilder().setName("eventName"))
.addMetrics(Metric.newBuilder().setName("eventCount"))
.addMetrics(Metric.newBuilder().setName("eventsPerSession"))
.addMetrics(Metric.newBuilder().setName("eventValue"))
.setOffset(offset)
.setLimit(limit)
.build();
RunReportResponse response = analyticsData.runReport(request);
System.out.println(response);
}catch(Exception e){
e.printStackTrace();
}
当然,您可以阅读任何其他兼容的维度/指标,我只是使用了一些示例。