Google Maps JavaScript API RefererNotAllowedMapError


122

Мы пытаемся разработать приложение для географического размещения для одного из наших клиентов, и мы хотим сначала протестировать его в нашем собственном домене.

Мы подписались на Google Maps JavaScript API, у нас есть действующий ключ браузера, и наш домен www.grupocamaleon.com авторизован для использования этого ключа.

Но мы не можем заставить работать без ошибок даже самый простой пример.

В нашем домене и с нашим ключом есть следующая демонстрация:

(1) http://www.grupocamaleon.com/boceto/aerial-simple.html

Но это не работает, и консоль Firebug говорит:

"Ошибка API Карт Google: ошибка API Карт Google: RefererNotAllowedMapError (ссылка на документацию Google на RefererNotAllowedMapError) URL-адрес вашего сайта для авторизации: (1)"

На моей странице учетных данных отсутствует возможность добавления рефереров для принятия, поэтому решения, связанные с добавлением рефереров, сейчас невозможны.

Моя учетная страница:

введите описание изображения здесь

Почему мы получаем эту ошибку? Как это исправить?


Возможный дубликат реферера Google Maps API не допускается . Ваш код работает для меня (с моим ключом), поэтому что-то не так с вашим ключом, разрешенными реферерами или службами, которые можно использовать с ним.
geocodezip

Но у меня нет такой возможности на моей странице учетных данных, как вы можете видеть в моем ответе здесь. Намек?
Grupo Camaleón Creativos

Что ж, я новичок и пока не знаю, как правильно пользоваться этим сайтом. Приносим извинения за неудобства. Я отредактировал свой вопрос, добавив информацию на свою страницу учетных данных. Некоторые процитированные решения включают добавление рефереров, что я не могу сделать в настоящий момент.
Grupo Camaleón Creativos

Если вы не можете изменить источники перехода для ключа, удалите его или замените на тот, который вы контролируете. Ключ не требуется, но его наличие дает преимущества.
geocodezip

1
Я создал новый ключ без ограничений приложения или API, он сказал expiredKey в течение 10 минут, а затем начал работать. Затем я попытался добавить только Places API, но он вызывается из Интернета и говорит: Google Maps JavaScript API error: RefererNotAllowedMapErrorдаже после ожидания. Затем я попытался, Maps JavaScript APIи он продолжал говорить RefererNotAllowedMapError, попытался обновить страницу, и, наконец, он начал работать через 2 минуты 40 секунд. Так что смотрите к черту. Но БЕЗ чего-либо работает для меня, и Maps JavaScript APIтолько так работает . Просто нужно много ждать.
psycho brm 03

Ответы:


168

