Делиться файлами 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 частей.

  1. Каждый запрос / ответ Мой cordovaapp использует angular, и я установил $ http-перехватчик, который перехватывает КАЖДЫЙ ответ. Когда бы ни был получен ответ, он вызывает мой собственный плагин и вызывает метод "updateLocalCookie". В плагинах Javacode я помещаю настоящие куки в SharedPreferences-String.
  2. Всякий раз, когда требуется вызов из плагина / кода Java Получите текущий файл cookie от SharedPreferences, не просите пешеходный переход, чтобы получить печенье вообще.
  3. Всякий раз, когда получается ответ в плагине / коде Java, эта часть также очень важна. Обычно вы также хотите записать возвращенные куки на пешеходном переходе. Но XWalkCookieManager.setCookies также невозможно, когда приложение находится в состоянии ожидания. Итак, я продлил MainActivity (с кордовыми крючками после добавления платформы), чтобы содержать BroadcastReciever что пишет куки на пешеходном переходе. Ответный обратный вызов сохранит новые куки в SharedPreferences И отправит трансляцию. Если приложение работает, BroadcastReciever существует и пишет куки. Если приложение убито, MainActivity не запускается, поэтому эта трансляция будет просто проигнорирована. Последняя важная часть заключается в том, что при каждом запуске приложения файл cookie также должен быть прочитан с SharedPreferences и написать в пешеходный переход, потому что вы пропустили эти куки во время простоя приложения.

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

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