在XMLHttpRequests和cordova插件之间共享cookie

时间:2016-01-08 23:08:48

标签: android web-services cordova cookies intentservice

我正在努力使用 crosswalk cordova插件javacode 让他们共享相同的Cookie。

在javascript 中,会在多个XMLHttpRequest webservice 期间创建并更新身份验证Cookie。

在Java 中,我有一个IntentService onHandleIntent被调用,例如当发生位置更新时。 在我的onHandleIntent内部,我想使用相同的cookie调用与上面提到的javascript部分相同的 webservice 。 要检索cookie,我调用new XWalkCookieManager().getCookie(url)并使用它来用Java进行HTTP调用,包括该cookie。

当应用程序完全关闭时(通过TaskManager),我的onHandleIntent仍然被调用。但由于人行横道没有运行,我无法致电getCookie(url)getCookie(url)崩溃无法捕获(ndk)。

我已经尝试在我的MainActivity onStop中缓存当前Cookie,并且它可以在某些设备上运行。但在其他设备上,应用程序通常会在没有正确停止行为的情所以这很脆弱。

所以我的问题是:有没有办法在应用关闭时获取人行横道Cookie或拦截javascript完成的所有请求并缓存Cookie以便在应用时准备好正确的关闭了?

1 个答案:

答案 0 :(得分:1)

既然有人问我是如何解决的,那么这是我的重要解决方法,其中包含3个部分。

  1. 每个请求/响应 我的cordovaapp正在使用angular,我已经放了一个$ http-interceptor来拦截每一个响应。每当检索到响应时,它都会调用我的本机插件并调用方法“updateLocalCookie”。在插件Javacode中,我将实际的cookie放入SharedPreferences - String。
  2. 每当需要来自插件/ Java代码的调用时 从SharedPreferences获取当前的cookie,不要让人行横道获取cookie。
  3. 每当检索到插件/ Java代码中的响应时 这部分也很重要。您通常也想将检索到的cookie写回人行道。但是当app处于被杀死状态时,XWalkCookieManager.setCookies也是不可能的。 所以我扩展了MainActivity(在平台添加后使用cordova钩子)来包含一个BroadcastReciever,它将cookie写回到人行横道。 响应回调将新的cookie存储在SharedPreferences中,并将发送广播。如果应用程序正在运行,则BroadcastReciever存在并写入cookie。如果应用程序被杀死,则MainActivity不会运行,因此只会忽略此广播。 最后一个重要的部分是,在每个应用程序启动时,cookie也必须从SharedPreferences读取并写入人行横道,因为您在应用程序停机期间错过了这些cookie。
  4. 希望有帮助,如果有什么不清楚的话,请随时再次询问/评论,因为这是一个非常混乱的解决方法。