[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

發佈留言

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

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