Android高版本http網絡請求失敗的Cordova配置處理


作者:IT晴天
鏈接:https://www.jianshu.com/p/12ab6718e81c
來源:簡書

問題出現的原因是因為Android高版本(Android 6.0)以上默認使用TLS保護用戶信息,詳見以下文檔:
Transport Layer Security

摘錄關鍵信息如下:

Android致力於保證其用戶、設備和數據的安全。我們保證數據安全的一種方式是通過保護所有進入或離開使用TLS技術的Android設備數據。正如我們在Android P開發人員預覽版中所宣布的那樣,我們通過默認阻止Android P應用使用未加密連接通信來進一步提升安全性。

這是我們多年來為保護Android用戶所做的各種更改。為了防止意外的未加密連接,我們在Android Marshmallow(安卓6.0)中引入了android:usesCleartextTraffic 這樣一個manifest屬性。在Android Nougat(安卓7.0)中,我們通過創建網絡安全配置(Network Security Config)功能擴展了該屬性,該功能允許應用程序警告開發者在沒有加密的情況下發送網絡流量。在Android Nougat(安卓7.0)和Oreo(安卓8.0)中,我們仍然允許明文連接。

 

簡單地說,在Android高版本對非加密的明文傳輸有要求,也即默認啟用了TLS保護,使得該應用無法進行http網絡請求,而https則不會受影響,同樣地,如果應用嵌套了webview也會受這限制。

針對這種情況,有以下4種解決方案:

  1. 使用https。條件允許的話,建議使用,以增強安全性。
  2. Android編譯的targetSdkVersion改為27以下。因為是高版本才出現的,那可以降維處理;
  3. 在AnroidManifest.xml中的application添加設置項:
    <application android:usesCleartextTraffic="true">
  4. 添加網絡安全配置。在res的xml目錄下,新建一個network_security_config.xml文件(名稱隨便取):
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

  

然后在AnroidManifest.xml中的application添加指向該文件的設置項:
android:networkSecurityConfig="@xml/network_security_config"

其中,第1、2種方案都是有條件要求的,而第4種是第3種的擴展使用,可做更詳細的項配置。對於我們一般使用來說,其實也不需要用到特別的安全策略。

 

 

目前用方案:

綜合考量,第3種方案個人認為會好點,Cordova配合其使用也很簡單:

在config.xml文件中,在 <platform name="android"/>節點內添加配置項即可

  <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application">
            <activity android:usesCleartextTraffic="true" />
  </edit-config>

這樣Cordova build的時候就會把上面配置合並到AnroidManifest.xml中。

如果不行,在AndIot\platforms\android\app\src\main\AndroidManifest.xml 文件中,增加:android:usesCleartextTraffic="true", 如下圖:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM