關(guān)于Android?Webview?設(shè)置Cookie問題詳解
最近遇到一個比較坑爹的問題就是webview里添加第三方H5頁面,但是數(shù)據(jù)獲取不到,經(jīng)過一天的折磨發(fā)現(xiàn)cookie值每次都會變,再根據(jù)谷歌開發(fā)者模式定位,cookie每次應(yīng)該都是固定,每次變化說明本地的cookie有問題,或者為空。
webview有一個CookieManager這個類,他是專門管理cookie的,這個類可以設(shè)置一個或多個cookie,而且當(dāng)你在里面設(shè)置好cookie以后接口會自動根據(jù)你設(shè)置時的url來使用。
一共有兩種獲取cookie的方法一種是HttpURLConnection獲取,一種是直接利用CookieManager獲取。
第一種根據(jù)url利用HttpURLConnection獲取接口中的cookie()
/**
* 獲取接口中的cookie
* @param loginUrl
*/
private void syncCookie(final String loginUrl) {
try {
StringBuilder builder = new StringBuilder();
URL url = null;
byte[] data = builder.toString().getBytes("UTF-8");
url = new URL(loginUrl);
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length",
Integer.toString(data.length));
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
OutputStream os = connection.getOutputStream();
os.write(data);
os.close();
int aRstCode = connection.getResponseCode();
if (aRstCode == HttpURLConnection.HTTP_OK) {
cookie = connection.getHeaderField("Set-Cookie");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
第二種直接利用CookieManager獲取
cookieManager.getCookie(url);
這兩種返回的cookie是有一些區(qū)別的,看你需要哪一種。
設(shè)置cookie 允許它跨域
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(mWebView, true);//TODO 跨域cookie讀取
Log.d(TAG,"跨域cookie讀取");
}
把cookie設(shè)置道webview里
/**
*@param cookie 上面獲取到的存儲在本地的cookie字符串
*@param url 要加載的頁面url
*/
@SuppressLint("NewApi")
private void setCookie(String cookie, String url) {
String StringCookie = cookie;
CookieSyncManager.createInstance(this);
if (cookieManager == null) {
cookieManager = CookieManager.getInstance();
}
cookieManager.setAcceptFileSchemeCookies(true);
cookieManager.setAcceptCookie(true);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {//這個代碼是清楚webview里的所有cookie加不加完全看你自己。
cookieManager.removeSessionCookies(null);
cookieManager.flush();
} else {
cookieManager.removeAllCookie();
CookieSyncManager.getInstance().sync();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
cookieManager.setCookie(url, StringCookie, new ValueCallback<Boolean>() {
@Override
public void onReceiveValue(Boolean aBoolean) {
Log.d(TAG,"setCookie() aBoolean:"+aBoolean);
}
});
}
});
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
} else {
CookieSyncManager.getInstance().sync();
}
}
注意 注意 注意:重要的事情說三遍
有些機(jī)型只支持單獨(dú)設(shè)置cookie就比如(瞎寫的)
session=jashdkjashdkashdk;path=path
如果你直接把這一整串setCookie進(jìn)入,是設(shè)置不進(jìn)去的,你需要把他們根據(jù)分號切割開,一個一個的給它們設(shè)置進(jìn)去。像這種cookieManager.setCookie(url,“session=jashdkjashdkashdk”)(如果你直接設(shè)置進(jìn)去,并且成功了就當(dāng)我后面說的是廢話)
到此這篇關(guān)于關(guān)于Android Webview 設(shè)置Cookie問題詳解的文章就介紹到這了,更多相關(guān)Android Webview 置Cookie問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android ListView實現(xiàn)無限循環(huán)滾動
這篇文章主要為大家詳細(xì)介紹了Android ListView實現(xiàn)無限循環(huán)滾動,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
Android編程監(jiān)聽APK安裝與刪除等過程的方法
這篇文章主要介紹了Android編程監(jiān)聽APK安裝與刪除等過程的方法,涉及Android事件監(jiān)聽、權(quán)限控制、廣播操作等相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-10-10
Android使用ViewDragHelper實現(xiàn)QQ6.X最新版本側(cè)滑界面效果實例代碼
這篇文章主要介紹了Android程序開發(fā)實現(xiàn)QQ6.X最新版本側(cè)滑界面效果實例代碼的相關(guān)資料,需要的朋友可以參考下2016-02-02
iOS開發(fā)中TableView類似QQ分組的折疊與展開效果
這篇文章主要介紹了iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,其實要做這個效果我先想到的是在tableView中再嵌套多個tableView。下面通過本文給大家分享實現(xiàn)思路,需要的朋友可以參考下2016-12-12
Android自定義view實現(xiàn)阻尼效果的加載動畫
這篇文章主要介紹了Android自定義view實現(xiàn)阻尼效果的加載動畫的相關(guān)資料,非常不錯,具有一定的參考借鑒加載,需要的朋友可以參考下2016-11-11
Android TV開發(fā):實現(xiàn)3D仿Gallery效果的實例代碼
這篇文章主要介紹了Android TV開發(fā):實現(xiàn)3D仿Gallery效果的實例代碼,效果:滾動翻頁+ 頁面點(diǎn)擊+頁碼指示器+焦點(diǎn)控制,主要為了移植到電視上做了按鍵事件和焦點(diǎn)控制。2018-05-05

