Google地理编码API设置可找到正确的ClientID和Secret

时间:2013-07-18 17:23:41

标签: google-maps google-geocoder google-geocoding-api

我正在构建一个java Web应用程序,它需要https://developers.google.com/maps/documentation/geocoding/上定义的googles地理编码服务。我的应用程序是全部设置,一切正常,我现在正尝试签署我的请求以允许API的其他功能,例如额外的费率限制计费等...

我遇到的问题是我似乎无法获得适用于地理编码API的客户端ID和密钥。我在Google API控制台的API Access选项卡中使用了id和key的所有合理组合。要测试我的凭据,我已直接从谷歌http://gmaps-samples.googlecode.com/svn/trunk/urlsigning/index.html复制PHP代码,以确保我的请求被正确签名。我看了一个谷歌开发者关于这个主题的视频(https://www.youtube.com/watch?v=ODeXo7YIwVg)并且它显示了这是为Google商业帐户完成的,在阅读了谷歌的API文档后,你似乎没有拥有一个企业帐户使用地理编码服务,但我似乎无法获得有效的客户端ID和密钥为我工作。有谁知道在非商业帐户上使用此服务的正确设置?或甚至可能吗? (请记住这是服务器到服务器的连接)

如果有人需要其他信息,请告诉我们。我会很感激任何建议。

编辑:查看https://developers.google.com/maps/documentation/geocoding/#Limits上列出的使用限制,您会发现这意味着您可以在没有商业帐户的情况下使用地理编码API ......但是如何使用?

1 个答案:

答案 0 :(得分:3)

我浏览了文档,正如您正确指出的那样,您不需要使用商家帐户来使用地理编码API。如果您有非企业帐户,则只需传递API密钥即可。只有拥有企业帐户时才需要客户ID。密钥本身是独一无二的,如下所述:

https://developers.google.com/console/help/#WhatIsKey

  

API密钥是您使用控制台生成的唯一密钥。当您的应用程序需要调用在此项目中启用的API时,应用程序会将此密钥作为key = API_key参数传递给所有API请求。使用此密钥不需要任何用户操作或同意,不授予对任何帐户信息的访问权限,也不用于授权。

根据以下链接,在商业帐户的情况下,使用客户ID代替密钥。

https://developers.google.com/maps/articles/v2tov3#newkey

  

如果您是Maps for Business客户,则需要使用客户端ID代替密钥。请注意,两者不能一起使用。客户端ID与密钥类似,但有以下区别:

     
      
  • 使用客户端ID的商家应用程序地图可能有权访问其他功能或限制,例如Maps Analytics。您的客户ID将由Google Enterprise支持人员提供给您。您无需使用API​​控制台。

  •   
  • 加载Google Maps JavaScript API时,您将使用client参数而不是key参数。

  •   

我猜这个原理同样适用于地理编码API。如果您想要不属于非商业帐户的附加功能,则必须获得商业帐户。

我只使用密钥在Java中签署我的请求运行以下代码,它运行正常。

    public static String getAddress(String latitude, String longitude){
    String address = null;
    try {
        final String inputurl = "http://maps.googleapis.com/maps/api/geocode/xml?latlng="+ latitude + "," + longitude + "&sensor=true";
//          Sign the URL using key
        String url = getRequestURL(inputurl);
        url = "http://maps.googleapis.com" + url;

        final URL google = new URL(inputurl);
        final URLConnection geocode = google.openConnection();
        final BufferedReader in = new BufferedReader(new InputStreamReader(
                geocode.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            address += inputLine;
        }
        in.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    return null;
}

public static String getRequestURL(final String inputurl) throws IOException,
InvalidKeyException, NoSuchAlgorithmException, URISyntaxException {
    // Convert the string to a URL so we can parse it
    final URL url = new URL(inputurl);

    final URLSigner signer = new URLSigner("*INSERT YOUR KEY HERE*");
    final String request = signer.signRequest(url.getPath(), url.getQuery());

    return request;
}