Как прослушать любые изменения 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
и сравните это с предыдущими значениями. Это скорее занятый цикл, чем шаблон наблюдателя, но он работает для меня.