안드로이드 앱 만들때 자동 로그인 기능.
그냥 웹뷰에서 만들면 쿠키 세션이 만료되던지 뭐던간에 로그인이 풀리는 경우가 있다
그럴 경우를 대비해서 아이디랑 비번을 앱 자체 공간에 저장하고 앱 실행시 마다 세션을 생성한뒤 그 쿠키를 앱에서 사용하는 웹뷰에 연동되도록 해줘야 한다.
그래서 찾아본거 정리해서 올린다.
일단 처음 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(); }
바로 위의 내용을 추가하지 않으면 다른 앱에서의 쿠키가 꼬일수도 있다.
답글 남기기