Google Maps API v3密钥已停止工作

时间:2014-09-23 16:36:52

标签: javascript google-maps-api-3 api-key

我正在使用Google地理编码的网站上,通过搜索字符串获取某个位置的纬度/经度。该应用程序上周工作正常,但本周它刚刚停止。我在网站或Google API控制台上没有更改任何内容;它只是停止了自己的工作。

这个网站是很久以前由其他人建造的,已经经过很多团队,所以这有点乱。它实际上使用了JS地理编码器和Ruby地理编码器gem。我创建了一个用于测试的新Google开发人员帐户,并创建了两个公共API访问密钥:1个用于浏览器应用程序,1个用于服我设置了本地Internet的IP(对于localhost)和我的服务器密钥的登台服务器,并将浏览器密钥的引用设置为http://localhost:3000/*https://staging.myserver.com/*。这是上周五,一切都很顺利。

昨天我在网站上工作,我注意到地理编码器不再工作了。尝试搜索位置时收到此错误消息:

  

Google已禁止将Maps API用于此应用程序。本网站无权使用提供的Google Maps客户端ID。如果您是此应用程序的所有者,则可以在此处了解有关注册URL的更多信息:https://developers.google.com/maps/documentation/business/clientside/auth#registering_authorized_urls

这对我来说非常困惑,因为我没有传递任何客户端ID。这是相关的JS函数:

Locations.getNearbyLocationsFromAddress = function(address) {
  var deferred = $.Deferred();
  Locations.google_ready_deferred = $.Deferred();
  if (typeof(google) === "undefined") {
    $.getScript("https://maps.googleapis.com/maps/api/js?key=<%= KEYS['GOOGLE_MAPS_API_KEY'] %>&sensor=true&channel=Royalty&callback=RedRoyalty.Locations.googleReady");
  } else {
    Locations.google_ready_deferred.resolve();
  }

  Locations.google_ready_deferred.done(function() {
    var geocoder = new google.maps.Geocoder();

    geocoder.geocode({'address': address, 'region': 'us'}, function(results, status) {
     if (results.length == 0) {
       $(".js-locations-form input").addClass("error");
       $(".errors").html("Sorry, you've gotta enter a valid location. Mind trying again?");
       return;
     } else {
       $(".js-locations-form input").removeClass("error");
       $(".errors").empty();
     }

     var targetResult = -1;
     for (var i=0; i<results.length; i++) {
      for (var j=0; j<results[i].address_components.length; j++) {
        if ($.inArray('country', results[i].address_components[j].types) >= 0) {
          if (results[i].address_components[j].short_name == "US" || results[i].address_components[j].short_name == "CA") {
            targetResult = i;
            break;
          }
        }
      }
      if (targetResult !== -1) break;
     }

     if (targetResult === -1) targetResult = 0;

     Locations.getNearbyLocationsFromCoordinates({
       latitude: results[targetResult].geometry.location.lat(),
       longitude: results[targetResult].geometry.location.lng()
      }, deferred);
    });

  });

  return deferred;
};

我尝试解决此问题的第一件事是从我的公共访问密钥中删除所有IP和引用。这不起作用,所以我创建了一个全新的Google Developer帐户,其中包含全新的密钥(没有IP或引用)。我更新了我网站上的密钥,重新启动......但仍然没有。我继续进行故障排除,但大约20分钟后它就开始着手进行故障排除!再一次,没有我改变任何东西。

然而,今天早上,我得到的是昨天我遇到的相同的错误。查看我创建的第二个帐户的Google API控制台,我可以看到它已经超过了它每天0个请求的配额...但是为什么它昨天一直在运行?此外,为什么第一个帐户的密钥不起作用?我实际上已在该帐户启用了结算功能,因此超出了任何配额。

服务器密钥(由Ruby gem使用)在所有这些中继续有效。

我做错了什么?

修改 可能值得注意的是,当我根本不使用API​​密钥时这也有效,虽然我不认为这是一个永久的解决方案,因为生产网站将获得太多的流量以保持在未付的配额内(右?)。

1 个答案:

答案 0 :(得分:2)

我已启用&#34; Google Maps JavaScript API v3&#34;在Google API控制台中的API下,但我需要在执行此操作后重新生成密钥。有点令人沮丧的是,只有来自Google的错误消息的第一句话是任何形式的正确,但它现在正在工作。乌拉!