안녕하세요 초보개발자입니다.
제가 맡은 안드로이드 어플 개발 프로젝트에서 앱 처음 화면에서 로그인을 하면 웹뷰에서도 로그인이 되도록 연동을 하려 합니다.
구글링을 통해 알아보니 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();