我正在使用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密钥时这也有效,虽然我不认为这是一个永久的解决方案,因为生产网站将获得太多的流量以保持在未付的配额内(右?)。
答案 0 :(得分:2)
我已启用&#34; Google Maps JavaScript API v3&#34;在Google API控制台中的API下,但我需要在执行此操作后重新生成密钥。有点令人沮丧的是,只有来自Google的错误消息的第一句话是任何形式的正确,但它现在正在工作。乌拉!