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.