2016-07-01 19 views
12

Wie nutzen Sie die API von Google Maps v3 ohne den Schlüssel? Ich habe es in this example gesehen, aber kann nicht herausfinden, was speziell verursacht es nicht zu Fehler.Google Maps API ohne Schlüssel?

Edit: Wenn jemand es vorschlägt, sind die anderen Antworten zu diesem Thema auf StackOverflow veraltet und nicht mehr anwendbar.

Antwort

12

Tat den Link ohne Schlüssel http://www.birdtheme.org/useful/v3largemap.html Werke geschrieben (es gibt nur eine Warnung in der Konsole). Es sieht so aus, als ob Google einige Domainnamen auf die weiße Liste setzt, um die Verwendung von API ohne Schlüssel zu ermöglichen. OpenStreetMap Fliesen

Ich habe versucht, die Google Maps API v3 zu verwenden, um anzuzeigen, aber es erzeugt eine „Google Maps-API-Fehler: MissingKeyMapError“ auf meinem localhost, während es auf dieser Website ohne API-Schlüssel funktioniert: http://harrywood.co.uk/maps/examples/google-maps/apiv3.html

Auf den meisten Websites, die keinen API-Schlüssel verwenden, gibt einen Fehler, der die Verwendung von Google Maps verhindert, aber Sie können diese Zensur umgehen.

Lösung, wenn Sie nicht selbst den Server mit Google Maps API ohne Schlüssel:

blockieren die HTTP-Anforderung den Fehler mit einem Add-on wie AdBlockPlus senden und die Regel http://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate?*

Diese Sie geben Zugriff auf Google Maps API-Kacheln, Marker, InfoWindow Popup ... Aber wenn Sie die Geocoding-API verwenden möchten, müssen Sie auch remove your HTTP referer header mit einem Browser-Addon wie "Header ändern".

Lösung in Ihrer Web-Seite hinzufügen, damit ohne Schlüssel alle Besucher können Google Maps-API zugreifen:

Unten finden Sie eine JavaScript-Hack ist ich ohne Schlüssel und umgehen die Fehlermeldung Google Maps API V3 verwenden erstellt.

// hack Google Maps to bypass API v3 key (needed since 22 June 2016 http://googlegeodevelopers.blogspot.com.es/2016/06/building-for-scale-updates-to-google.html) 
var target = document.head; 
var observer = new MutationObserver(function(mutations) { 
    for (var i = 0; mutations[i]; ++i) { // notify when script to hack is added in HTML head 
     if (mutations[i].addedNodes[0].nodeName == "SCRIPT" && mutations[i].addedNodes[0].src.match(/\/AuthenticationService.Authenticate?/g)) { 
      var str = mutations[i].addedNodes[0].src.match(/[?&]callback=.*[&$]/g); 
      if (str) { 
       if (str[0][str[0].length - 1] == '&') { 
        str = str[0].substring(10, str[0].length - 1); 
       } else { 
        str = str[0].substring(10); 
       } 
       var split = str.split("."); 
       var object = split[0]; 
       var method = split[1]; 
       window[object][method] = null; // remove censorship message function _xdc_._jmzdv6 (AJAX callback name "_jmzdv6" differs depending on URL) 
       //window[object] = {}; // when we removed the complete object _xdc_, Google Maps tiles did not load when we moved the map with the mouse (no problem with OpenStreetMap) 
      } 
      observer.disconnect(); 
     } 
    } 
}); 
var config = { attributes: true, childList: true, characterData: true } 
observer.observe(target, config); 

Dies werden Sie auf Google Maps API Kacheln zugreifen, Marker, infowindow Pop-up ... Für das Geocoding API haben Sie auch unter Ihrem Referrer mit dem HTML-Meta-Tag zu entfernen.

<meta name="referrer" content="no-referrer"> <!-- don't send HTTP referer for privacy purpose and to use Google Maps Geocoding API without key --> 
+0

Vielen Dank, das funktioniert für mich :) – user3719857

+0

Ja, es funktioniert, aber die erste API-Anfrage ist sehr langsam (5 bis 10 Sekunden), aufgrund der verzögerten Download von Google QuotaService.RecordEvent Datei, dann alle anderen Anfrage funktioniert gut ... Eine Erklärung? –

+0

