2014-09-23 172 views
0

我正在使用Google地理編碼通過搜索字符串獲取位置的緯度/經度。該應用上週工作正常,但本週它剛剛停止。我沒有在網站或Google API控制檯上更改任何內容;它只是停止了自己的工作。Google Maps API v3密鑰停止工作

該網站很久以前由其他人創建,並且經歷了很多團隊,所以它有點混亂。它實際上同時使用了JS地理編碼器和Ruby地理編碼器gem。我創建了一個新的Google開發者帳戶進行測試,並創建了兩個公共API訪問密鑰:1個用於瀏覽器應用程序,1個用於服務器應用我設置了本地互聯網(對於本地主機)的IP和服務器密鑰的分段服務器,並將瀏覽器密鑰的引用鏈接設置爲http://localhost:3000/*https://staging.myserver.com/*。這是上週五,一切都很完美。

昨天我在網站上工作,我注意到geocoder不再工作。嘗試搜索某個位置時收到此錯誤消息:

Google禁止在此應用中使用Maps API。本網站未被授權使用提供的Google地圖客戶端ID。如果您是此應用的所有者,您可以瞭解更多有關如何註冊網址: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​​密鑰可言,但我不認爲這是一個永久性的解決方案,因爲製作的網站將獲得太多流量留在未付的配額內(對吧?)。

+0

我會給Google留言......如果您爲他們的服務付款並停止工作,他們應該可以提供幫助 – tymeJV 2014-09-23 20:15:40

+0

我們的客戶非常保護他們的Google帳戶,並且不會給我們訪問權限。我們正在聯繫他們瞭解我們如何通過他們的帳戶與Google支持人員聯繫。 – TGPrankster 2014-09-23 20:35:48

回答

2

我已經在Google API控制檯的API下啓用了「Google Maps JavaScript API v3」,但我需要在重新生成密鑰後重新生成密鑰。令人沮喪的是,只有來自谷歌的錯誤消息的第一句話是任何一種正確的,但它現在正在工作。歡呼!