星期日, 8月 23, 2020

[X.Form] Android ClearText 設定

在 Android 模擬器內要本機 IIS 進行 Post 來 Insert 資料進 DB 時,跳出下圖的錯誤訊息

[X.Form] Android ClearText 設定-1

了解後發現原來從 Android 9 (API level 28) 開始,cleartext(non-HTTPS)設定預設是關閉的,也就是說一定要使用 https 連線,下面紀錄要如何開啟該設定

在 XamarinForm 的 Andorid 內加入 network_security_config.xml 檔案並在 Properties.AndroidManifest.xml 內引用

[X.Form] Android ClearText 設定-2

[X.Form] Android ClearText 設定-3

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)] 設定,如下圖

[X.Form] Android ClearText 設定-4

沒有留言:

張貼留言