Ограничить ключ API Google Directions во флаттере

Я разрабатываю мобильное приложение с Flutter и хочу скоро выпустить его в Play Store. Он использует API Google Directions, и теперь я хочу ограничить использование ключа API для этого конкретного приложения.

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

В любом случае запрос отклоняется как в режиме отладки (который, я полагаю, является преднамеренным), так и в режиме выпуска. Я получаю доступ к API через HTTP-пакет dart.

Моя теория состоит в том, что таким образом API направлений не может распознать имя пакета или отпечаток пальца приложения. Это правильно? Можно ли это исправить, используя пакет google_maps_webview или что-то еще?

Заранее спасибо,

Павел

1 ответ

Проблема в том, что Directions API - это веб-служба. Google предполагает, что веб-службы вызываются из внутреннего кода, а не напрямую из внешнего интерфейса. Таким образом, уникальное ограничение, поддерживаемое веб-службами, такими как Directions API, Geocoding API и т. Д., - это ограничение IP-адреса. Предполагается, что вы отправляете запросы в Google со своего внутреннего сервера и защищаете свой ключ API с помощью IP-адреса вашего сервера. Ограничение приложения Android не работает с веб-службами.

Вы можете прочитать, какие типы ограничений поддерживаются каждым API здесь:Какие ключи или учетные данные следует использовать для разных продуктов Карт?

Для мобильных приложений Google настоятельно рекомендует создать промежуточный сервер для запросов веб-служб HTTP. Таким образом, ваше приложение будет отправлять запросы на промежуточный сервер, промежуточный сервер будет отправлять запросы API Directions с ключом API, защищенным IP-адресом, в Google и передавать ответ обратно вашему приложению.

Я могу предложить использовать клиентскую библиотеку Java для веб-служб API Карт Google для реализации промежуточного прокси:

https://github.com/googlemaps/google-maps-services-java

Также доступны клиентские библиотеки для других бэкэнд-языков (Python, Go, NodeJs):

https://github.com/googlemaps/google-maps-services-python

https://github.com/googlemaps/google-maps-services-go

https://github.com/googlemaps/google-maps-services-js

Надеюсь, мой ответ проясняет ваши сомнения.

Другие вопросы по тегам