1
votes

I'm trying to add an user to a Google Analytics account by API. I have the following code:

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 = "[email protected]";

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("[email protected]");//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();
    }
}

And I'm having the following error:

There was a service error: 403 : User does not have sufficient permissions for this account.
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden

The 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." }

I dont know what to do. Any help? Thanks!

1

1 Answers

1
votes

Matt helped me to fix this and it worked. The solution is first add "[email protected]" to the authorized list of users who can Manage Users. The service account acts like a separate authorized user, and can be added at the Account, Property or View level.

Here the post: https://groups.google.com/forum/#!topic/google-analytics-management-api/hM1cg-YMdrA

Bye!