CookieSyncManager现已弃用,我应该使用什么替代品?

22

我在我的应用程序中使用了一个cookie,在所有浏览器中都可以正常工作,但在Android设备上,cookie的设置速度不如我所期望的那样快,需要一些时间才能保存cookie,当我删除cookie时也是同样的情况。有没有什么方法可以让它更好地运行?感谢您提前回答。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webview = new WebView(this);
    webview.getSettings().setJavaScriptEnabled(true); // enable javascript

    CookieManager.setAcceptFileSchemeCookies(true);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);
    cookieManager.acceptCookie();
    String cookie = CookieManager.getInstance().getCookie("mylink");

    final Activity activity = this;

    webview.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
        }
    });
    webview.loadUrl("mylink");

    setContentView(webview);
}
3个回答

22

在 Android 5.0 及以上版本中,CookieManager 单例可以正常工作。(参考链接-http://developer.android.com/reference/android/webkit/CookieManager.html) 然而,在 Android 5.0 以前的版本中,还需要使用 CookieSyncManager 的另一个静态方法。下面的代码适用于设置 WebView 上的 cookie 在所有 Android 版本上:

CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    CookieSyncManager.createInstance(this);
}
cookieManager.setAcceptCookie(true);

如果您告诉我如何保存 cookie 以便在应用程序关闭时重新使用它(使 cookie 在整个应用程序中可用),我将不胜感激。我正在 webview 上加载登录页面,每次应用关闭后都必须重新登录! - user1788736
1
它对我不起作用..你能否建议我更好的方法.. - Vishwa Pratap

7

只需启用 JavaScript 和 DOM 存储。这可以帮助我在我的 WebView Android 应用程序中记住登录详细信息。我没有使用任何 CookieManager,但启用此功能对我很有用。

 webView.getSettings().setJavaScriptEnabled(true);
 webView.getSettings().setDomStorageEnabled(true);

1
我尝试像其他解决方案一样启用CookiesManager,但这个简单的解决方案非常有效!我想知道为什么... - Muhammad Faisal

4

Nothing: “WebView现在会根据需要自动同步cookie。您不再需要创建或使用CookieSyncManager。”

正如DarkKnight所说,您可以测试您的应用程序是否针对低于API 21的Lollipop(5.0),如果不是,您将不再需要使用CookieSyncManager。


如果您只想确保 cookie 被存储,那没问题。但是,如果您想为用户提供例如删除 cookie 的选项,那么您需要使用 CookieManager,对吧? - Fat Monk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接