http://www.androidpub.com/511504#19
트위터에서 Basic인증방식(ID와 Password를 직접입력 받는 방식)을 6월 까지만 지원한다는 소식이 있어서
트위터 어플 만드시는 분들이 oauth인증 방식에 대하여 많이 궁금해 히시는 것 같습니다.
twitter4j를 이용한 oauth인증방법에 대하여 간단하게 공유 하도록 하겠습니다.
- Web application Oauth인증
Web application의 경우는 requestToken을 요청할 때 등록된 callback Url로 넘어온 인증키(oauth_verifier)을 이용하여서 AccessToken을 발급받은 후 twitter에 인증하는 방식 입니다.
Client application의 경우는 requestToken을 요청할 때 따로 callback url을 등록하지 않고 인증 Url로 web browser를 실행한 후 app 사용자가 로그인하여 발급 받은 PIN번호를 입력 받아서 AccessToken을 발급받은 후 twitter에 인증하는 방식 입니다.
- oauth인증 방식에 자세한 정보는 아래 링크를 참고하세요
http://cafe.naver.com/openapi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1595
- twitter4j는 2.1 이상의 버전부터 Oauth인증 방식을 지원하고 있습니다.
twitter4j를 이용하여 Web application oauth인증방식을 구현하는 방법에 대하여 설명하겠습니다.
1. TwitterMain.java
01.
public
static
String consumerKey =
""
;
//"발급받은consumerKey ";
02.
public
static
String consumerSecret =
""
;
//"발급받은consumeSecret";
03.
public
static
Uri CALLBACK_URL = Uri.parse(
"wefu://twitter"
);
04.
05.
private
Twitter twitter;
06.
private
AccessToken acToken;
07.
private
RequestToken rqToken;
08.
private
Status status =
null
;
09.
10.
public
void
onCreate(Bundle savedInstanceState) {
11.
twitter =
new
TwitterFactory().getInstance();
12.
twitter.setOAuthConsumer(consumerKey, consumerSecret);
13.
rqToken = twitter.getOAuthRequestToken(CALLBACK_URL.toString());
14.
startActivity(
new
Intent(Intent.ACTION_VIEW, Uri.parse(
15.
rqToken.getAuthorizationURL())));
16.
}
17.
18.
protected
void
onNewIntent(Intent intent) {
19.
super
.onNewIntent(intent);
20.
Uri uri = intent.getData();
21.
if
(uri !=
null
&& CALLBACK_URL.getScheme().equals(uri.getScheme())){
22.
String oauth_verifier = uri.getQueryParameter(
"oauth_verifier"
);
23.
try
{
24.
acToken = twitter.getOAuthAccessToken(rqToken, oauth_verifier);
25.
status = twitter.updateStatus(
"test twitter4j web application oauth"
);
26.
}
catch
(TwitterException e) {
27.
Log.e(TAG, e.getMessage());
28.
}
29.
}}
1.1 RequestToken을 요청할때 callback URL을 지정하여서 요청합니다.
1.2 Browser를 응답받은 RequestToken의 getAuthorizationURL로 지정하여서 실행 합니다.
1.3 onNewIntent에서 callback URL로 리다이렉트 될때 인증 data를 받아서 AccessToken을 요청하여 인증합니다.
2. AndroidManifest.xml
01.
<uses-permission android:name=
"android.permission.INTERNET"
/>
02.
<application android:icon=
"@drawable/icon"
android:label=
"@string/app_name"
>
03.
<activity android:name=
".TwitterMain"
04.
android:label=
"@string/app_name"
05.
android:launchMode=
"singleInstance"
>
06.
<intent-filter>
07.
<action android:name=
"android.intent.action.MAIN"
/>
08.
<category android:name=
"android.intent.category.LAUNCHER"
/>
09.
</intent-filter>
10.
<intent-filter>
11.
<action android:name=
"android.intent.action.VIEW"
/>
12.
<category android:name=
"android.intent.category.DEFAULT"
/>
13.
<category android:name=
"android.intent.category.BROWSABLE"
/>
14.
<data android:scheme=
"wefu"
android:host=
"twitter"
/>
15.
</intent-filter>
16.
</activity></application>
2.1 intent-filter에 data로 callback URL를 지정해 주게 되면 TwitterMain activty가 다시 실행되게 되므로 launchMode를
singleInstance로 지정합니다
- 추가로 xauth인증 방식에 대하여 설명한 블로그가 있어 링크합니다
http://blog.naver.com/pppplqqqq?Redirect=Log&logNo=100105293098
String Password = "";
String key = "";
String secret = "";
try {
AccessToken accessToken = null;
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(key);
builder.setOAuthConsumerSecret(secret); // Configuration 객체에도 consumer key 와 consumer secret 이 필요하다.
Configuration config = builder.build();
OAuthAuthorization oauth = new OAuthAuthorization(config , key, secret ); /
accessToken = oauth.getOAuthAccessToken(ID, Password); // user id, pass 로 access token 생성
TwitterFactory facrory = new TwitterFactory(config);
Twitter twitter = facrory.getOAuthAuthorizedInstance(accessToken);
Status status = twitter.updateStatus("test "); // twitter 인증 테스트
Log.d("Twitter" , "Successfully updated the status to [" + status.getText() + "].");
} catch (TwitterException te) {
Log.d("Twitter" , "Failed to get timeline: " + te.getMessage());
}
[출처] Twitter4j 를 사용해서 Xauth 인증방식 적용하기 |작성자 곰팅이