Я знаю, что это старый вопрос, на который уже есть несколько ответов, но у меня была такая же проблема, и для меня проблема заключалась в том, что я последовал примеру, приведенному на console.developers.google.com, и ввел свои домены в формате *.domain.tld/*. Это вообще не сработало, и я попытался добавить к этому всевозможные вариации, например domain.tld, domain.tld/*и *.domain.tldт. Д.

Для меня это решило добавление самого протокола ; http://domain.tld/*это единственное, что мне нужно, чтобы он работал на моем сайте. Думаю, мне нужно будет добавить, https://domain.tld/*если я перейду на HTTPS.

Обновление: Google наконец-то обновил заполнитель и httpтеперь включает :

Поле ввода реферера API Карт Google


1
Подтверждаю: единственная комбинация, которая позволила мне использовать API, былаhttp://www.---.com/*
Марко Паничи

6
Это единственный ответ, который заставил мой код работать. Я могу подтвердить, что пример, который предоставляет Google, не работает.
Jargs

1
Спасибо, @Google, за предоставление нам ложной информации. http://----.com/* - правильный формат.
Michael Yaeger

2
Если у вас есть несколько поддоменов, вы можете использовать http: //*.example.com и https: //*.example.com для охвата всех баз
tim.baker

1
Возможно, Google обновил эту функцию - для меня она работает без протокола. У меня example.com/*в настройках поле, и работает отhttps://example.com/map
Энди

21

Давай, Google, вы, ребята, умнее, чем позволяет страница с учетными данными API. (Знаю, потому что у меня там работают двое сыновей.)

Список «рефереров» гораздо более разборчив, чем кажется. (Конечно, это должно быть более снисходительным.) Вот несколько правил, на изучение которых мне потребовались часы :

  • Порядок в списке важен. Перемещение URL-адреса вверх в списке может заставить его работать.
  • Префикс «http: //» обязателен.
  • Это нужно даже "localhost": " http: //localhost/foo/bar.html "
  • Продольный * в качестве шаблона , кажется, работает , как будто это строка сравнения.
  • Даже с http: //localhost/foo/bar.html , http: //localhost/foo/bar.html? Arg = 1 работать не будет. (Поможет ли подстановочный знак?)
  • Для обоих prod dev имейте (как минимум) две строки: " http: //localhost/foo/bar.html " и " http://my.site.com/foo/bar.html "
  • Номер порта (8085? 4000?), Похоже, не нужен.

Возможно, существуют другие правила, но это утомительная игра в угадывание.


1
Насчет ответа перед редактированием тоже теряю терпение. Похоже, что символы подстановки (*) работают только в конце адреса ( http://my.site.com/*) или в субдомене ( http://*.site.com). Во ВСЕХ остальных случаях это не сработает,
Кристиан Трайна

1
Я неправильно установил ограничение, чтобы разрешить только API Адресов (вкладка рядом с ограничениями реферера). Это приводит к той же ошибке RefererNotAllowedMapError.
Мэтт Грир

Добавление www. к моему доменному имени исправил это для меня. Я не уверен, что добавление подстановочного знака (*) в конец домена, например (https://www.my-site.com/*), также устранило проблему.
Mugé

мое мобильное приложение ionic имеет домен ionic: // app # / tabs. Как бы включить это в ограничения. Я пробовал много комбинаций, но тщетно. Пример: ionic: // app # / tabs, httpionic: // app # / tabs, httpsionic: // app # / tabs, ionic: // *, ionic: // app # / *, httpionic: // *, ......
AUK4SO 07

@ AUK4SO - Знак фунта ( #) имеет особое значение в URL-адресах. Смотрите <a name=...>. Или ты имел ввиду iconic://1234/foo?
Рик Джеймс

18

Согласно документации, RefererNotAllowedMapError означает

Текущий URL-адрес, загружающий Google Maps JavaScript API, не был добавлен в список разрешенных источников перехода. Пожалуйста, проверьте настройки реферера вашего ключа API в Google Developers Console.

У меня есть Google Maps Embed API, настроенный для моего личного / рабочего использования, и пока я не указал никаких HTTP-рефереров. Ошибок не регистрирую. Ваши настройки должны заставить Google думать, что URL-адрес, который вы посещаете, не зарегистрирован или не разрешен.

введите описание изображения здесь


15

Напоминаем, что если вы просто измените его, настройки вступят в силу в течение 5 минут.


15

Я перепробовал множество вариантов реферера и подождал 5 минут, пока не понял, что пример, который Google заполняет в поле формы, ошибочен. Они показывают:

*.example.com/*

Однако это работает только в том случае, если у вас есть subdomain.или www.перед вашим доменным именем. Следующее сработало для меня сразу (исключая ведущую точку в примере Google):

*example.com/*

9
Плохая идея - кто-то может создать hackexample.comи использовать ваш api
HyderA

3
@HyderA - Более вероятно, что кто-то зарегистрирует кучу бесплатных учетных записей Google, чтобы получить дополнительную загрузку карты.
ow3n 09

@HyderA им все равно понадобится ключ, так что это не большой шанс. Но вы правы, все еще есть потенциальный риск.
Eoin

мое мобильное приложение ionic имеет домен ionic: // app # / tabs. Как бы включить это в ограничения. Я пробовал много комбинаций, но тщетно. Пример: ionic: // app # / tabs, httpionic: // app # / tabs, httpsionic: // app # / tabs, ionic: // *, ionic: // app # / *, httpionic: // *, ......
AUK4SO 07

10

Согласно документам Google, это произошло потому, urlчто вы используете API Карт Google, онnot registered вlist of allowed referrers

РЕДАКТИРОВАТЬ :

Из Документов Google

Все поддомены указанного домена также авторизованы.

Если http://example.com авторизован, то и http://www.example.com авторизован. Обратное неверно: если http://www.example.com авторизован, http://example.com не обязательно авторизован.

Итак, настройте http://testdomain.comдомен, и тогда вы http://www.testdomain.comначнете работу.


В моем случае это был неправильно настроенный DNS для домена. Например: www.testdomain.com работал нормально testdomain.com не работал, вызывая ошибку
Тахир Халид

1
Казалось бы, логика обратная? Если я чего-то не упускаю.
twobob

10

Убедитесь, что у вас включен правильный APIS.

Я пробовал все вышеперечисленное, звездочки, tld домена, косую черту, обратную косую черту и все остальное, даже в конце концов вводя только один URL-адрес в качестве последней надежды.

Все это не сработало, и, наконец, я понял, что Google также требует, чтобы вы указали сейчас, какой API вы хотите использовать (см. Снимок экрана).

введите описание изображения здесь

У меня не было нужных мне активированных (для меня это был Maps JavaScript API)

Как только я его включил, все заработало нормально, используя:

http://www.example.com/ *

Надеюсь, это кому-то поможет! :)


9

Подстановочные знаки (звездочки) НЕ допускаются в части субдомена.

  • НЕПРАВИЛЬНО: * .example.com / *
  • СПРАВА: example.com/*

Забудьте, что Google говорит о заполнителе, это запрещено.


Как я могу добавить следующее: sc.maindomain.com/Survey/UpdateInspection/102
dE Source

1
Вы можете установить какsc.maindomain.com/*
Даниэль Лоурейро

8

Я обнаружил, что даже вы HTTP Referreresдостаточно верны, неправильный набор API RestrictionsпричинGoogle Maps JavaScript API error: RefererNotAllowedMapError .

Например:

  • Вы используете Javascript API для ключа.
  • Добавить http://localhost/* вApplication Restrictions / HTTP Referrences
  • выберите Maps Embed API вместоMaps Javascript API
  • Это вызывает RefererNotAllowedMapError

Да, в моем случае проблема заключалась в неправильной классификации
Андрей Ф.

А как же безопасность? Может ли кто-нибудь использовать мой ключ на localhost, если я разрешаю localhost?
Kaushal

5

Есть много предполагаемых решений за несколько лет, и некоторые из них больше не работают, а некоторые никогда не работали, поэтому моя последняя версия работает на конец июля 2018 года.

Настроить:

Google Maps JavaScript API должен правильно работать с…

  • несколько доменов, вызывающих API: example.com иexample.net
  • произвольные поддомены: user22656.example.com и т. д.
  • как безопасные, так и стандартные протоколы HTTP: http://www.example.com/ иhttps://example.net/
  • неопределенная структура пути (т.е. большое количество разных URL-путей)

Решение:

  • Фактически используя шаблон из заполнителя: <https (or) http>://*.example.com/* .
  • Не пропуская протокол, но добавляя две записи для каждого домена (по одной на протокол).
  • Дополнительная запись для поддоменов (с *. именем хоста).
  • У меня было ощущение, что RefererNotAllowedMapErrorошибка все еще появляется с использованием правильной конфигурации (и после длительного ожидания). Я удалил учетный ключ, повторил запрос (теперь получаюInvalidKeyMapError ), создал новые учетные данные (используя ту же настройку), и с тех пор он работал.
  • Добавление простого протокола и домена, похоже, не включало поддомены.
  • Для одного из доменов рабочая конфигурация выглядит так:

Скриншот из конфигурации Google API

(В виде текста :)

Accept requests from these HTTP referrers (web sites)
    https://*.example.com/*
    https://example.com/*
    http://*.example.com/*
    http://example.com/*

В моем случае это решение помогло, но было ограничение API на неправильном API. По какой-то причине было возвращено такое же сообщение об ошибке. Изменение ограничения API с «Places API» на «Maps Javascript API» устранило проблему.
LMG

4

введите описание изображения здесь

Принимать запросы от этих HTTP-рефереров (веб-сайтов)

Записать путь к каталогу localhost


3
согласно тексту Google, это должно быть необязательное свойство, и если оно пустое, оно должно работать
ejectamenta

@ayanchakraborty - Я пробовал 10 различных комбинаций localhost / index.html (и различных путей), а также различные комбинации file: ///android_assets/www/index.html - но ничего не работает. RefererNotAllowedMapError в консоли показывает мне: URL вашего сайта для авторизации: __file_url __ // android_asset / www / index.html # / tab / map //// `- но это и его варианты тоже не работают.
rolinger

4

У меня такая же ошибка:

введите описание изображения здесь

В этой ссылке рассказывается, как установить ограничения ключей API: https://cloud.google.com/docs/authentication/api-keys#adding_http_restrictions

В моем случае проблема заключалась в том, что я использовал это ограничение:

HTTP-источники перехода (веб-сайты). Принимать запросы от этих HTTP-источников перехода (веб-сайты) (необязательно). Используйте символы * для подстановочных знаков. Если вы оставите это поле пустым, запросы будут приниматься от любого реферера. Обязательно добавьте рефереры, прежде чем использовать этот ключ в продакшене. https://*.example.net/*

Это означает, что URL-адреса, такие как https://www.example.net или https://m.example.net или https://www.example.net/San-salvador/, будут работать. Тем не менее, URL - адреса , такие как https://example.net или https://example.net или https://example.net/San-salvador/ не будет работать. Мне просто нужно было добавить второго реферера:

https://example.net/*

Это устранило проблему для меня.


4

Я добавляю 2 домена веб-сайтов, установка «*» в поддомене не работает, но конкретный поддомен «WWW» и не-поддомен работали для моих веб-сайтов с использованием того же ключа API Google Map.

не используйте "*" в субдомене

Надеюсь, это поможет.


3

вы показываете снимок экрана своей страницы учетных данных api, но вам нужно нажать «Клавиша браузера 1» и перейти оттуда, чтобы добавить рефереры.


3

Для более глубоких вложенных страниц

Если у вас есть проект в папке, например, или вложенные страницы

http://yourdomain.com/your-folder/your-page вы можете ввести это в

http://yourdomain.com/*/*

