Cordova Android 8'e yükselttikten sonra neden net :: ERR_CLEARTEXT_NOT_PERMITTED hataları görüyorum?


Yanıtlar:


208

Cordova Android platformundaki varsayılan API seviyesi yükseltildi. Bir Android 9 cihazında, açık metin iletişimi artık varsayılan olarak devre dışı bırakılmıştır .

Tekrar açık metin iletişimine izin vermek android:usesCleartextTrafficiçin, applicationetiketinizin üzerindeki öğesini şu şekilde ayarlayın true:

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

Yorumlarda belirtildiği gibi, androidXML ad alanını daha önce tanımlamadıysanız, error: unbound prefixderleme sırasında bir alacaksınız . Bu, onu widgetetiketinize aynı şekilde eklemeniz gerektiğini gösterir config.xml, örneğin:

<widget id="you-app-id" version="1.2.3"
xmlns="http://www.w3.org/ns/widgets" 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cdv="http://cordova.apache.org/ns/1.0">

36
error: unbound prefix.Cordova uygulamamı oluşturmaya çalışırken bir hatayla ( ) karşılaştım . Çözüm, config.xml<widget>xmlns:android="http://schemas.android.com/apk/res/android
dosyama

@Der Hochstapler Cevabınıza apiagets yorumu ekleyebilir misiniz?
Michael B

@MichaelB Herkes cevapları düzenleyebilir ve bunu yapmaktan memnuniyet duyarız. Ama elbette yapacağım.
Der Hochstapler

1
@SteevJames Cordova projenizi, değişikliklerin gerçekten Android proje yapısında kalıcı olacak şekilde yeniden oluşturdunuz mu? AndroidManifest.xmlAndroid projenizdeki değişikliklerin yapıldığını doğruladınız mı ?
Der Hochstapler

bu işe yarıyor ama benim durumumda android platformunu kaldırmalıyım ve sonra çalıştıktan sonra.
kunal shaktawat

41

Config.xml'de düzeltilmesi gereken iki şey vardır, bu yüzden doğru yanıt xml'leri eklemek olmalıdır: android:

<widget id="com.my.awesomeapp" version="1.0.0" 
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cdv="http://cordova.apache.org/ns/1.0">

artı şunlara izin vermek için yapılandırmayı düzenleyin:

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

Adım 1'den kaçınılırsa, hata: ilişkisiz önek. görünecek


36

Buradaki açık metin, şifrelenmemiş bilgileri temsil eder. Android 9'dan beri, uygulamaların herhangi bir kayıp olmadığından emin olmak için HTTPS API'lerini çağırması önerilir.

Ancak, yine de HTTP API'lerini çağırmamız gerekirse, aşağıdakileri yapabiliriz:

Platform: İyonik 4

Project-root / resources / android / xml altında network_security_config.xml adlı bir dosya oluşturun

Aşağıdaki satırları ekleyin:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <domain-config cleartextTrafficPermitted="true">
     <domain>ip-or-domain-name</domain>
   </domain-config>
</network-security-config>

Şimdi project-root / config.xml'de aşağıdaki satırları güncelleyin:

<platform name="android">
    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:usesCleartextTraffic="true" />
        <application android:networkSecurityConfig="@xml/network_security_config" />
    </edit-config>
    ... other statements...

Şimdi çalışmalı.


Teşekkürler kardeşim, Ionic 4 için benim için çalıştı. <domain> example.com </domain> alan adını belirledim ve işe yaradı. Ayrıca bu " developer.android.com/training/articles/security-config " bölümünden de yardım aldım
Zaki Mohammed

Uygulamayı her çalıştırdığımda neden "<edit-config .." ÜZERİNE YAZILIYOR?
Jalle

4
Bu işler ancak bu satırı ekleyin gerekir config.xmlönce edit-configetiketi: <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />. Teşekkürler!
2019

@ZakiMohammed lütfen kodunuzu paylaşın ben de aynı sorunla karşılaşıyorum yardım!
jose

@jose lütfen cevabıma bir göz atın
Zaki Mohammed

26

Sorunu çözmek için başka bir seçenek var. dosya kaynakları / android / xml / network_security_config.xml. ekleyin:

<network-security-config>
   <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
           <certificates src="system" />
       </trust-anchors>
   </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain>localhost</domain>
        <domain includeSubdomains="true">192.168.7.213:8733</domain>
    </domain-config>
</network-security-config>

Benim durumum, IP adresini kullanıyorum, o zaman temel yapılandırma gerekli, ancak bir alan adınız varsa. sadece alanı ekleyin.


Kabul edilen tüm çözüm de gerekliyken, bu yanıt, karşılaştığım sorunun anahtarı oldu.
Peter Meadley

Benim için çalıştı. Teşekkürler
Suhail Mushtaq

Teşekkür ederim! Ayrıca alan adı yerine bir IP kullanıyorum ve cevabınız tam olarak uyuyor!
erken

22

Bugün bu problemle kendim karşılaştım ve sizi Apache Cordova uygulamanız için Android 9 + 'da temiz metin trafiğine manuel olarak izin verme zahmetinden kurtaracak gerçekten şık bir eklenti buldum. Basitçe cordova-plugin-cleartext yükleyin ve eklenti sizin için tüm perde arkasındaki Android işleriyle ilgilenmelidir.