@DrFred Ich habe gesehen, dass es etwas länger dauert, um die erste Antwort von der Geocoding-API zu erhalten. Das Verzögerungsproblem kommt sicherlich von Google-Servern, die versuchen, Sie mit einem API-Schlüssel zu authentifizieren, aber ich bin froh, eine funktionierende Lösung zu haben, und ich hoffe, dass diese Problemumgehung so lange wie möglich funktioniert. Vor diesem Hack konnte ich Google Maps API nicht einmal von localhost ohne API-Schlüssel testen. Wenn ich an einem neuen Projekt arbeiten würde, würde ich sicherlich OpenStreetMap für freie Karten verwenden und diese Einschränkungen loswerden. – baptx

18

A key is now required. Zuvor war es nicht erforderlich und Websites, die die API ohne Schlüssel vor dem 22. Juni 2016 nutzten, wurden großflächig erfasst, damit sie weiterhin funktionieren können.

Siehe this blog post for additional information (relevanter Text):

As of June 22, 2016 we are making the following changes to the Google Maps APIs Standard Plan:

  1. We no longer support keyless access (any request that doesn't include an API key). Future product updates are only available for requests made with an API key. API keys allow us to contact developers when required and help us identify misbehaving implementations.
  2. We have implemented a simple 25,000 map loads per day free limit to new Google Maps JavaScript API, Static Maps API, and Street View Image API implementations. The confusing 90-consecutive-day grace period for these APIs is being retired on October 12, 2016. With this change, developers can predictably plan for growth while media sites and US nonprofits can request more quota at no charge via our dedicated support programs.
  3. We have reduced the daily map load maximum limit you can purchase for Google Maps JavaScript API, Static Maps API, and Street View Image API from 1,000,000 to 100,000 requests per API.* We believe higher-volume developers are best served with a Premium Plan license, which includes technical support and a Service Level Agreement, and with this change we've also created consistency between Standard Plan quotas across our maps and web service APIs.
  4. We now count Google Maps JavaScript API client-side requests towards the daily limit of the associated web service API.*

The new policies will apply immediately to all Maps API implementations created on or after June 22nd, 2016.

Existing applications have been grandfathered based on their current usage to ensure that they continue to function both now and in the future. We will also be proactively contacting all existing API key users who, based on usage growth patterns, may be impacted in the future. If you’re an existing user, please take the time to read our Policy Update for Standard Plan summary for details on how each of these changes might affect your implementation.

+1

Der Schlüssel ** ist nicht erforderlich, ** I hat einen Link gepostet, das ohne Schlüssel. – CoryG

+0

Das ist nicht der Punkt. Sie können den exakt gleichen Code von der Seite nehmen und ihn lokal ohne Fehler ausführen, daher tun sie etwas, um keinen Schlüssel innerhalb dieses Codes verwenden zu müssen. Die Frage hat keinerlei Auswirkungen auf das, was Google sagt, ist oder nicht in Ordnung, sondern basiert ausschließlich auf dem, was ist. – CoryG

+3

Lokaler Host/Dateisystem darf schlüssellos arbeiten. – geocodezip

0
<script language="javascript" src="https://maps.google.com/maps/api/js"></script> 
    <script> 
    var target = document.head; 
    var observer = new MutationObserver(function(mutations) { 
     for (var i = 0; mutations[i]; ++i) {     // notify when script to hack is added in HTML head 
      if (mutations[i].addedNodes[0].nodeName == "SCRIPT" && mutations[i].addedNodes[0].src.match(/\/AuthenticationService.Authenticate?/g)) { 
       var str = mutations[i].addedNodes[0].src.match(/[?&]callback=.*[&$]/g); 
       if (str) { 
        if (str[0][str[0].length - 1] == '&') { 
         str = str[0].substring(10, str[0].length - 1); 
        } else { 
         str = str[0].substring(10); 
        } 
        var split = str.split("."); 
        var object = split[0]; 
        var method = split[1]; 
        window[object][method] = null; 
       } 
       observer.disconnect(); 
      } 
     } 
    }); 
    var config = { attributes: true, childList: true, characterData: true } 
    observer.observe(target, config); 
    </script> 
+0

funktioniert nicht außerhalb einer lokalen Seite. – CoryG

+0

benutze es im Kopfbereich, ich habe in meinen verschiedenen Projekten verwendet – Anup