AndroidにおけるwebViewロードH 5バインディングcookieの例
プロフィール:
最近プロジェクトをしている時にこんな状況に遭遇しました。
1.WebViewでH 5の登録が必要です。
2.大会の申し込みはH 5で実施します。これらの場合、クッキーをサーバーに転送して、現在のアカウントが登録されているかどうかを判断させたいです。いくつかの資料を調べて、やっと解決しました。
1.ロードされたリンク設定クッキー
ここで注意したいのは、cookieを設定した後に、以下の属性を設定することができないので、そうでないとクッキーは無効です。
プロジェクトの中では、時にはクリックイベントがajaxで実現されることがあるので、ログインするかどうかの判断も必要です。ブラウザは自動的にクッキーを保存してサーバーに転送しますが、androidはできません。この要求をブロックしてクッキーを添付してください。
5.0以下:
最近プロジェクトをしている時にこんな状況に遭遇しました。
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にはまだたくさんの機能があります。もしいくつかのいい提案があれば、コメントに提出してください。参考にしていただければと思いますが、どうぞよろしくお願いします。