$ cordova plugin add cordova-plugin-cleartext
$ cordova prepare
$ cordova run android

Cevabı arayan diğerleri için. Yapılandırma düzeltmelerini uygularken diğer hatalardan etkilenmeye devam ettim, ancak bu hemen işe yaradı. Teşekkürler Topher
IvanSt

Benim için çalışıyor. Teşekkürler!
iwanuschka

Benim için çalışmadı.
Eskim 0

15

Birkaç günlük mücadeleden sonra bu benim için işe yarıyor ve umarım bu sizin için de işe yarar.

bunu CONFIG.XML , kodunuzun üstüne ekleyin.

<access origin="*" />
<allow-navigation href="*" />

ve bu, android platformu altında.

<edit-config file="app/src/main/AndroidManifest.xml" 
   mode="merge" target="/manifest/application" 
   xmlns:android="http://schemas.android.com/apk/res/android">
     <application android:usesCleartextTraffic="true" />
     <application android:networkSecurityConfig="@xml/network_security_config" />
 </edit-config>
 <resource-file src="resources/android/xml/network_security_config.xml" 
 target="app/src/main/res/xml/network_security_config.xml" />

"Resources / android / xml / network_security_config.xml" bu dosyaya aşağıdaki kodu ekleyin .

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">YOUR DOMAIN HERE/IP</domain>
    </domain-config>
</network-security-config>

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin



1
Çözüm için teşekkürler, benim için çalışan tek çözüm.
Lud Osorio

Teşekkürler, benim için çalışan tek çözüm bu.
Gerardo Salazar Sánchez

Benim için işe yarayan çözüm buydu. Spesifik olarak, trust-anchorsetiketlerin tüm diğer şeylerin çalışmasını sağlayan son bileşen olduğu görüldü.
rolinger

Phonegab build kullanıyorsanız, network_security_config'i kök klasörde tutun ve kaynak-file src = "network_security_config.xml" olarak yol verin
mujaffars

12

<Widget> açılış etiketine aşağıdaki özniteliği eklemek benim için çalıştı. Basit ve canlı bir Android 9 emülatöründe doğru şekilde yeniden yüklenir. xmlns: android = "http://schemas.android.com/apk/res/android"

<widget id="com.my.awesomeapp" version="1.0.0" 
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cdv="http://cordova.apache.org/ns/1.0">

2
Ben bu cevabı görünce fark etmedi, ama bu ek olarakedit-config kabul edilen cevabını kod (düzeltmeleri unbound prefixhatası)
RishiG

@RishiG şimdi tam doğru cevabı açıklayan bir cevap
zardilior

@zardilior Evet, bir düzenlemede cevabı ele geçirdiği için tebrikler ... lol
Mark McCorkle

5

eklemelisin

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

için

kaynaklar / android / xml / network_security_config.xml

bunun gibi

<network-security-config>
<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

<domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">localhost</domain>
</domain-config> </network-security-config>

Bu neden önemli?
Tomas Vancoillie

5

Benim için çalışan çözüm aşağıdadır. Güncellediğim dosyalar aşağıdaki gibidir:

  1. config.xml (Tam Yol: /config.xml)
  2. network_security_config.xml (Tam Yol: /resources/android/xml/network_security_config.xml)

İlgili dosyalardaki değişiklikler aşağıdaki gibidir:

1. config.xml

Config.xml dosyasındaki <application android:usesCleartextTraffic="true" />etiketin içine <edit-config>etiket ekledim

<platform name="android">
    <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
        <application android:usesCleartextTraffic="true" />
        <application android:networkSecurityConfig="@xml/network_security_config" />
    </edit-config>
    ...
<platform name="android">

2. network_security_config.xml

Bu dosyaya proje gereksinimime göre <domain>etiket içinde 2 etiket <domain-config>, ana alan ve bir alt alan ekledim

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">mywebsite.in</domain>
        <domain includeSubdomains="true">api.mywebsite.in</domain>
    </domain-config>
</network-security-config>

Yardımı sağladığınız için @Ashutosh'a teşekkürler.

Umarım yardımcı olur.


Çok teşekkürler, günümü kurtardın.
Karnan Muthukumar

5

IONIC 5.4.13, cordova 9.0.0 (cordova-lib@9.0.1) kullanıyorum

Bilgileri tekrar ediyor olabilirim, ancak benim için sorun bazı eklentiler ekledikten sonra görünmeye başladı (henüz emin değilim). Yukarıdaki tüm kombinasyonları denedim ama hiçbir şey işe yaramadı. Yalnızca şunları ekledikten sonra çalışmaya başladı:

   <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
           <certificates src="system" />
       </trust-anchors>
   </base-config>

projede dosyalamak

kaynaklar / android / xml / network_security_config.xml

yani network_security_config.xml dosyam şimdi şöyle görünüyor:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
   <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
           <certificates src="system" />
       </trust-anchors>
   </base-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.1.25.10</domain>
    </domain-config>