Важная часть /*/*/*зависит от того, как далеко вам нужно идти

Кажется, что *они не будут совпадать /или пойдут на более глубокие пути ..

Это даст вам полный доступ к домену, ну, если у вас нет более глубокого вложения, чем это ..


3

Ни одно из этих исправлений не помогло мне, пока я не узнал, что это RefererNotAllowedMapErrorможет быть вызвано отсутствием учетной записи, связанной с проектом. Поэтому не забудьте активировать бесплатную пробную версию или что-то еще.


3
  1. Что ваш биллинг включен

  2. Что ваш сайт был добавлен в консоль Google

  3. Ваш веб-сайт добавлен в список источников перехода в вашем приложении.

  4. (сделайте подстановочный знак для www и без www)

http://www.example.com/ * и http://example.com/ *

  1. Карты Javascript включены, и вы используете правильные учетные данные

  2. Веб-сайт был добавлен в ваш DNS для включения вашей консоли Google выше.

  3. Улыбайтесь, когда это сработает!


Список разрешенных источников перехода можно найти в веб-консоли Google Cloud Platform (console.cloud.google.com) в разделеAPIs & Services > Credentials > (your key) > Application restrictions > HTTP Referrers
Master of Ducks

3

Это еще один убогий продукт Google с ужасной реализацией.

