Twitter는 회원 인증과 OAuth 와 XAuth를 지원합니다. 
사실 XAuth로 인증 하는것이 Mobile에서 보편화된 방법인데, XAuth는 ID/Password를 3rd-Party Application에서 입력 받기에,  
개인적으로는 OAuth를 선호 합니다. 

Twitter에서 OAuth는 oauth_verifier를 Pin Code라는 개념으로, 유저에게 HTML 화면으로 노출시키고, 그것을 입력하도록 하고 있습니다. 
"휴대폰 인증번호" 쯤으로 생각하면 될듯합니다. 

사용자에게 입력하게 한다. 사용자는 이미 아이디와 비밀번호를 입력했는 데 또 입력하게 해야 한다니, 
별로 좋지 않군요. 

오늘의 목표는 저 Pin Code값을 자동으로 가져오는 것입니다 ! 

그래서 HTML 을 Parsing해서 가져와보자고 생각을 했습니다. 

Pin 값이 <div id="oauth_pin"> 으로 되어 있어서, HTML DOM Element Parsing으로 가져 올수 있을꺼 같다는 생각을 했습니다.

그러나..

Android WebView에 HTML 을 가져 오는게 존재 하지 않습니다 ;ㅂ;

그래서 WebView에 Javascript 를 집어 넣어서, Java Code를 호출 하여, dom의 값을 넣기로 했습니다. 


class MyJavaScriptInterface  

{  

    public void showHTML(String pin) throws TwitterException  

    {  

    if(pin.length() > 0 ) {

    Log.i("Javascript Interface","pin = " + pin);

    AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, pin);

    Log.i("Javascript Interface", "AccessToken = " + accessToken);

    }

    else {

    Log.i("Javascript Interface","get pin failed...");

    }

    }  

}  

 webview.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");


이런식으로 Java Code와 연결된, Javascript Interface를 WebView에 삽입 할수 있습니다. 

view.loadUrl("javascript:window.HTMLOUT.showHTML(document.getElementById('oauth_pin').innerHTML);");  

view.loadUrl("javascript:window.HTMLOUT.showHTML(document.getElementsByTagName('code')[0].innerHTML);");

WebViewClient의 onPageFinisehd() Method를 Override하여, 삽입한 Javascript를 실행해주면
Page가 로딩 될때마다, 호출되고,oauth_pin 값을 얻는 순간이 인증이 끝난 순간이됩니다. 

그것을 통해서 AccessToken을 가져오면 Twitter OAuth 인증은 끝난 셈이죠. 

Java Code내에서 끝나지 않고, Javascript 를 통한다는게 좀 마음에 안드는 방식이긴 합니다. 
더 좋은 방법을 알게 되면 후딱 후딱 넘어가야죠. 어쨌든 잘 동작합니다. 


+ Recent posts