安装Cordova APK后,Android CookieManager为空
我正在尝试将一个WebView包装的Android应用程序升级为一个内置的。虽然这两个框架相似,但会话cookie在Trigger和Cordova中的存储方式不同 为了解决这个问题,我编写了一些代码,将所有cookie从应用程序的安装Cordova APK后,Android CookieManager为空,android,cordova,cookies,webview,trigger.io,Android,Cordova,Cookies,Webview,Trigger.io,我正在尝试将一个WebView包装的Android应用程序升级为一个内置的。虽然这两个框架相似,但会话cookie在Trigger和Cordova中的存储方式不同 为了解决这个问题,我编写了一些代码,将所有cookie从应用程序的CookieManager实例复制到CordovaWebView的cookie管理器: public void fetchTriggerCookies() { // Note: I also tried using a CookieStore implemen
CookieManager
实例复制到CordovaWebView
的cookie管理器:
public void fetchTriggerCookies() {
// Note: I also tried using a CookieStore implementation for
// retrieving the old cookies, but it didn't seem to make
// a difference.
CookieManager cm = CookieManager.getInstance();
String cookies = cm.getCookie("my.example.com");
// Note: cm.hasCookies() is always false when cookies is empty,
// so I know I'm checking the right URL
System.out.println("WebView CM has cookies? " + cm.hasCookies());
System.out.println("WebView CM cookies: " + cookies);
if (cookies == null || cookies.length() == 0) { return; }
this.mTriggerCookieString = cookies;
}
public void restoreTriggerCookies(CordovaWebView webView) {
if (this.mTriggerCookieString == null) { return; }
webView.getCookieManager().setCookie("my.example.com", this.mTriggerCookieString);
}
让我非常困惑的是,在Cordova应用程序的onCreate()
中调用fetchTriggerCookies()
(在super
调用之前和之后)有时只会找到要还原的cookies。(我试着在appinit代码周围的其他地方运行这个程序,没有任何区别。)
看起来cookies存储在app\u webview/cookies
文件(SQLite DB)中,但是在安装新的APK后,该文件会被直接删除我可以用以下方法进行测试:
# Uninstall and install Trigger app:
adb uninstall com.my.example && adb install path/to/old/trigger-apk.apk
# Sign in to trigger app to load session cookies
# Extract a backup of the trigger app from my device...
adb backup -noapk com.my.example
dd if=backup.ab bs=1 skip=24 > compressed-data
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - compressed-data | gunzip -c > decompressed-data.tar
tar xf decompressed-data.tar
# ...and verify that the sessionid cookie exists
cat apps/com.my.example/r/app_webview/Cookies | grep sessionid # is found!
# Install the new Cordova app
adb install -r path/to/new/android-debug.apk
# Before running the app, shell into the device and check if cookies file exists
adb shell
run-as com.my.example
ls app_webview/Cookies # No such file or directory
非常奇怪的是,它有时工作得很好;有时Cookie文件存在,我的代码可以将它们复制到新的WebView。但其他时候,它甚至不使用由相同调试密钥签名的相同APK,我可以看到在安装新应用程序后(以及在运行它之前),Cookie文件不存在
那么,关于Android中Cookie是如何存储/缓存的,以及为什么我可能无法访问它们,有什么我不了解的吗?为什么安装新应用程序会清除Cookies文件?有没有比通过CookieManager
更稳定的方式来请求cookie
提前感谢所有有用的反馈!:)