Проблема, которую я обнаружил, заключается в том, что если вы ограничите ключ API IP-адресом, он не будет работать ... НО далековато от Google, чтобы прояснить этот момент ... Только после устранения неполадок и исследования я обнаружил:

Ключи API с ограничением IP-адресов могут использоваться только с веб-службами, которые предназначены для использования на стороне сервера (например, API геокодирования и другие API веб-служб). Большинство этих веб-сервисов имеют эквивалентные сервисы в Maps JavaScript API (например, см. Сервис геокодирования). Чтобы использовать клиентские службы JavaScript API Карт, вам необходимо создать отдельный ключ API, который можно защитить с помощью ограничения HTTP-рефереров (см. Раздел Ограничение ключа API).

https://developers.google.com/maps/documentation/javascript/error-messages

FFS Google ... Довольно важная информация, которую хотелось бы уточнить при настройке ...



2

Наконец, я получил свою работу, воспользовавшись этим советом от Google: ( https://support.google.com/webmasters/answer/35179 )

Вот наши определения домена и сайта. Эти определения относятся к проверке Search Console:

http://example.com/ - A site (because it includes the http:// prefix)
example.com/ - A domain (because it doesn't include a protocol prefix)
puppies.example.com/ - A subdomain of example.com
http://example.com/petstore/ - A subdirectory of http://example.com site

2

Я тоже изо всех сил пытался заставить эту работу работать, но вот несколько советов:

  • URL-адреса, установленные в качестве источников перехода, включают http, например,http://example.com/*
  • Google Maps JavaScript API включен
  • Для этого аккаунта настроен биллинг

Как только все вышеперечисленное было решено, карты отображались должным образом.


1

Я пытался использовать Places API (автозаполнение), и мне также пришлось включить Maps Javascript API из Google Cloud Console, прежде чем Places API заработает.


0

Проверьте свою декларацию на сайте. Чтобы загрузить API JavaScript Карт Google, используйте тег скрипта, подобный этому

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
async defer></script>

Я использую это объявление на своем сайте Wordpress в файле function.php

wp_enqueue_script("google-maps-v3", "//maps.google.com/maps/api/js?key=YOUR_API_KEY", false, array(), false, true);

Я установил ключ API для этого формата, и он отлично работает

http://my-domain-name(without www).com/*

это объявление не работает

*.my-domain-name.com/*

0

Снятие ограничений (до None) сработало для меня.


6
снятие ограничений считается плохой практикой и делает ваш API уязвимым.
mtness 03

2
@mtness да, очевидно, но плакат уже попробовал это сначала безуспешно. К сожалению, документация Google больше не помогает. Каждый ответ здесь приносит новые подсказки, это почти как игра в угадайку ...
Джеймс Вонг - Восстановить Монику


0

Консоль Javascript Chrome предложила объявить весь адрес страницы в моем списке рефереров HTTP, в данном случае http://mywebsite.com/map.htm. Хотя точный адрес - http://www.mywebsite.com/map.htm - У меня уже были стили подстановочных знаков, перечисленные, как было предложено другими, но это был единственный способ, которым это сработало для меня.


0

Это сработало для меня. В настройках ключа api есть 2 основные категории ограничений:

  • Application restrictions
  • API restrictions

Ограничения по применению:

Внизу в разделе «Реферер» добавьте URL-адрес своего веб-сайта « http://www.grupocamaleon.com/boceto/aerial-simple.html ». В правой части раздела есть примеры правил, основанных на различных требованиях.

Ограничения приложений

Ограничения API:

В соответствии с ограничениями API вы должны явно выбрать «Maps Javascript API» из раскрывающегося списка, поскольку наш уникальный ключ будет использоваться только для вызова API карт Google (возможно) и сохранить его, как вы можете видеть на снимке ниже. Надеюсь, это сработает для вас ..... сработало для меня

введите описание изображения здесь

Проверьте свой скрипт:

Также проблема может возникнуть из-за неправильной подачи ключа внутри тега скрипта. Это должно быть примерно так:

  <script async defer src="https://maps.googleapis.com/maps/api/jskey=YOUR_API_KEY&callback=initMap"
  type="text/javascript"></script>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.