</network-security-config>

Herkese teşekkürler.


Bunun mevcut İyonik çözümlerden farkı nedir?
Der Hochstapler

durum farklı. insanların buraya google aramadan geldiğini unutmayın. bu konuya girdikleri farklı durum ve ortamlar olabilir. benim durumumda projem iyi çalışıyordu ve herhangi bir platform güncellemesi veya cihaz güncellemesi yapmamış olsam bile bu hatayı vermeye başladı.
Rajendra

1
Teşekkürler şampiyon, bu benim için çalıştı :) - zaman geçtikçe ve eski çözümler artık çalışmadığından, özellikle değişken ve sürekli değişen bir çerçevede, çalışan çözümler için sürüm güncellemelerinin onaylanması güzel.
Grant

2
teşekkürler dostum, bunun benim için çalışan tek çözüm olduğunu söylemek istedim
Anakin001

2
Teşekkürler. Bu benim sorunumu çözdü. Diğer birçok öneriyi denedim ama işe yaramadı.
Usta

3

Eski iyonik cli (4.2) benim durumumda soruna neden oluyordu, sorunu çözmek için 5'e güncelleyin


Teşekkür ederim. Bu benim için çözümdü. App Center'da çalışan, ionic cli komutlarını çalıştırmak için ionic'i kuran ayrı bir derleme sürecim vardı. "İyonik" kelimesini "@ ionic / cli" lehine kullanımdan kaldırmışlardır.
MarkHoward02

0

cordova-custom-configAndroid yapılandırmamızı yönetmek için eklentiyi kullanıyoruz . Bu durumda çözüm, yeni bir ekleme oldu custom-preferencekızımız için config.xml:

    <platform name="android">

        <preference name="orientation" value="portrait" />

        <!-- ... other settings ... -->

        <!-- Allow http connections (by default Android only allows https) -->
        <!-- See: /programming/54752716/ -->
        <custom-preference
            name="android-manifest/application/@android:usesCleartextTraffic"
            value="true" />

    </platform>

Bunun sadece geliştirme yapıları için nasıl yapılacağını bilen var mı? Sürüm yapılarının bu ayardan ayrılmasından memnun olurum false.

(Bunun için iOS yapılandırma tekliflerini görüyorum buildType="debug", ancak bunun Android yapılandırması için geçerli olup olmadığından emin değilim.)


0

@Der Hochstapler çözüm için teşekkürler.
ancak IONIC 4'te config.xml projesindeki bazı özelleştirmeler benim için çalışıyor

Widget etiketine bir satır ekleyin

<widget id="com.my.awesomeapp" version="1.0.0" 
xmlns="http://www.w3.org/ns/widgets"
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cdv="http://cordova.apache.org/ns/1.0">

bundan sonra, android için Platform etiketinde bazı satırları özelleştirin, aşağıdaki seçenekleri
ekleyin: usesCleartextTraffic = true after networkSecurityConfig ve resource-file etiketleri

 <platform name="android">
        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:networkSecurityConfig="@xml/network_security_config" />
        </edit-config>
        <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
        <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
            <application android:usesCleartextTraffic="true" />
        </edit-config>
    </platform>

Bunun mevcut İyonik çözümlerden farkı nedir?
Der Hochstapler

"android: usesCleartextTraffic =" true "ile" android: networkSecurityConfig = "@ xml / network_security_config" tek bir <edit-config> etiketi içinde eklendi, böylece benim için çalışmıyordu ve için yeni <edit-config> etiketi eklediğimde "android: usesCleartextTraffic =" true "" ve ayrıca "android: networkSecurityConfig" <edit-config> etiketinin arkasına yapıştırın, ardından benim için çalışıyor
yash,

0

Bir Ionic 4 kapasitör projesinde, test için android telefona paketleyip dağıttığımda bu hatayı aldım. Kapasitörün yeniden yüklenmesi ve android platformunun güncellenmesiyle çözüldü.

npm run build --prod --release
npx cap copy
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap update android
npx cap open android

0

NPM ve Cordova komutuyla ilgili sorunları olan Eski Cordova çerçeveniz varsa. Aşağıdaki seçeneği öneririm.

Android / res / xml / network_security_config.xml dosyası oluşturun -

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
    <base-config cleartextTrafficPermitted="true" />
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
    </network-security-config>

AndroidManifest.xml -

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
        <uses-permission android:name="android.permission.INTERNET" />
        <application
            ...
            android:networkSecurityConfig="@xml/network_security_config"
            ...>
            ...
        </application>
    </manifest>

Bunun mevcut İyonik çözümlerden farkı nedir?
Der Hochstapler

Bazı eski projeler, manuel olarak güncellenmesi gereken NPM ve Cordova komutlarını izlemez.
Pradeepta

0

Aşağıdaki çözüm benim için çalıştı

goto resources/android/xml/network_security_config.xml Değiştirin-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
    </domain-config>
</network-security-config>

0

Bu satırı platformlar / android / app / src / main / AndroidManifest.xml dosyasına ekleyin

<application android: hardwareAccelerated = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: supportsRtl = "true" android: usesCleartextTraffic = "true" >

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.