안드로이드 앱에서 post 로그인 하고 웹뷰에 쿠키 연동하기

안드로이드 앱 만들때 자동 로그인 기능.
그냥 웹뷰에서 만들면 쿠키 세션이 만료되던지 뭐던간에 로그인이 풀리는 경우가 있다
그럴 경우를 대비해서 아이디랑 비번을 앱 자체 공간에 저장하고 앱 실행시 마다 세션을 생성한뒤 그 쿠키를 앱에서 사용하는 웹뷰에 연동되도록 해줘야 한다.
그래서 찾아본거 정리해서 올린다.

일단 처음 onCreate하는곳이라던지 아님 메인이 되는 곳에서

CookieSyncManager.createInstance(mContext);
CookieManager.getInstance().removeAllCookie();
CookieSyncManager.getInstance().startSync();

이건 싱글톤(?)이라 아무대서나 한번만 해주면 된다.

final String url = "쿠키를 구울 주소";
final HttpClient http = new DefaultHttpClient();
final CookieManager cookieManager = CookieManager.getInstance();
final ResponseHandler<String> responseHandler= new ResponseHandler<String>() {
   @Override
   public String handleResponse(HttpResponse response)  throws ClientProtocolException, IOException {
	   String result = "", line;
	   HttpEntity entity=response.getEntity(); 
	   
	   BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
	   while((line = br.readLine()) != null)
		   result += line;
	   if ( result.equals("1") ){   //로그인 성공하면 1을 리턴하도록 했다
		   List<Cookie> cookies = ((DefaultHttpClient)http).getCookieStore().getCookies();
		   if (!cookies.isEmpty()) {
			   for (int i = 0; i < cookies.size(); i++) {
				   String cookieString = cookies.get(i).getName() + "=" + cookies.get(i).getValue();
				   cookieManager.setCookie(url, cookieString);
			   }
		   }
CookieSyncManager.getInstance().sync();
		   try {
			Thread.sleep(500);	//동기화 하는데 약간의 시간을 필요로 한다.
		   } catch (InterruptedException e) {	}
		   
		   Intent intent = new Intent(LoginActivity.this, MainActivity.class); 
		   startActivity(intent);
		   finish();
		   
	   }
	   return "";
   }
};


new Thread() {
	@Override
	public void run() {
	try { 
		// 서버에 전달할 파라메터 세팅   
		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
		nameValuePairs.add(new BasicNameValuePair("id", "아이디"));
		nameValuePairs.add(new BasicNameValuePair("pass", "비밀번호"));
		HttpParams params = http.getParams();
		HttpConnectionParams.setConnectionTimeout(params, 5000);
		HttpConnectionParams.setSoTimeout(params, 5000);
		HttpPost httpPost = new HttpPost(url);
		UrlEncodedFormEntity entityRequest = new UrlEncodedFormEntity(nameValuePairs, "UTF-8");
		httpPost.setEntity(entityRequest);
		http.execute(httpPost,responseHandler); 
	}catch(Exception e){}
	}
}.start();   
}

이렇게 해주면 된다.

	@Override
	protected void onPause()
	{
	    super.onPause();
	    CookieSyncManager.getInstance().stopSync();
	}
	
	@Override
	protected void onResume()
	{
	    super.onResume();
	    CookieSyncManager.getInstance().startSync();
	}

바로 위의 내용을 추가하지 않으면 다른 앱에서의 쿠키가 꼬일수도 있다.


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다