마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 앱에서 로그인하면 웹뷰에서도 로그인이 연동되도록 구현하는 방법에 대한 질문입니다.

0 추천

안녕하세요 초보개발자입니다.

제가 맡은 안드로이드 어플 개발 프로젝트에서 앱 처음 화면에서 로그인을 하면 웹뷰에서도 로그인이 되도록 연동을 하려 합니다.

구글링을 통해 알아보니 cookie를 구성해 높으면 cookiemanager를 통해 웹뷰에서로 로그인이 되는 소스들을 보고 적용해 보았으나 연동이 안되는 경우가 대부분이었습니다.

아래의 블로그에서 소스를 얻어 아래와 같이 함수를 만들어 작성해 보았는데 잘못되어 있는 부분이 있으면 지도 부탁드립니다. 또는 다른 방법이 있으시다면 소개 부탁드립니다.

출처  : http://linsoo.co.kr/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1%EC%97%90%EC%84%9C-post-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%ED%95%98%EA%B3%A0-%EC%9B%B9%EB%B7%B0%EC%97%90-%EC%BF%A0%ED%82%A4-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

loginActivity

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

로그인 버튼 클릭시 실행되는 함수

private void loginHttpClient() {
        final String url = "http://ft.a2hosted.com/eex/loginQuery.php";
        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 {
                    // 서버에 전달할 파라메터 세팅
                    String user_id;
                    String user_pw;
                    String token;
                    user_id = et_user_email.getText().toString();
                    user_pw = et_user_pw.getText().toString();
                    token = FirebaseInstanceId.getInstance().getToken();

                    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("login_userid", user_id));
                    nameValuePairs.add(new BasicNameValuePair("login_pass", user_pw));
                    nameValuePairs.add(new BasicNameValuePair("token", token));
                    nameValuePairs.add(new BasicNameValuePair("login_type", "general"));

                    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();

    }

 

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

 

익명사용자 님이 2016년 9월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...