Android页面嵌套了一个代替,H5页面内部有用户登陆页面,发现编辑页面的登陆功能无法使用,一直登陆失败。和web那边商量一会,发现js写入的饼干丢失了。所有需要Android这边在重写写入一次。
mWebView=view.findViewById (R.id.mall_view); 设置=mWebView.getSettings (); settings.setJavaScriptEnabled(真正的); settings.setLoadsImagesAutomatically(真正的); settings.setDomStorageEnabled(真正的);//不缓存 settings.setCacheMode (WebSettings.LOAD_NO_CACHE); mWebView。setWebViewClient(新MyWebViewClient ()); 类MyWebViewClient延伸WebViewClient { @Override 公共布尔shouldOverrideUrlLoading (WebView视图中,字符串url) { 如果(url !=" ") {//重点写入饼干 String> HashMap<字符串;地图=new HashMap<在(); 地图。put(“推荐人”,view.getUrl ()); 视图。loadUrl (url,地图); } 返回true; } @Override 公共空间>/* * *获取接口中的饼干 * @param loginUrl */私人空间syncCookie(最终字符串loginUrl) { 新线程(新Runnable () { @Override 公共空间run () { 尝试{ StringBuilder builder=new StringBuilder (); 网址URL=零; byte [] data=https://www.yisu.com/zixun/builder.toString () .getBytes (“utf - 8”); url=new url (loginUrl); HttpURLConnection连接=(HttpURLConnection) url.openConnection (); connection.setDoOutput(真正的); connection.setRequestProperty(“内容类型”, “应用程序/x-www-form-urlencoded”); 内容长度connection.setRequestProperty (“”, Integer.toString (data.length)); connection.setRequestMethod(“获得”); connection.setInstanceFollowRedirects(假); OutputStream os=connection.getOutputStream (); os.write(数据); os.close (); int aRstCode=connection.getResponseCode (); 如果(aRstCode==HttpURLConnection.HTTP_OK) { 饼干=connection.getHeaderField (set - cookie”); } }捕捉(MalformedURLException e) { e.printStackTrace (); }捕捉(UnsupportedEncodingException e) { e.printStackTrace (); }抓住ProtocolException (e) { e.printStackTrace (); }捕捉(IOException e) { e.printStackTrace (); } } }) .start (); }//设置饼干 如果(饼干!=零,,cookie.length()比;0){ android.webkit。CookieManager CookieManager=android.webkit.CookieManager.getInstance (); cookieManager.setAcceptCookie(真正的); cookieManager.setCookie (SysParam。shoppingMall、饼干); .sync CookieSyncManager.getInstance () (); } >之前<强> android webview带饼干访问url 强>
<强>问题描述强>
在原生和类推混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是应用登录了账号,但是网页却没有,所有会禁止访问此url, webview就会显示白屏。
所以要访问此url,需要带上饼干进行访问。这就个饼干是用程序登录时所存储的饼干
<>强实现方法和一些环境强>
<>强网络请求方式强>
HttpsUrlConnection 引用>
这里既然用到了HttpsUrlConnection说明我所加载的url是https协议
所以webview加载的时候会白屏
<强>报错信息:强>
1
这是由于证书和域名不匹配,我的调试环境在内网服务器上,而证书是绑定在公网的域名上的。
所以需要webView跳过证书验证,
<强>跳过证书验证强>
webView。setWebViewClient(新WebViewClient () { @Override 公共空间> SharedPreferences SharedPreferences=getSharedPreferences(“登录”,MODE_PRIVATE); SharedPreferences。编辑器编辑=sharedPreferences.edit (); 字符串cookieval=conn.getHeaderField (set - cookie”); editor.putString (“all_cookie”, cookieval);<强>是一个结构如下的值:强>
会话=f19b09e9 - 69 b2 - 4 - ab4 - 9 - daf - ea224523a092;路径=/;安全的;HttpOnly
引用>写入饼干
/* * * @param饼干上面获取到的存储在本地的饼干字符串 * @param url要加载的页面url */私人空间setCookie (cookie字符串,字符串url) { 字符串StringCookie=饼干; CookieManager CookieManager=CookieManager.getInstance (); 如果(Build.VERSION。SDK_INT祝辞=Build.VERSION_CODES.LOLLIPOP) { cookieManager.removeSessionCookies(空); cookieManager.flush (); 其他}{ cookieManager.removeSessionCookie (); .sync CookieSyncManager.getInstance () (); } cookieManager.setAcceptCookie(真正的); cookieManager。setCookie (url, StringCookie); }解决Android webview设置饼干和饼干丢失的问题