我正在努力使用 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以便在应用时准备好正确的关闭了?
答案 0 :(得分:1)
既然有人问我是如何解决的,那么这是我的重要解决方法,其中包含3个部分。
SharedPreferences
- String。SharedPreferences
获取当前的cookie,不要让人行横道获取cookie。XWalkCookieManager.setCookies
也是不可能的。
所以我扩展了MainActivity
(在平台添加后使用cordova钩子)来包含一个BroadcastReciever
,它将cookie写回到人行横道。
响应回调将新的cookie存储在SharedPreferences
中,并将发送广播。如果应用程序正在运行,则BroadcastReciever
存在并写入cookie。如果应用程序被杀死,则MainActivity
不会运行,因此只会忽略此广播。
最后一个重要的部分是,在每个应用程序启动时,cookie也必须从SharedPreferences
读取并写入人行横道,因为您在应用程序停机期间错过了这些cookie。希望有帮助,如果有什么不清楚的话,请随时再次询问/评论,因为这是一个非常混乱的解决方法。