К сожалению, существует множество менеджеров файлов cookie для Android. Куки для HttpURLConnection
поддерживаются java.net.CookieManager
, а файлы cookie для WebView
поддерживаются android.webkit.CookieManager
. Эти хранилища файлов cookie являются отдельными и требуют ручной синхронизации.
Мое приложение использует как HttpURLConnections
, так и показывает WebViews
(это гибрид native-HTML). Естественно, я хочу, чтобы обойти все файлы cookie - так что у меня будет прозрачный сеанс.
Более конкретно:
- Когда cookie устанавливается/изменен в HttpURLConnection, я хочу, чтобы WebViews также видел это изменение.
- Когда cookie установлен/изменен в WebView, я хочу, чтобы следующие HttpURLConnections также увидели это изменение.
Проще говоря - я ищу двухстороннюю синхронизацию. Или еще лучше, чтобы они использовали один и тот же репозиторий файлов cookie. Вы можете предположить, что оба они активны в одно и то же время (например, на разных вкладках).
Вопросы:
-
Есть ли способ заставить оба использовать один и тот же репозиторий файлов cookie?
-
Если нет, рекомендуется ли использовать ручную синхронизацию? Когда нужно точно синхронизировать и как?
Связанный с этим вопрос: Этот question решает аналогичную проблему, но реализует только одностороннюю синхронизацию (HttpURLConnection → WebView).
Моя лучшая идея до сих пор: Я действительно хочу избежать ручной синхронизации, поэтому я попытался подумать, как заставить оба использовать один и тот же репозиторий. Может быть, я могу создать свой собственный обработчик ядра, который расширяет java.net.CookieManager
. Я поставлю его в качестве основного обработчика файлов cookie, используя java.net.CookieHandler.setDefault()
. Его реализация будет прокси-сервером экземпляра обработчика android.webkit.CookieManager
(для каждой функции я просто получаю доступ к менеджеру webkit).