Делиться файлами cookie между XMLHttpRequests и плагином Cordova
Я борюсь с javacode плагинов crosswalk и cordova, чтобы позволить им использовать одни и те же куки.
В javascript файл cookie для аутентификации создается и обновляется в течение нескольких XMLHttpRequest
с моего веб-сервиса.
На Java у меня есть IntentService
который onHandleIntent
вызывается, например, когда происходит обновление местоположения. Внутри моего onHandleIntent
Я хочу вызвать тот же веб-сервис, что и упомянутая выше часть JavaScript, используя те же куки. Чтобы получить куки, я звоню new XWalkCookieManager().getCookie(url)
и использовать его для выполнения HTTP-вызова в Java, включая этот файл cookie.
Когда приложение полностью закрыто (через TaskManager), мой onHandleIntent
все еще называется. Но я не могу позвонить getCookie(url)
так как пешеходный переход не работает. getCookie(url)
вылетает неуловимым (ndk).
Я уже пытался кэшировать текущий файл cookie в моем MainActivity
s onStop
и работает на каком-то устройстве. Но на других устройствах приложение часто закрывается без надлежащего поведения остановки. Так что это очень хрупко.
Поэтому мой вопрос: есть ли способ получить cookie-файлы для пешеходных переходов, когда приложение закрыто, или перехватить все запросы, выполненные с помощью javascript, и кэшировать cookie-файл, чтобы иметь право на готовность при закрытии приложения?
1 ответ
Так как кто-то спрашивает, как я решил это, вот мой тяжелый обходной путь, который состоит из 3 частей.
- Каждый запрос / ответ Мой cordovaapp использует angular, и я установил $ http-перехватчик, который перехватывает КАЖДЫЙ ответ. Когда бы ни был получен ответ, он вызывает мой собственный плагин и вызывает метод "updateLocalCookie". В плагинах Javacode я помещаю настоящие куки в
SharedPreferences
-String. - Всякий раз, когда требуется вызов из плагина / кода Java Получите текущий файл cookie от
SharedPreferences
, не просите пешеходный переход, чтобы получить печенье вообще. - Всякий раз, когда получается ответ в плагине / коде Java, эта часть также очень важна. Обычно вы также хотите записать возвращенные куки на пешеходном переходе. Но
XWalkCookieManager.setCookies
также невозможно, когда приложение находится в состоянии ожидания. Итак, я продлилMainActivity
(с кордовыми крючками после добавления платформы), чтобы содержатьBroadcastReciever
что пишет куки на пешеходном переходе. Ответный обратный вызов сохранит новые куки вSharedPreferences
И отправит трансляцию. Если приложение работает,BroadcastReciever
существует и пишет куки. Если приложение убито,MainActivity
не запускается, поэтому эта трансляция будет просто проигнорирована. Последняя важная часть заключается в том, что при каждом запуске приложения файл cookie также должен быть прочитан сSharedPreferences
и написать в пешеходный переход, потому что вы пропустили эти куки во время простоя приложения.
Надеюсь, что это поможет, не стесняйтесь спрашивать / комментировать снова, если что-то неясно, так как это очень запутанный обходной путь.