Google Analytics 403:禁止使用 Java 中的 p12 键
Google Analytics 403: Forbidden with p12 key in Java
我正在尝试通过 API 将用户添加到 Google Analytics 帐户。
我有以下代码:
private static final String APPLICATION_NAME = "MyNameProject";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static final String SERVICE_ACCOUNT_EMAIL = "XXXXXXX@developer.gserviceaccount.com";
private static Credential authorize() throws Exception {
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(
Collections.singleton(AnalyticsScopes.ANALYTICS_MANAGE_USERS))
.setServiceAccountPrivateKeyFromP12File(new File("/bla/MyKey.p12"))
.build();
credential.refreshToken();
return credential;
}
public static void main(String[] args) {
try {
// Authorize this application to access the user's data.
Credential credential = authorize();
// Create an authorized Maps Engine client with the credential.
Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
UserRef userRef = new UserRef();
userRef.setEmail("usertoadd@gmail.com");//add mail
// Construct the permissions object.
Permissions permissions = new Permissions();
List local = Arrays.asList("EDIT", "MANAGE_USERS");
permissions.setLocal(local);
// Construct the body of the request
EntityUserLink body = new EntityUserLink();
body.setPermissions(permissions);
body.setUserRef(userRef);
analytics.management().profileUserLinks().insert("66666666", "UA-55555555-1",
"888888888", body).execute();
} catch (GoogleJsonResponseException e) {
System.err.println("There was a service error: " + e.getDetails().getCode() + " : "
+ e.getDetails().getMessage());
e.printStackTrace();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
}
我遇到了以下错误:
There was a service error: 403 : User does not have sufficient permissions for this account.
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
JSON:
{
"code" : 403,
"errors":[{
"domain" : "global",
"message" : "User does not have sufficient permissions for this account.",
"reason" : "insufficientPermissions"
} ],
"message" : "User does not have sufficient permissions for this account."
}
我不知道该怎么办。
有什么帮助吗?
谢谢!
Matt 帮助我解决了这个问题并且它起作用了。
解决方法是先将"XXX...@developer.gserviceaccount.com"添加到可以管理用户的授权用户列表中。
服务帐户就像一个单独的授权用户,可以在帐户、属性 或视图级别添加。
这里是post:https://groups.google.com/forum/#!topic/google-analytics-management-api/hM1cg-YMdrA
再见!
我正在尝试通过 API 将用户添加到 Google Analytics 帐户。 我有以下代码:
private static final String APPLICATION_NAME = "MyNameProject";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static final String SERVICE_ACCOUNT_EMAIL = "XXXXXXX@developer.gserviceaccount.com";
private static Credential authorize() throws Exception {
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(
Collections.singleton(AnalyticsScopes.ANALYTICS_MANAGE_USERS))
.setServiceAccountPrivateKeyFromP12File(new File("/bla/MyKey.p12"))
.build();
credential.refreshToken();
return credential;
}
public static void main(String[] args) {
try {
// Authorize this application to access the user's data.
Credential credential = authorize();
// Create an authorized Maps Engine client with the credential.
Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
UserRef userRef = new UserRef();
userRef.setEmail("usertoadd@gmail.com");//add mail
// Construct the permissions object.
Permissions permissions = new Permissions();
List local = Arrays.asList("EDIT", "MANAGE_USERS");
permissions.setLocal(local);
// Construct the body of the request
EntityUserLink body = new EntityUserLink();
body.setPermissions(permissions);
body.setUserRef(userRef);
analytics.management().profileUserLinks().insert("66666666", "UA-55555555-1",
"888888888", body).execute();
} catch (GoogleJsonResponseException e) {
System.err.println("There was a service error: " + e.getDetails().getCode() + " : "
+ e.getDetails().getMessage());
e.printStackTrace();
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
}
我遇到了以下错误:
There was a service error: 403 : User does not have sufficient permissions for this account.
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
JSON: { "code" : 403, "errors":[{ "domain" : "global", "message" : "User does not have sufficient permissions for this account.", "reason" : "insufficientPermissions" } ], "message" : "User does not have sufficient permissions for this account." }
我不知道该怎么办。 有什么帮助吗? 谢谢!
Matt 帮助我解决了这个问题并且它起作用了。 解决方法是先将"XXX...@developer.gserviceaccount.com"添加到可以管理用户的授权用户列表中。 服务帐户就像一个单独的授权用户,可以在帐户、属性 或视图级别添加。
这里是post:https://groups.google.com/forum/#!topic/google-analytics-management-api/hM1cg-YMdrA
再见!