繁体   English   中英

Google Maps API v3密钥已停止工作

[英]Google Maps API v3 Key Stopped Working

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

该网站是由很久以前的其他人创建的,并且已经经历了许多团队,因此有点混乱。 实际上,它同时使用JS地理编码器和Ruby地理编码器gem。 我创建了一个新的Google开发者帐户进行测试,并创建了两个Public API Access Key:1个用于浏览器应用程序,1个用于服务器应用程序。 我将本地Internet(用于localhost)的IP地址和登台服务器的IP地址设置为服务器密钥,并将浏览器密钥的引荐来源地址设置为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​​密钥时,这也可以使用,尽管我不认为这是一个永久性的解决方案,因为生产站点将获得太多流量以至于无法支付未支付的配额(正确?)。

我已经在Google API控制台的API下启用了“ Google Maps JavaScript API v3”,但是这样做后我需要重新生成密钥。 令人沮丧的是,只有来自Google的错误消息的第一句话是任何正确的形式,但现在可以使用了。 欢呼!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM