2014-09-23 3 views
0

Я работаю над сайтом, использующим Google Geocoding, чтобы получить длину/длину для местоположения по строке поиска. На прошлой неделе приложение отлично работало, но на этой неделе оно только что прекратилось. Я ничего не менял ни на сайте, ни в Google API Console; он просто переставал работать над собой.Google Maps API v3 Key Stopped Working

Сайт был построен кем-то еще давным-давно и прошел через многие команды, поэтому это немного беспорядок. На самом деле он использует как геокодер JS, так и драгоценный камень геодезиста Ruby. Я создал новую учетную запись разработчика Google для тестирования и создал два открытых ключа доступа к API: 1 для приложений браузера и 1 для серверных приложений. Я установил IP-адреса своего локального Интернета (для localhost) и моего промежуточного сервера для ключа сервера, и я установил ссылки для ключа браузера на http://localhost:3000/* и https://staging.myserver.com/*. Это было в прошлую пятницу, и все сработало отлично.

Вчера я работал над сайтом, и я заметил, что геокодер больше не работает. Я получаю это сообщение об ошибке при попытке найти местоположение:

Google отключил использование API Карт для этого приложения. На этом сайте не разрешено использовать идентификатор клиента Google Maps. Если вы являетесь владельцем этого приложения, вы можете узнать больше о регистрации URL-адресов здесь: https://developers.google.com/maps/documentation/business/clientside/auth#registering_authorized_urls

Это очень запутанным для меня, потому что я не передавая любой идентификатор клиента. Вот соответствующая функция 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) продолжает работать во всем этом.

Что я делаю неправильно?

Edit: Может быть стоит отметить, что это также работает, когда я не использую ключи API на всех, хотя я не думаю, что это окончательное решение, потому что участок производства получит слишком много трафика на оставаться в пределах неоплаченных квот (не так ли?).

+0

Я бы дал Google крик ... если вы платите за их обслуживание, и он перестает работать, они должны быть в состоянии помочь – tymeJV

+0

Наш клиент очень защищает свою учетную запись Google и не даст нам доступ.Мы обращаемся к ним, чтобы выяснить, как мы можем связаться с Google Support через их аккаунт. – TGPrankster

ответ

2

Я включил API Google Maps JavaScript API 3 в API в консоли API Google, но после этого мне нужно было восстановить мои ключи. Вид расстраивает то, что только первое предложение сообщения об ошибке от Google было правильным, но оно работает сейчас. Ура!