1. 程式人生 > >Android WebView設定cookie

Android WebView設定cookie

Android中WebView載入網頁,有時候需要通過cookie想網頁傳遞資訊,這時候這樣操作。

首先設定接收cookie:

CookieManager.setAcceptFileSchemeCookies(true);
CookieManager.getInstance().setAcceptCookie(true);
CookieManager.setAcceptFileSchemeCookies(true);
然後設定cookie的值,通過setcookie方法:
List<String> cookies = new ArrayList<>();
cookies.add("app_key=" 
+ App.getAppKey()); cookies.add("os=" + "Android" + Build.VERSION.SDK_INT); 最後,通過sync方法,將cookie同步。
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    CookieSyncManager.createInstance(context);
}
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true
); if (cookies != null) { for (String cookie : cookies) { cookieManager.setCookie(url, cookie); } } String s = "Domain=.***.com"; String s1 = "Path=/"; cookieManager.setCookie(url, s); cookieManager.setCookie(url, s1); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { CookieManager.getInstance
().flush(); } else { CookieSyncManager.getInstance().sync(); }
這裡,注意,Domain和Path是必須的,並且Domain的域名之後不能有“/”,否則cookie不能設定成功。
完整程式碼:
public class WebviewUtil {
    public static void setWebCookie(Context context) {
        CookieManager.setAcceptFileSchemeCookies(true);
        CookieManager.getInstance().setAcceptCookie(true);
        CookieManager.setAcceptFileSchemeCookies(true);
        setCookie(context);
    }

    private static void setCookie(Context context) {
        List<String> cookies = new ArrayList<>();
        cookies.add("app_key=" + App.getAppKey());
        cookies.add("plat=" + "2");
        cookies.add("os=" + "Android" + Build.VERSION.SDK_INT);
        cookies.add("channel=" + AndroidUtil.getChannel());
        cookies.add("cver=" + String.valueOf(App.getVersionCode()));
        cookies.add("ctype=" + 2);
        cookies.add("cspec=" + "");
        if (AccountManager.hasLogin()) {
            cookies.add("user_id=" + getUserId());
            cookies.add("gz_id=" + getUserId());
        }
        syncCookie(context, ".7gz.com/", cookies);
    }

    private static void syncCookie(Context context, String url, List<String> cookies) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            CookieSyncManager.createInstance(context);
        }
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        if (cookies != null) {
            for (String cookie : cookies) {
                cookieManager.setCookie(url, cookie);
            }
        }
        String s = "Domain=.7gz.com";
        String s1 = "Path=/";
        cookieManager.setCookie(url, s);
        cookieManager.setCookie(url, s1);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
            CookieManager.getInstance().flush();
        } else {
            CookieSyncManager.getInstance().sync();
        }
    }

    private static String getUserId() {
        return AccountManager.getInstance().getAccount().id;
    }

    //清空所有Cookie
    public static void removeAllCookie(Context context) {
        CookieSyncManager.createInstance(context);  //Create a singleton CookieSyncManager within a context
        CookieManager cookieManager = CookieManager.getInstance(); // the singleton CookieManager instance
        cookieManager.removeAllCookie();// Removes all cookies.
        CookieSyncManager.getInstance().sync(); // forces sync manager to sync now

    }