프로젝트를 진행하던 중 앱의 설치된 버전을 웹뷰에서 판단하여 다른 화면을 렌더링 해줘야 하는 경우가 있었습니다.
설치된 앱의 버전은 네이티브에서만 접근할 수 있어 이것을 get하여 웹뷰의 쿠키에 값을 넣어주었습니다.
아래의 내용은 안드로이드에서 웹뷰에 쿠키를 추가해주고자 하는 내용입니다.
1. 설치된 앱 버전 가져오기
* 설치된 앱 버전은 아래의 예시 코드에는 나오지 않습니다.
PackageInfo pInfo;
// onCreate 안에 추가
try {
pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
2. 쿠키 관련 세팅 추가
// onCreate 내에 추가
// Cookie Manager 초기화
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
// Cookie Manager의 특정 도메인에 쿠키 추가
cookieManager.setCookie("https://m.naver.com", "android_app_version=" + pInfo.versionName);
현재 웹뷰는 쿠키를 필요에 의해 자동으로 동기화를 해줍니다. 더이상 CookieSyncManager를 통해 동기화를 시켜주지 않아도 됩니다.
API Level 21 이전에선 CookieSyncManager를 통해 브라우저의 쿠키와 디바이스내의 영구 저장소 간에 쿠키 정보를 동기화 시켜주어야 했습니다.
아래는 그 예시 코드입니다. 웹뷰의 클라이언트 정보를 세팅하는 쪽에서 아래와 같이 생명주기에 맞춰 flush()를 통해 동기화를 시켜주었었습니다.
@Override
public void onPageFinished(WebView view, String url) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
CookieSyncManager.getInstance().sync();
} else {
CookieManager.getInstance().flush();
}
}
CookieSyncManager는 RAM과 영구 저장소간에 브라우저 쿠키 저장소의 동기화를 위해 사용되어 집니다.
좀 더 나은 성능을 위해 브라우저 쿠키는 RAM에 저장되어 집니다.
별도의 스레드가 timer에 의해 동작되어 쿠키를 둘간에 저장합니다.
출처 : https://developer.android.com/reference/android/webkit/CookieSyncManager
'네이티브 > Android' 카테고리의 다른 글
Android splash image 띄우기 (Renewal) (0) | 2022.03.01 |
---|---|
Android 웹뷰 alert, confirm 띄우기 (0) | 2022.01.24 |
Android 웹뷰 디버깅 (0) | 2022.01.20 |
안드로이드 UGC 심사 거절 (0) | 2022.01.18 |
Android Uri.getQueryParameter에 + 들어가면 빈칸으로 바뀝니다. (0) | 2022.01.12 |