我已经花费超过15个小时研究了这个问题:我正在构建一个混合应用程序,使用Volley框架(本机视图)进行登录。一旦成功登录,我会获取响应头部,提取Cookie并将其保存到我的sharedprefs中。在本机主屏幕上,包含多个Webview链接,如何将从登录接收到的Cookie传递到Webview中?网络上90%的答案使用CookieSyncManager,但它已被弃用。我尝试了java.net.CookieManager也没有成功。以下是我的代码。
我还尝试了将WebClient传递给WebView,并覆盖其shouldOverrideURl方法并将标头传递给它。另一种方法是使用WebSettings并传递ChromeClient。这里的任何答案都似乎不起作用。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
setContentView(mWebView);
cookies = pref.getString(Const.COOKIE_KEY,"null");
userID = pref.getString(Const.USER_ID_KEY,"null");
mUrl = Const.PERFORMANCE_WEBVIEW_LINK + Const.USER_ID;
String cookieText = Const.COOKIE_KEY + "=" + cookies;
//Approach A Environment for the Cookies
//Does not work
cookieSync = CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
cookieManager.removeSessionCookie();
cookieManager.setCookie(mUrl, cookieText);
cookieSync.sync();
SystemClock.sleep(10000);
/*APPROACH B, sending the Cookies with header
##Did not Work##
final Map<String, String> headers = new HashMap<>();
Log.d("cookie", cookieText);
headers.put("Cookie",cookieText);
*/
if(cookies.equals("null") || userID.equals("null")) {
Toast.makeText(PerformanceWebview.this, "Error", Toast.LENGTH_SHORT).show();
//Logging Out
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
else {
//mWebView.loadUrl(mUrl,headers);
mWebView.loadUrl(mUrl);
Toast.makeText(PerformanceWebview.this,cookieText, Toast.LENGTH_SHORT).show();
Log.d("URL", "URL: " + mUrl);
}
}
我还尝试了将WebClient传递给WebView,并覆盖其shouldOverrideURl方法并将标头传递给它。另一种方法是使用WebSettings并传递ChromeClient。这里的任何答案都似乎不起作用。