我试图从我的Java应用引擎模块访问Google Analytics(分析)API
。
我有以下代码来检索凭证。
public HttpRequestInitializer getCredentials() throws GeneralSecurityException, IOException {
HttpRequestInitializer httpRequestInitializer;
if (com.google.appengine.api.utils.SystemProperty.environment.value() == com.google.appengine.api.utils.SystemProperty.Environment.Value.Development) {
String certificate = "/token.p12";
File privateKey = null;
try {
privateKey = new File(getClass().getResource(certificate).toURI());
} catch (URISyntaxException e) {
log.log(Level.SEVERE, e.getMessage(), e);
}
httpRequestInitializer = new GoogleCredential.Builder()
.setTransport(new NetHttpTransport())
.setJsonFactory(new JacksonFactory())
.setServiceAccountId("[email protected]")
.setServiceAccountPrivateKeyFromP12File(privateKey)
.setServiceAccountScopes(Collections.singleton(AnalyticsScopes.ANALYTICS_READONLY))
.build();
} else {
httpRequestInitializer = new AppIdentityCredential(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY));
}
return httpRequestInitializer;
}
我已经在云开发控制台中为该项目启用了分析API。在Google Analytics(分析)中,我授予了服务帐户读取权限。 Google Analytics(分析)所使用的Google帐户与我用于Google Cloud的帐户相同。
无论如何,当使用App Engine开发服务器时,此代码有效,我可以点击api(使用客户端库)。但是,当从App Engine本身运行并使用AppIdentityCredential时,尝试访问API时出现以下异常。
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 OK
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "User does not have any Google Analytics account.",
"reason" : "insufficientPermissions"
} ],
"message" : "User does not have any Google Analytics account."
}
我假设
AppIdentityCredential
身份验证为拥有app
引擎项目的用户,但是我猜不是吗?我想使用
AppIdentityCredential
,因为据我了解,建议将其用于生产实例。如何使用
AppIdentityCredential
并使用它访问分析api
? 最佳答案
嗯,我知道了。
应用程序引擎项目与[email protected]的标识/帐户绑定。在分析设置中授予该帐户访问权限,使应用引擎代码可以使用AppIdentityCredential访问该帐户
关于java - 来自App Engine的AppIdentityCredential权限不足的Analytics API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30067475/