Приложение Cordova ioni c не работает на Android 9 && 10 - PullRequest
0 голосов
/ 20 февраля 2020

Приложение My ioni c не работает на устройствах android 9, отлично работает на устройствах android с версией менее 9. Приложение не подключается к бэкэнду при загрузке целевой страницы. Есть идеи?

Среда, которую я использую: Ioni c:

ioni c (Ioni c CLI): ^ 5.0.0 Angular ^ 7.2.2

Cordova:

cordova (Cordova CLI): 8.0.0 Cordova Платформы: android 8.0.0

Система:

Android SDK Инструменты: 29 NodeJS: v10 npm: 6.2.0

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Причина

Это связано с этой политикой, начинающейся с Android 9: https://developer.android.com/training/articles/security-config.html#CleartextTrafficPermitted

Приложения, предназначенные для подключения к пунктам назначения, используя только безопасные соединения могут отказаться от поддержки открытого текста (используя незашифрованный протокол HTTP вместо HTTPS) с этими адресатами.

Примечание. Указания в этом разделе относятся только к приложениям, предназначенным для Android 8.1 (уровень API 27) или ниже. Начиная с Android 9 (уровень API 28), поддержка открытого текста отключена по умолчанию.

Открытый текст (HTTP traffi c) теперь отключен по умолчанию, так что это примерно так

<domain-config cleartextTrafficPermitted="false">
  <domain includeSubdomains="true">*</domain>
</domain-config>

Решение

Заменить все вызовы http на URL-адреса https.

Или ...

Принудительно использовать HTTP (небезопасно)

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

Вам необходимо добавить атрибут к тегу <application> в манифесте, поэтому, чтобы не перезаписывать все, вам нужно использовать тег <edit-config> с mode="merge" (см .: https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html#edit - config )

HTTP не считается безопасным протоколом, и каждый отправленный запрос (и его полезная нагрузка) может быть прочитан злоумышленником, поэтому будьте осторожны

plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android"
        id="phonegap-plugin-old-http-support-android" version="0.0.1">
    <name>OldHttpSupportPlugin</name>

    <description>Force HTTP for Android 9+</description>
    <license>MIT</license>

    <keywords>cordova,android,http</keywords>

    <engines>
        <engine name="cordova" version=">=6.0.0"/>
        <engine name="cordova-android" version=">=7.0.0"/>
    </engines>


    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="OldHttpSupportPlugin">
                <param name="android-package" value="YOUR.PACKAGE.plugin.OldHttpSupportPlugin"/>
            </feature>
        </config-file>


        <!-- Source file for Android -->
        <source-file src="src/android/network_security_config.xml" target-dir="res/xml/" />

        <edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
            <application android:networkSecurityConfig="@xml/network_security_config" />
        </edit-config>
    </platform>
</plugin>

network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">my.domain.com</domain>
        <domain includeSubdomains="true">example.org</domain>
        <domain includeSubdomains="true">111.222.333.444</domain>
    </domain-config>
</network-security-config>
0 голосов
/ 20 февраля 2020

thnx to Mostafa Harb , он был прав, я использую http-запрос для своего бэкэнда, а не https

...