본문 바로가기

Dev/Mobile

[Android] CookieManager를 사용해야하는 이유

반응형

출처 : http://blog.naver.com/PostView.nhn?blogId=free2824&logNo=60175591849

 

1. CookieManager를 사용해야하는 이유

Server와 통신하다보면 Cookie를 보관해야할 일이 있다. Cookie는 CookieManager를 사용해 관리하는 것이 좋다.

 

처음에는 Activity 내 전역변수에 Cookie를 보관하였다. 일반적인 Java 프로그램과 동일하게 App이 종료되기 전까지 전역변수 값이 날라가지 않을거라고 생각했었다. 

 

앱을 벗어나 카톡 하다가.. 네이버도 하다가.. 인터넷도 하다가.. 다시 앱으로 돌아와보면, 앱이 비정상종료되는 경우가 발생한다. 디버깅을 해보면, 전역변수의 값이 모두 null로 변경되어있어서 그럼을 알 수 있는데.. 그렇다면 persistance를 유지해야하는 것들은 전역변수에 보관하면 안된다는 결론이 나온다.

 

Cookie를 CookieManager에 보관해야하는 첫번째 이유는 persistance를 유지해주기 때문이다. 앱이 종료되기 전까지는 Cookie가 유지됨을 확인하였다. (종료 후에도 유지되는지는 잘 모르겠다. 테스트 필요!)


그럼 DB나 SharedPreference에 보관해도 되잖아요! 라고 주장할수도 있다. 맞는말이고 충분히 가능하다. 단, WebView와 Cookie를 Sync할 일이 없는 경우에만 해당된다. 앱은 WebView를 사용해 모바일 웹과 통합 운영될 수 있고, 이 때 Cookie Sync가 필요한 경우가 있다. 

 

CookieManager에 보관해야하는 두번째 이유는 WebView와의 Cookie Sync를 위해서다.

 

 

2. CookieManager를 사용한 Cookie 관리

우선 Cookie를 사용하기 전에 적절한 위치에서 CookieSyncManager를 초기화해줘야한다.

CookieSyncManager.createInstance(this); 

 

Cookie를 저장하려면 CookieManager를 초기화하고 "key=value" 모양의 Cookie String을 넣어주면 된다.

// CookieManager 초기화

CookieManager cookieManager = CookieManager.getInstance();

 

// CookieManager에 특정 Domain의 Cookie 추가

cookieManager.setCookie("http://www.domain.com", "cookieKey=value");  // "cookieKey=value

 

// 2번째 Cookie를 추가하면 기존 Cookie에 추가가됨.

cookieManager.setCookie("http://www.domain.com", "cookieKey2=value2"); // "cookieKey=value; cookieKey2=value2

 

// Cookie 추가 후에 Sync 수행

CookieSyncManager.getInstance().sync();

반응형