Ограничить ключ 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
Надеюсь, мой ответ проясняет ваши сомнения.