AndroidにおけるwebViewロードH 5バインディングcookieの例


プロフィール:
最近プロジェクトをしている時にこんな状況に遭遇しました。
1.WebViewでH 5の登録が必要です。
2.大会の申し込みはH 5で実施します。これらの場合、クッキーをサーバーに転送して、現在のアカウントが登録されているかどうかを判断させたいです。いくつかの資料を調べて、やっと解決しました。
1.ロードされたリンク設定クッキー

 private void syncCookie(String url) {
 try {
  CookieSyncManager.createInstance(mWvSignUp.getContext());//    cookie   
  CookieManager cookieManager = CookieManager.getInstance();
  cookieManager.setAcceptCookie(true);
  cookieManager.removeSessionCookie();//      cookie
  cookieManager.removeAllCookie();
  StringBuilder sbCookie = new StringBuilder();//      cookie   ,       ,      http Cookie   
  sbCookie.append(_mApplication.getUserInfo().getSessionID());//  sessionId
  sbCookie.append(String.format(";domain=%s", ""));
  sbCookie.append(String.format(";path=%s", ""));
  String cookieValue = sbCookie.toString();
  cookieManager.setCookie(url, cookieValue);// url  cookie
  CookieSyncManager.getInstance().sync();//  cookie
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
2.webviewのloadurlを実行する前に、先に実行します。

//   cookie
syncCookie(mUrl);
3.注意事項
ここで注意したいのは、cookieを設定した後に、以下の属性を設定することができないので、そうでないとクッキーは無効です。

 mWvSignUp.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  mWvSignUp.getSettings().setJavaScriptEnabled(true);
  mWvSignUp.getSettings().setDatabaseEnabled(true);
  mWvSignUp.getSettings().setDomStorageEnabled(true);
4.いくつかのajax要求はクッキーを持ち込む必要があります。どうすればいいですか?
プロジェクトの中では、時にはクリックイベントがajaxで実現されることがあるので、ログインするかどうかの判断も必要です。ブラウザは自動的にクッキーを保存してサーバーに転送しますが、androidはできません。この要求をブロックしてクッキーを添付してください。
5.0以下:

  mWvSignUp.setWebViewClient(new WebViewClient() {
   /**
    * 5.0  
    * @param view
    * @param url
    * @return
    */
   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    syncCookie(url);
    return super.shouldInterceptRequest(view, url);//   cookie url        
   }
 });
5.0以上:

 mWvSignUp.setWebViewClient(new WebViewClient() {
 @SuppressLint("NewApi")
 @Override
 public WebResourceResponse shouldInterceptRequest(WebViewview, WebResourceRequest request) {
 String url = request.getUrl().toString();
 syncCookie(url); 
 return super.shouldInterceptRequest(view, url);//   5.0             ,          4.0      
 });
ここではサボり方を採用していますが、興味のある方は、以下の方法でクッキーを設置してもいいです。

 mWvSignUp.setWebViewClient(new WebViewClient() { 
 
 @SuppressLint("NewApi")
 
 @Override
 
 public WebResourceResponse shouldInterceptRequest(WebViewview, WebResourceRequest request) {  
 Map<String,String> requestHead = request.getRequestHeaders();//    
  return super.shouldInterceptRequest(view,new WebResourceRequest() { //        ,   ,     cookie  requestHeader 
  @Override
  public Uri getUrl() {
   return null;
  }
 
  @Override
  public boolean isForMainFrame() {
   return false;
  }
 
  @Override
  public boolean hasGesture() {
   return false;
  }
 
  @Override
  public String getMethod() {
   return null;
  }
 
  @Override
  public Map<String, String>getRequestHeaders() {
   return null;
  }
 }
 })}
 });
まとめ:webViewにはまだたくさんの機能があります。もしいくつかのいい提案があれば、コメントに提出してください。参考にしていただければと思いますが、どうぞよろしくお願いします。