Zwei-Wege-Synchronisierung für Cookies zwischen HttpURLConnection (java.net.CookieManager) und WebView (android.webkit.CookieManager)

Leider gibt es eine Vielzahl von Cookie-Managern für Android. Die Kekse fürHttpURLConnection werden gepflegt vonjava.net.CookieManager und die Kekse fürWebView werden gepflegt vonandroid.webkit.CookieManager. Diese Cookie-Repositorys sind separat und erfordern eine manuelle Synchronisierung.

Meine App verwendet beideHttpURLConnections und zeigtWebViews (Es ist ein Native-HTML-Hybrid). Natürlich möchte ich, dass beide alle Cookies teilen - damit ich eine transparente Sitzung in allen Bereichen habe.

Genauer:

Wenn ein Cookie in einer HttpURLConnection gesetzt / geändert wird, möchte ich, dass die WebViews diese Änderung ebenfalls sehen.Wenn ein Cookie in einem WebView gesetzt / geändert wird, möchte ich, dass die nächsten HttpURLConnections diese Änderung ebenfalls sehen.

Einfach ausgedrückt: Ich suche nach einer bidirektionalen Synchronisierung. Oder noch besser, beide verwenden dasselbe Cookie-Repository. Sie können davon ausgehen, dass beide zur gleichen Zeit aktiv sind (wie auf verschiedenen Registerkarten).

Fragen:

Gibt es eine Möglichkeit, dass beide dasselbe Cookie-Repository verwenden?

Wenn nicht, welche Vorgehensweise wird für die manuelle Synchronisierung empfohlen? Wann genau soll ich synchronisieren und wie?

Verwandte Frage: DieseFrage Behebt ein ähnliches Problem, implementiert jedoch nur eine einseitige Synchronisierung (HttpURLConnection -> WebView).

Meine bisher beste Idee: Ich möchte wirklich eine manuelle Synchronisierung vermeiden und habe versucht zu überlegen, wie beide das gleiche Repository verwenden. Vielleicht kann ich meinen eigenen Core-Handler erstellen, der erweitert wirdjava.net.CookieManager. Ich werde es als den Kern-Cookie-Handler festlegen, der verwendetjava.net.CookieHandler.setDefault(). Die Implementierung wird ein Proxy für dieandroid.webkit.CookieManager Handler-Instanz (für jede Funktion greife ich einfach auf den Webkit-Manager zu).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage