http://blog.ithcity.com/107
그 동안 올린다 올린다 하다가 이제야 포스팅을 하네요. 사실은 기존의 라이브러리와 예제를 그대로 사용하기에 너무 쉬워서 포스팅이랄 것도 없지만, 혹시나 저처럼 헤매시는 분이 있지 않을까해서 이렇게 간단하게나마 올려볼까 합니다. 오늘 주제는 요즘 저희가 많이 접하게 되는 트위터 인증하는 방법인데요. 기존에 트위터 API 자료들은 꽤 많이 올라와 있고, 안드로이드 역시 자바이기 때문에 특별히분류하지 않아도 될만큼 기존의 방법을 안드로이드에서도 사용이 가능합니다.
먼저 트위터를 사용하기 위해서는 로그인, 즉 사용자 인증을 해야하는데요. 크게 두가지 방식이 있습니다. 우리가 일반적으로 사용하는 아이디와 패스워드를 사용자가 직접 입력하는 Basic 인증 방식과 트위터 쪽에서 받은 키를 가지고 토큰을 이용한 Oauth 인증방식 입니다. Basic 방식을 그냥 사용하면 되지 왜 굳이 사용하느냐라고 물으신다면 트위터 측에서는 Basic 인증 방식을 올 6월부터 중지하고 Oauth 인증 방식으로 바꾼다고 발표하였기 때문입니다.(그런데 7월 19일이 지나가는 현재도 기존의 로그인 방식이 사용이 가능하긴 하네요. 언제까지 연기 될런지는 모르겠으나 요즘 회사들 추세도 그렇고 조만간 Oauth 인증 방식으로 모두 바꿀 듯합니다) 굳이!왜!어째서!귀찮게! Oauth를 고집하느냐. 그것은 Basic 인증 방식보다 Oauth 인증 방식이 좀 더 보안적인 측면에서 안전하기 때문입니다. 이것에 대해서는 많은 자료가 있으니 제가 설명하는 것보다 찾아보시는게 훨씬 이해가 빠르실 겁니다.ㅋ(이런 무책임한!ㅋ)
Oauth 인증 방식에도 두가지 방법이 존재합니다. Web application Oauth인증 방식과 Client application Oauth인증 방식으로 나뉘는데요. Web Oauth 방식은 requestToken을 요청할 때 등록된 callback Url로 넘어온 키를 이용하여서 AccessToken을 발급받아 인증하는 방식이고 Client Oauth 방식은 requestToken을 요청할 때 따로 토큰을 통해가져온 Url로 접근한 후에 어플 상의 브라우저등을 통해 사용자가 로그인하여 화면에 출력된 PIN번호를 입력 받아서 AccessToken을 발급받은 후 인증하는 방식입니다.
처음에 안드로이드에서 Web Oauth방식을 하려고 했는데 자료도 없고 콜백 값들을 어떻게 안드로이드에서 다뤄야하는지를 몰라서 결국 Client 방식을 사용하였는데요. 지금 또 검색해보니 안드로이드펍에 관련된 내용이 올라온게 있으니 그것도 참고해 보시길(구글에도 이와 같은 방식으로 돌아가는 영상이 있는데 막상 소스 받아 돌려보니 안되더군요, 되시는분 가르쳐주세요~!ㅋ)
전 그냥 이게 간단하고 시간도 없었기에 사용했던;; 무튼, 각설은 여기까지하고 바로 실습.ㅡㅡ;;
준비하실 사항으로는 라이브러리와 트위터에서 발급받은 Consumer Key인데요. 라이브러리는 twitter4j, jtwitter등 여러가지가 있지만 가장 많이 사용하는 twitter4j를 사용했으니 라이브러리는 따로 받아주시구요, Consumer Key와 트위터 (https://twitter.com/apps)에 가셔서 자신이 만들 어플리케이션을 등록하시고 발급받으시면 됩니다.
실습을 위해 화면의 구성은 최대한 간단하게 하였씁니다.ㅋ 먼저 화면 UI는 URL에 접근해서 PIN값을 보여줄 WebView하나와 값을 입력받을 EditText, 토큰을 설정할 Button 정도면 될 것 같습니다. 나중에 인증한후에는 따로 리스트에 뿌려주지 않고 토스트메세지로 띄우구요.(그 정도도 안하고 무슨 포스팅이냐!라고 물으신다면. 전 비오는 하늘을 바라볼 뿐.ㅋㅋ) 헛, 그런데 코드를 넣을려고 했는데 저희 블로그에 그게 없네요.. 이거 따로 플러그인 같은걸 삽입해야보군요...음.. 캡처..걍...(또 그 정도도 안하고 무슨 포스팅이냐!라고 물으신다면. 전, 역시 비오는 하늘을 바라볼 뿐.ㅋㅋ)
1. AndroidManifest.xml,
특별한 건 없습니다. 웹뷰를 사용해야하기 때문에 퍼미션만 추가해주시면 될것 같습니다.
2. twitter_text.xml
역시 틀변한 건 없습니다. 초간단 배치로 WebView와 EditText, Button을 보실 수 잇습니다.
3. TwitterTest.java
마지막으로 자바 코드입니다. 역시 간단합니다. Oncreate에서는 xml의 각 뷰들을 불러오고 어플 진입시에 getRequestToken() 메서드를 호출해서 발급받은 consumer 키를 이용해서 request 토큰을 받습니다. 그리고 거기에 같이 온 url로 WebView에서 이동시켜 사용자가 pin값을 볼 수 있도록합니다. 마지막으로 Button을 클릭하면 getAccessToken 메서드가 실행되어 requetToekn과 pin값을 이용하여 트위터에 접근하게 됩니다. 75라인 밑으로는 제가 임의로 해쉬 태그를 넣고 검색하는 부분을 추가했습니다. 수정하실 때는 원하는 동작을 밑에 넣으시면 됩니다. 마지막으로 메세지를 모아서 토스트로 뿌리게 됩니다.
써놓고 보니 너무 간단하네요. 사실 사용자 입장에서는 브라우져로 접속하고 로그인 한 다음에 pin 값을 보고 입력해야하기 때문에 기존 보다 더 직관적이지 못하고 번거로운 이 방법보다는 Web Oauth를 쓰는게 맞는것 같습니다. 하지만 이런 방법도 있으니 참고하셨으면 하고 올려봅니다.