【发布时间】: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