Android WebView設定cookie
阿新 • • 發佈:2019-02-04
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這裡,注意,Domain和Path是必須的,並且Domain的域名之後不能有“/”,否則cookie不能設定成功。); 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(); }
完整程式碼:
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
}