0
votes

I am trying to establish connectivity with google maps api using service account. I have a project in place in google maps api, and I have the relvant clientID, .p12 key, email address. I am using google libraries to get the credentials and to call the API as below.

CODE:

package mapsengine;import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.mapsengine.MapsEngine;
import com.google.api.services.mapsengine.model.Map;
import com.google.api.services.mapsengine.model.Layer;
import java.io.File;import java.io.IOException;
import java.util.Collections;
public class Main {  /** Provide the ID of the map you wish to read. */ 


private static final String MAP_ID = "my map id i gave";
private static final String APPLICATION_NAME = "Google-MapsEngineApiSample/1.0"; 
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("https://www.googleapis.com/auth/mapsengine"))
.setServiceAccountPrivateKeyFromP12File(new File("key.p12")) .build();
credential.refreshToken();
System.out.println(credential); 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.  
    MapsEngine mapsEngine = new MapsEngine.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .
            setApplicationName(APPLICATION_NAME).build(); 
    System.out.println(mapsEngine);
    // Make a request to get the details of a particular map.  
//  Map map = mapsEngine.maps().get(MAP_ID).execute(); 
            System.out.println(map.getName());   
    System.out.println(map.getDescription());   
    } 
catch (IOException e) {  
    System.out.println(e.getMessage()); 
    } catch (Throwable t) { 
        t.printStackTrace();    
}
}

}`

I am getting an error as 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "mapsengine", "location" : "id", "locationType" : "parameter", "message" : "Permission denied (reader access required).", "reason" : "noReaderAccess" } ], "message" : "Permission denied (reader access required)." }

But I am able to see that the service email account which I am using has edit access, also i tried by giving view access. What else I am missign here. Please help.

1
The code block did not get created properly in the post.abinaya venkatesan

1 Answers

0
votes

you need to go your map, and add your SERVICE_ACCOUNT_EMAIL address and give it can edit or view premission follow this: https://support.google.com/mapsengine/answer/4618526?hl=en