Android 에서 webView 는 H5 바 인 딩 쿠키 인 스 턴 스 를 불 러 옵 니 다.
나 는 최근 에 프로젝트 를 할 때 이런 상황 을 만 났 다.
1.WebView 로 H5 로그 인 등록 을 실현 해 야 합 니 다.
2.대회 신청 은 H5 로 한다.이러한 상황 에서 저 는 쿠키 를 서버 에 전송 하여 현재 계 정 이 로그 인 에 성 공 했 는 지 판단 하도록 해 야 합 니 다.몇 가지 자 료 를 찾 아 본 후에 마침내 해결 되 었 다.
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.주의사항여기 서 주의해 야 할 것 은 쿠키 를 설정 한 후에 다음 과 같은 속성 을 설정 할 수 없습니다.그렇지 않 으 면 쿠키 는 무효 입 니 다.(이러한 속성 뿐만 아니 라 예 를 들 어 loadurl 을 실행 하기 전에 쿠키 를 설정 하 는 것 이 가장 좋 습 니 다)
mWvSignUp.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mWvSignUp.getSettings().setJavaScriptEnabled(true);
mWvSignUp.getSettings().setDatabaseEnabled(true);
mWvSignUp.getSettings().setDomStorageEnabled(true);
4.일부 ajax 요청 은 쿠키 를 가 져 와 야 합 니 다.어떻게 합 니까?프로젝트 에 서 는 일부 클릭 이벤트 가 ajax 요청 으로 이 루어 질 때 도 있 으 며 로그 인 여 부 를 판단 해 야 하기 때 문 입 니 다.브 라 우 저 는 쿠키 를 자동 으로 저장 하고 서버 에 전송 합 니 다.그러나 안 드 로 이 드 는 그렇지 않 습 니 다.이 요청 을 차단 하고 쿠키 를 추가 해 야 합 니 다.
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 는 아직도 우리 가 탐색 해 야 할 기능 이 많 습 니 다.좋 은 제안 이 있 으 면 댓 글 에 저 에 게 제출 하고 싶 습 니 다.여러분 께 참고 가 되 셨 으 면 좋 겠 고 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.