Сбой ионных HTTPS-запросов на Android 9 - PullRequest
0 голосов
/ 08 ноября 2019

Отказ от ответственности: это выглядит невероятно так же, как Ionic Native HTTP не работает для Anroid 9 (Pie) и выше? , но это не так!

Мы столкнулись с невероятно странной и сложной проблемой после обновления нашего приложения сегодня.

У нас есть приложение Ionic v1 для Android. Он использует Cordova-Android 7. Сегодня, когда мы загружали новое обновление в магазин воспроизведения, мы обнаружили ограничение, заставляющее нас ориентироваться на SDK, начиная с 28. Мы добавили <preference name="android-targetSdkVersion" value="28" /> в файл config.xml, пересобрав приложение,протестировано на некоторых смартфонах и загружено. После распространения мы обнаружили, что все сетевые соединения не работают на устройствах Android 9. Мы были уверены, что это будет популярная ошибка открытого текста , поэтому мы изменили все URL-адреса на HTTPS. Но проблема осталась. Затем мы снова создаем приложение, но с атрибутом debuggable в манифесте, чтобы мы могли проверить приложение и увидеть ошибки, и мы обнаружили, что если мы включим функцию отладки, ошибка не произойдет - мы просто добавляем ее вманифест, который мы все еще строим с флагом --release.

Итак, последний сценарий таков:

  • http-запросы не выполняются только после таргетинга на SDK 28, только на устройствах Android 9, и только если приложение построено с --release flag и мы не помещаем атрибут отладки в манифест
  • , если мы изменим любую точку выше, ошибка исчезнет, ​​поэтому нет способа отладить приложение
  • использует https для всех запросов
  • , когда приложение не работает, запросы не доходят до сервера, мы уже наблюдали за этим

Так что, черт возьми, здесь может произойти сбой?

1 Ответ

0 голосов
/ 08 ноября 2019

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

<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
  <application android:usesCleartextTraffic="true" />
</edit-config>

к тегу платформы Android в файле config.xml решило проблему. Таким образом, мы можем заверить, что в нашем сценарии производственной сборки Ionic 1 + Cordova-Android 7 + Cordova CLI 8 + Ionic CLI 4 + HTTPS + без отладки HTTPS-запросы интерпретировались как запросы открытого текста и, таким образом, блокировались до тех пор, пока мы явно не разрешили их.

...