概要
Android 9以上を対象したアプリでHTTP通信を行うと発生するエラーの対応方法。
詳細
Androidの"対象Androidバージョン"を9.0(API level 28)以上にした場合、HTTPリクエストを行うと以下のエラーが発生する。
Java.IO.IOException: Cleartext HTTP traffic to www.google.com not permitted at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeAbstractVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00014] in <26521a5118b44c858c385715922b9d5d>:0 at Java.Net.HttpURLConnectionInvoker.Connect () [0x0000a] in <4ccdb3137d974856b786e1aeebbfbab6>:0 at Xamarin.Android.Net.AndroidClientHandler+<>c__DisplayClass44_0.<ConnectAsync>b__0 () [0x0005a] in <4ccdb3137d974856b786e1aeebbfbab6>:0 at System.Threading.Tasks.Task.InnerInvoke () [0x0000f] in <5e602907309a47679d31716bdfe8432e>:0 at System.Threading.Tasks.Task.Execute () [0x00000] in <5e602907309a47679d31716bdfe8432e>:0 --- End of stack trace from previous location where exception was thrown --- at Xamarin.Android.Net.AndroidClientHandler.DoProcessRequest (System.Net.Http.HttpRequestMessage request, Java.Net.URL javaUrl, Java.Net.HttpURLConnection httpConnection, System.Threading.CancellationToken cancellationToken, Xamarin.Android.Net.AndroidClientHandler+RequestRedirectionState redirectState) [0x0012e] in <4ccdb3137d974856b786e1aeebbfbab6>:0 at Xamarin.Android.Net.AndroidClientHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x002cf] in <4ccdb3137d974856b786e1aeebbfbab6>:0 at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in <e03aa70ca0174600ac09fcf1848e1777>:0 at XamarinHttp.MainPage.HttpRequestGetAsync () [0x0015b] in <ebdc11f380724edfb0a86f95975700ab>:0 at XamarinHttp.MainPage.OnButtonClicked (System.Object sender, System.EventArgs eventArgs) [0x0006c] in <ebdc11f380724edfb0a86f95975700ab>:0 --- End of managed Java.IO.IOException stack trace --- java.io.IOException: Cleartext HTTP traffic to www.google.com not permitted at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
対応
<プロジェクト名>.Android
以下にあるAssemblyInfo.cs
に以下を追加する。これによってAndroidManifest.xml
の<application>
にandroid:usesCleartextTraffic="true"
が追加される。
[assembly: Application(UsesCleartextTraffic = true)]
android:usesCleartextTraffic
の設定については以下を参照。
developer.android.com