[Cordova] 在 Android 9.0 以上,HTTP 連線出現 net::ERR_CLEARTEXT_NOT_PERMITTED 錯誤?

[Cordova] 在 Android 9.0 以上,HTTP 連線出現 net::ERR_CLEARTEXT_NOT_PERMITTED 錯誤?

昨天更新圖書館多重帳戶登入 App 之後,

今天就接到許多投訴,說 app 連不上了…

有點奇怪,在上線前我有先用 Genymotion 模擬器 跑過,

並沒有發生問題…

 

觀察了一下 Google Play Console 上的留言,

似乎出問題的都是 Android 9.0…

這可能是個線索,於是我用 Genymotion 建了一個 Android 9.0 的模擬器,

果真一跑起來 App 就出問題了,連不上網路…

 

Chrome debug 一下手機上的網頁

發現只要是用 Ajax 連線出去的,似乎都失敗了 (紅色):

 

再到 Console 分頁,看到一堆 Failed to load resource:

net::ERR_CLEARTEXT_NOT_PERMITTED 的錯誤訊息:

 

上網查了一下,似乎 Android 9.0 預設已經不支援 HTTP 明碼連線了,

所以我用 Ajax 去連 HTTP 網站的,全都被擋了下來…

 

解決方法,是在 AndroidManifest.xml 裡,

加上 android:usesCleartextTraffic=”true”。

不過我是用 Cordova 寫 App 的,

所以要在 config.xml 裡加上這一段:

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

 

加好後再重新用 Cordova 編譯,HTTP 的連線就會成功囉~

 

參考資料:Why am I seeing net::ERR_CLEARTEXT_NOT_PERMITTED errors after upgrading to Cordova Android 8? – Stack Overflow

(本頁面已被瀏覽過 7,835 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料