#はじめに
Androidで「Proxy Auto-Configuration(PAC)」使用時に
Google PlayやYouTubeなど、一部のGoogle製アプリの通信がタイムアウトとなり、
使えない事象について、対処法をインターネット上で見つけたので備忘録。
#環境
- 使用端末OS:Android 8.0.0
- HTTPサーバ:Apache/2.4.18 (Ubuntu)(PACファイル配布用)
- プロキシサーバ:Squid Cache Version 3.5.12 (PACで指定するプロキシサーバ)
※今回の原因はAndroidに起因するもので、HTTPサーバやプロキシサーバは事象に直接関係はないが、関連環境として記載。
#対応
###設定の「電池の最適化」より「ProxyHandler」の最適化をオフにする
Settings > Battery > ︙(※1) > Battery optimization > "ProxyHandler" > Don't optimize > DONE
※1:画面右上の「︙(縦の三点リーダー)」ボタン
#原因
- Androidの機能として、PAC構成に従って適切なプロキシサーバへ通信を転送させるProxyHandlerがある。
- ProxyHandlerはバッテリの最適化がデフォルトで「適応」になっており、バックグラウンドでの実行が禁止されている。
- ProxyHandlerを経由して通信するアプリはProxyHandlerがバックグラウンドで実行されず、通信できないためタイムアウトとなる。
- Android Open Source Projectに事象を報告したがバッテリの最適化が適応状態であればバックグラウンドで実行されないのは意図した動作であるとして、修正はされず。
※Google ChromeはAndroidのデフォルトとは異なるPACの処理を行うためタイムアウトとならない!
(上記は参考サイトの要約)
#感想
Chromeでは意図した通りにPACが動作していたため、Google PlayやYouTubeのアプリでタイムアウトが発生するのは、PACの構成やプロキシサーバの設定が問題であると思い、中々ハマってしまった。
#参考
2019/Oct/06: https://www.ctrl.blog/entry/android-proxyhandler-battery-optimization.html