# CAUTION #
시작하기 전에 이 방식은 약간의 편법을 이용한 방식이고 안드로이드 4.4 이상부터 지원하는 것을 알려둔다... (그리고 현재 라이브러리로 만드는 중)사실 이 내용은 누군가의 부탁을 받아서 만들기 시작한건데, 다 완성도 되고 부탁한 애도 관련 일 다 끝낸거 같으니까 포스팅한다...
안드로이드에서 네이버 로그인을 위해서는 간단하게 네이버 API를 사용해서 로그인 하는 방식이 주로 보편적으로 이용된다.
위와 같은 api들이 있는데 네이버 메일을 파싱하거나 네이버 카페의 글 들을 파싱해야되는경우 API 가 없기 때문에 다른 방식을 사용해서 해야된다. 지금부터 그 과정중 가장 기본이되는 네이버 로그인부터 시작해보도록 한다. https://nid.naver.com/nidlogin.login 에서의 네이버 로그인 과정을 분석해보면
- id, pw의 길이를 검사해서 입력햇는지 검사
- 입력되엇으면 http://static.nid.naver.com/enclogin/keys.nhn 또는 https://nid.naver.com/login/ext/keys.nhn 에 접속해서 랜덤 값을 가져온다
- js 에서 RSA 암호화
- 특정 형식으로 POST
- 쿠키 받기
간략하게 이러한 과정을 거치는데... 내가 아는 한에서는 안드로이드에서는 js 를 돌릴수는 있지만 C# 처럼 자유롭게(?) 이용하는 것이 힘들다. 그래서 처음 선택한 방안이 HtmlUnit 이라는 것과 Sel..뭔 라이브러리가 있는데 여러개 전부 다 테스트를 해 보았지만 전부 작동이 되지를 않았다...
그래서 그냥 라이브러리 없이 진행하기로 했다.
일단 하는 방식은 간단하게 다음과 같다.
- 웹뷰를 이용해서 로그인
- 쿠키유지
Q1. 웹뷰를 쓰면 입력을 수동으로 해야될텐데, 그럼 자동이 아니잖아???
A. 웹뷰 써도 자동으로 할 수 있어!
이제 답을 말하자면 WebView에서 ID와 PW를 JS를 이용해서 자동으로 입력하게 할 것이다.
우리는 3가지 정도의 CSS 선택자를 알아야된다.
| 이름 | ID 입력 | PW 입력 | Login 버튼 |
|---|---|---|---|
| CSS 선택자 | #id | #pw | .btn_global |
이제 CSS 선택자를 알아냈으니 이제 코드를 짜보자
일단 웹뷰를 선언한 뒤에
WebView web = (WebView)findViewById(R.id.loginView);
그 다음에 쿠키를 저장해 두기위해서 CookieSyncManager을 사용한다.
CookieSyncManager.createInstance(getApplicationContext());
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().setAcceptCookie(true);
그 다음에 우리는 자바스크립트를 이용해 줘야되므로 활성화 해주고 솔직히 뭐해줘야 될지 잘 모르겟어서 필요해 보이는건 전부 때려박아버렷다.
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setSaveFormData(true);
web.getSettings().setAppCacheEnabled(true);
web.getSettings().setDatabaseEnabled(true);
web.getSettings().setDomStorageEnabled(true);
그리고 이런 코드를 한줄추가한다. 대충 설명하자면 캐쉬를 사용할수 있는 경우 만료 되도 사용하고 아닌경우에는 네트워크에서 받아와서 사용한다는 내용이다.
web.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//2016-08-25 글 수정 : 네이버 로그인 페이지 수정으로 인한 버튼 CSS선택자 수정
(길어져서 2편에서 계속...)
댓글
댓글 쓰기