Видимо flutter_google_places требует прокси-сервер? - PullRequest
0 голосов
/ 09 марта 2020

Хорошо, я должен быть невыносимым новичком в программировании iOS, используя API или вообще используя XCode, потому что очевидно, что изменение API-ключей в моей программе на любой вид Restricted API Key нарушает мою программу.

Я создаю свое приложение, используя флаттер (пишу большую часть кода на VSCode).

В моем pubspe c .yaml у меня есть следующие зависимости (только если это актуально).

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^0.15.4
  google_sign_in: ^4.1.4
  firebase_core: 0.4.4
  google_maps_flutter: ^0.5.24+1
  geolocator: ^5.3.0
  flutter_google_places: ^0.2.4
  geocoder: ^0.2.1
  http: ^0.12.0+4
  intl: ^0.16.1

Если я использую ключ неограниченного веб-API для своей программы, как googleMapKay У меня нет проблем, и следующий код работает отлично.

  Future<void> _originAutocomplete() async {
    Prediction p = await PlacesAutocomplete.show(
        context: context,
        apiKey: googleMapKey,
        mode: Mode.overlay, 
        language: "en",
        location: new Location(last_known_position.latitude, last_known_position.longitude),
        radius: 100000,
        components: []);
        if (p == null) {
          print('p is null');
        }
    originSelected(p);
  }

Если, однако, я использую ограниченный API-ключ ios -app для той же строки, p внезапно становится нулевым. Сейчас я использую firebase и правильно включил GoogleServices.plist в программу. Я также обновил API-ключ в своем AppDelegate.swift в XCode, а также обновил API-ключ в самой программе.

Я тестировал его на различных устройствах, iphone se, 5s, 8+ и на симуляторах для ipad pro 12.9 "(третье поколение) и iphone 11 pro max. Во всех случаях у меня одинаковая ошибка, и она исправляется при использовании неограниченного веб-API, который Я не могу использовать в окончательной сборке продукта.

Я также проверил, что Restricted API-Key настроен на ограничение только через приложения iOS, и что идентификатор пакета программы правильно установите внутри ограничения Google API-Key (и что есть только ограничения приложений, нет API-ограничений). Поэтому я не думаю, что это проблема, но если вы можете показать мне способ тестирования, то я бы спасибо! После небольшого тестирования я обнаружил, что копия ключа внутри файла AppDelegate, кажется, не имеет значения, так что его можно без проблем ограничить.

После просмотра документации n для flutter_google_places, по-видимому, это имеет врожденную зависимость для google_maps_webservices, которая требует веб-API для работы. (Если я правильно понимаю, это означает неограниченный ключ?). Это говорит о том, что «правильной» отраслевой передовой практикой будет использование прокси-сервера?

Я не на 100% знаком с этим процессом, или с тем, как это сделать, или если есть какой-то простой или легкий методы, чтобы это работало, поэтому любая помощь, которую вы можете оказать, будет ОЧЕНЬ благодарна!

1 Ответ

2 голосов
/ 18 марта 2020

API Google Maps Platform должен иметь ключ API в запросе для правильной работы. Для ключей API рекомендуется устанавливать ограничения для защиты и защиты ваших ключей. Обратите внимание, что существуют различные типы ограничений, которые вы можете использовать для своего ключа API, и эти ограничения должны соответствовать соответствующим службам, которые его используют, иначе это вызовет ошибку.

Я вижу, что вы используете виджеты автозаполнения Google для флаттера, и похоже, что для этого используется API веб-службы Places. Обратите внимание, что API веб-службы Places не совместим с iOS ограничениями , поскольку API / SDK, которые могут использовать только это ограничение, Места SDK для iOS и Карты SDK для iOS. Это может быть причиной возникновения проблемы при использовании ограниченного ключа API iOS. Возможно, вы захотите использовать только ограничение API и ограничить свой ключ с помощью API Google Maps Platform, которое использует ваше приложение-флаттер.

Кроме того, в мобильных приложениях, использующих API-интерфейсы веб-служб, вы можете рассмотреть следующие приемы, чтобы обезопасить себя. Ключи API: используйте прокси-сервер, зашифруйте или зашифруйте ключ API или секрет подписи и используйте закрепление CA или сертификат для проверки правильности ресурсов сервера. Это обсуждается в этой ссылке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...