【问题标题】:Google Maps API v3 Key Stopped WorkingGoogle Maps API v3 密钥停止工作
【发布时间】:2014-09-23 16:36:52
【问题描述】:

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

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

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

Google 已禁用此应用程序的 Maps API。本网站无权使用所提供的 Google 地图客户端 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 开发者帐户,其中包含全新的密钥(没有 IP 或推荐人)。我更新了我网站上的密钥,重新启动......但仍然没有。我继续进行故障排除,但大约 20 分钟后它才开始自行工作!再一次,不用我改变任何东西。

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

服务器密钥(由 Ruby gem 使用)在整个过程中一直有效。

我做错了什么?

编辑: 可能值得注意的是,当我根本不使用 API 密钥时,这也有效,尽管我不认为这是一个永久的解决方案,因为生产站点将获得太多流量而无法保持在未付费配额内(对吗?) .

【问题讨论】:

  • 我要向 Google 喊一声……如果您为他们的服务付费但它停止工作,他们应该能够提供帮助
  • 我们的客户非常保护他们的 Google 帐户,不会让我们访问。我们正在与他们联系,以了解如何通过他们的帐户联系 Google 支持。

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


【解决方案1】:

我在 Google API 控制台的 API 下启用了“Google Maps JavaScript API v3”,但这样做后我需要重新生成我的密钥。令人沮丧的是,只有来自谷歌的错误消息的第一句话是正确的,但它现在正在工作。万岁!

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多