Sincronização bidirecional para cookies entre HttpURLConnection (java.net.CookieManager) e WebView (android.webkit.CookieManager)
Infelizmente, há vários gerentes de cookies para o Android. Os cookies paraHttpURLConnection
são mantidos porjava.net.CookieManager
e os cookies paraWebView
são mantidos porandroid.webkit.CookieManager
. Esses repositórios de cookies são separados e exigem sincronização manual.
Meu aplicativo usa os doisHttpURLConnections
e mostraWebViews
(é um híbrido de HTML nativo). Naturalmente, quero que ambos compartilhem todos os cookies - então terei uma sessão transparente por toda parte.
Mais especificamente:
Quando um cookie é definido / alterado em um HttpURLConnection, quero que o WebViews também veja essa alteração.Quando um cookie é definido / alterado em um WebView, quero que o próximo HttpURLConnections também veja essa alteração.Simplificando, estou procurando uma sincronização bidirecional. Ou melhor ainda, para que ambos usem o mesmo repositório de cookies. Você pode assumir que ambos estão ativos no mesmo tempo (como em guias diferentes).
Questões:
Existe uma maneira de fazer ambos usarem o mesmo repositório de cookies?
Se não, qual é a prática recomendada para fazer a sincronização manual? Quando exatamente eu deveria sincronizar e como?
Pergunta relacionada: estequestão aborda um problema semelhante, mas apenas implementa a sincronização unidirecional (HttpURLConnection -> WebView).
Minha melhor ideia até agora: Eu realmente quero evitar uma sincronização manual, então eu tentei pensar em como fazer ambos usarem o mesmo repositório. Talvez eu possa criar meu próprio manipulador de núcleo que se estendejava.net.CookieManager
. Vou configurá-lo como o manipulador de cookie principal usandojava.net.CookieHandler.setDefault()
. Sua implementação será um proxy para oandroid.webkit.CookieManager
instância do manipulador (para cada função, simplesmente acessarei o gerenciador do webkit).