Android webview 設定cookie 保持登入狀態
阿新 • • 發佈:2019-02-10
在專案開發中用webview載入html,使用者在html裡登入,需求是當用戶殺掉程序重新進入App的時候要保持使用者的登入狀態,Android 原生的webview是不記錄登入狀態的,這時候需要我們進入頁面的時候取出cookie,退出的時候在生命週期裡儲存cookie,網上找了很多資料才解決問題,特此記錄一下,具體操作程式碼如下:
//獲取cookie 在剛進入頁面的時候,獲取到cookie後通過cookieManager的setCookie設定給webview
public void setCookies(String cookiesPath) { Map<String, String> cookieMap = newHashMap<>(); String cookie = getSharedPreferences("cookie", Context.MODE_PRIVATE).getString("cookies", "");// 從SharedPreferences中獲取整個Cookie串 if (!TextUtils.isEmpty(cookie)) { String[] cookieArray = cookie.split(";");// 多個Cookie是使用分號分隔的 for (int i = 0; i < cookieArray.length; i++) { intposition = cookieArray[i].indexOf("=");// 在Cookie中鍵值使用等號分隔 String cookieName = cookieArray[i].substring(0, position);// 獲取鍵 String cookieValue = cookieArray[i].substring(position + 1);// 獲取值 String value = cookieName + "=" + cookieValue;// 鍵值對拼接成 value Log.i("cookie", value); CookieManager.getInstance().setCookie(getDomain(cookiesPath),value);// 設定 Cookie} } }
//退出頁面的時候儲存cookie,不僅要在onDestory中寫還要寫再onPause中,點選home鍵的時候會走onPause的生命週期
@Override protected void onDestroy() { super.onDestroy(); CookieManager cookieManager = CookieManager.getInstance(); String cookieStr = cookieManager.getCookie(getDomain(“需要記錄登入的url”)); SharedPreferences preferences = getSharedPreferences("cookie", Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("cookies", cookieStr); editor.commit(); }
//退出的時候用到的getDomain獲取域名的方法
/** * 獲取URL的域名 */ private String getDomain(String url) { url = url.replace("http://", "").replace("https://", ""); if (url.contains("/")) { url = url.substring(0, url.indexOf('/')); } return url; }ok了,下次重新進入的時候就可以儲存登入狀態了。