Как прослушать любые изменения cookie в Android Webview

Мое приложение использует веб-просмотр для открытия веб-страницы, которая обновляет несколько файлов cookie для некоторых взаимодействий, выполненных на веб-странице. Теперь я хочу прочитать этот файл cookie и внести некоторые изменения в пользовательский интерфейс на основе значения файла cookie.

В iOs есть некоторая реализация Observers, которую можно прикрепить к списку файлов cookie и получать уведомления о любых изменениях файлов cookie.

Я долго искал подобное решение, но не смог найти никаких слушателей или что-то, что можно было бы прикрепить к cookie-файлам и узнать, когда они обновляются.

Я читаю все в CookieManager а также CookieSyncManger

https://developer.android.com/reference/java/net/CookieManager.html

https://developer.android.com/reference/java/net/CookieManager.html

Но ничего полезного.

Я знаю, что использование ловушек интерфейса javascript - лучшее решение, но пока оно не может быть реализовано, так как веб-сайт уже работает.

2 ответа

Я считаю, что вам нужно пойти на 1 слой глубже. CookieStore - https://developer.android.com/reference/java/net/CookieStore.html - это то, что вы ищете. Вы можете создать собственную реализацию, переопределяющую add(), get(), remove() и т. Д., И включите туда свой собственный обратный вызов.

Здесь есть сообщение SO, в котором рассказывается, как это сделать с помощью реализации с общими предпочтениями. Как сохранить файлы cookie при использовании HTTPUrlConnection?, но вы можете свернуть свой собственный и вернуть его, как вы хотите. (И да, это все еще актуально для Retrofit - Retrofit и постоянное хранилище файлов cookie)

Извините за это, то же имя класса, другой пакет - android.webkit.CookieManager не java.net.CookieManager. Я взглянул на связанный код для android.webkit.CookieManager & android.webkit.WebViewFactory.

CookieManager предоставляется экземпляром WebViewFactoryProvider. Похоже, невозможно сделать то, что вы хотите, без какого-либо серьезного взлома.

Я также проверил Crosswalk, который имеет XwalkCookieManager. Это может работать для вас, но это не то, что я пробовал, и это значительно увеличит размер вашего APK.

В качестве обходного пути я читаю файлы cookie при каждом обращении к onLoadResource внутри WebViewClient и сравните это с предыдущими значениями. Это скорее занятый цикл, чем шаблон наблюдателя, но он работает для меня.

Другие вопросы по тегам