了解後發現原來從 Android 9 (API level 28) 開始,cleartext(non-HTTPS)設定預設是關閉的,也就是說一定要使用 https 連線,下面紀錄要如何開啟該設定
在 XamarinForm 的 Andorid 內加入 network_security_config.xml 檔案並在 Properties.AndroidManifest.xml 內引用
network_security_config.xml 內容,要開啟 10.0.2.2
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<!-- Android 模擬器找本機 IIS,要用 10.0.0.2 -->
<domain includeSubdomains="true">10.0.2.2</domain>
<domain includeSubdomains="true">xamarin.com</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml 內引用 NetworkSecurityConfig<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.ooxx">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="OOXX.Android"
android:networkSecurityConfig="@xml/network_security_config"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
在 AndroidManifest 內引用設定時,發生點烏龍,因為沒有注意到已經有 application 存在,又建了一個 application,build 和 deploy 模擬器也都沒有任何錯誤發生,實際執行時才又跳出相同錯誤<application android:label="OOXX.Android"/>
<application android:networkSecurityConfig="@xml/network_security_config"/>
另外一種方式是在 Properties.AssemblyInfo.cs 內加入 [assembly: Application(UsesCleartextTraffic = true)] 設定,如下圖
沒有留言:
張貼留言