簡體   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