解决Android webview设置饼干和饼干丢失的问题

  

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设置饼干和饼干丢失的问题