Cordova Android 8.0'a yükselttikten sonra , hedeflere net::ERR_CLEARTEXT_NOT_PERMITTEDbağlanmaya çalışırken hatalar görüyorum http://.
Neden bu ve bunu nasıl çözebilirim?
Cordova Android 8.0'a yükselttikten sonra , hedeflere net::ERR_CLEARTEXT_NOT_PERMITTEDbağlanmaya çalışırken hatalar görüyorum http://.
Neden bu ve bunu nasıl çözebilirim?
Yanıtlar:
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">
AndroidManifest.xmlAndroid projenizdeki değişikliklerin yapıldığını doğruladınız mı ?
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
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ı.
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!
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.
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
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>
trust-anchorsetiketlerin tüm diğer şeylerin çalışmasını sağlayan son bileşen olduğu görüldü.
<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">
edit-config kabul edilen cevabını kod (düzeltmeleri unbound prefixhatası)
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>
Benim için çalışan çözüm aşağıdadır. Güncellediğim dosyalar aşağıdaki gibidir:
İ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.
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.
Eski iyonik cli (4.2) benim durumumda soruna neden oluyordu, sorunu çözmek için 5'e güncelleyin
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.)
@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>
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
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>
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>
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" >
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