본문 바로가기

android/Twitter

Android app에서 Twitter 연동하기 5

http://jeehun.egloos.com/4002342
상단에 원본 링크 입니다. 아래 포스트는 제가 작성한 것이 아니고 egloos.com에 접속되지 않는 분들은 위한 글임을 미리 밝혀 둡니다.

너무 잘 작성된 예제라서 가져옴을 다시 알려드립니다.

아... 로그아웃 처리를 깜박 했네요
트위터는 로그아웃 api를 제공하지 않습니다.
따라서 로그아웃 페이지로 가서 사용자가 로그아웃 버튼을
클릭해줘야 하는데요
다음과 같이 하시면 됩니다.

먼저 TwitterCon.java 파일을 수정합니다.

버튼 클릭 이벤트 메서드에서 logout()을 추가하시구요
// 버튼 클릭 이벤트 처리
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.btnLogin: // Twitter login
login();
break;
case R.id.btnFeed: // Twitter에 글쓰기
write();
break;
case R.id.btnLogout: // Twitter logout
logout();
break;
default:
break;
}
}

다음은 실제로 처리하는 메서드를 만들겠습니다.
private void logout()
{
Intent intent = new Intent(C.MOVE_TWITTER_LOGIN);
intent.putExtra("auth_url", C.TWITTER_LOGOUT_URL);
startActivity(intent);
}

위의 메서드를 추가해주시면 됩니다.

여기서 C.TWITTER_LOGOUT_URL 은 C.java 에 다음과 같이 정의해 놓습니다.
public static final String TWITTER_LOGOUT_URL = "http://api.twitter.com/logout";

이렇게 하시면 실제 코드는 다음과 같을겁니다.

************************* TwitterCon.java ****************************
package com.android.twittercon;

import java.io.File;

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.http.AccessToken;
import twitter4j.http.OAuthAuthorization;
import twitter4j.http.RequestToken;
import twitter4j.util.ImageUpload;
import twitter4j.util.ImageUpload.TweetPhotoOAuthUploader;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TwitterCon extends Activity implements View.OnClickListener
{
private Twitter mTwitter;
private RequestToken mRqToken;
private AccessToken mAccessToken;
private Button mBtnLogin, mBtnFeed, mBtnLogout;
private EditText mEtContent;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mEtContent = (EditText) findViewById(R.id.etContent);

mBtnLogin = (Button) findViewById(R.id.btnLogin);
mBtnFeed = (Button) findViewById(R.id.btnFeed);
mBtnLogout = (Button) findViewById(R.id.btnLogout);

mBtnLogin.setOnClickListener(this);
mBtnFeed.setOnClickListener(this);
mBtnLogout.setOnClickListener(this);
}

// 버튼 클릭 이벤트 처리
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.btnLogin: // Twitter login
login();
break;
case R.id.btnFeed: // Twitter에 글쓰기
write();
break;
case R.id.btnLogout: // Twitter logout
logout();
break;
default:
break;
}
}

private void login()
{
try
{
TwitterFactory factory = new TwitterFactory();
mTwitter = factory.getOAuthAuthorizedInstance(C.TWITTER_CONSUMER_KEY, C.TWITTER_CONSUMER_SECRET);
mRqToken = mTwitter.getOAuthRequestToken(C.TWITTER_CALLBACK_URL);
Log.v(C.LOG_TAG, "AuthorizationURL >>>>>>>>>>>>>>> " + mRqToken.getAuthorizationURL());

// Intent intent = new Intent(C.MOVE_TWITTER_LOGIN);
Intent intent = new Intent(this, TwitterLogin.class);
intent.putExtra("auth_url", mRqToken.getAuthorizationURL());
startActivityForResult(intent, C.TWITTER_LOGIN_CODE);
}
catch (Exception e)
{
e.printStackTrace();
}
}

private void write()
{
try
{
String accessToken = mAccessToken.getToken();
String accessTokenSecret = mAccessToken.getTokenSecret();
Configuration config = new ConfigurationBuilder().build();
OAuthAuthorization oauth = new OAuthAuthorization(config, C.TWITTER_CONSUMER_KEY, C.TWITTER_CONSUMER_SECRET, new AccessToken(accessToken, accessTokenSecret));

String path = Environment.getExternalStorageDirectory().getAbsolutePath();
File picture = new File(path + "/example.jpg");

if (picture.exists())
{
// 트위터에 그림 올리기
ImageUpload uploader = TweetPhotoOAuthUploader.getTwitpicUploader(C.TWITPIC_API_KEY, oauth);
String strResult = uploader.upload(picture , "");
mTwitter.updateStatus(mEtContent.getText().toString() + " " + strResult);
}
else
{
mTwitter.updateStatus(mEtContent.getText().toString());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

private void logout()
{
Intent intent = new Intent(C.MOVE_TWITTER_LOGIN);
intent.putExtra("auth_url", C.TWITTER_LOGOUT_URL);
startActivity(intent);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);

// 액티비티가 정상적으로 종료되었을 경우
if(resultCode == RESULT_OK)
{
if (requestCode == C.TWITTER_LOGIN_CODE)
{
try
{
mAccessToken = mTwitter.getOAuthAccessToken(mRqToken, data.getStringExtra("oauth_verifier"));

Log.v(C.LOG_TAG, "Twitter Access Token : " + mAccessToken.getToken());
Log.v(C.LOG_TAG, "Twitter Access Token Secret : " + mAccessToken.getTokenSecret());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
*********************************************************************

C.java 파일은 다음과 같습니다.
****************************C.java **********************************
package com.android.twittercon;

public class C
{
public static final String LOG_TAG = "TwitterCon";
public static final String TWITTER_API_KEY = "트위터 Api key";
public static final String TWITPIC_API_KEY = "트윗픽 Api Key";
public static final String TWITTER_CONSUMER_KEY = "트위터 컨슈머 키";
public static final String TWITTER_CONSUMER_SECRET = "트위터 컨슈머 시크릿 키";
public static final String TWITTER_CALLBACK_URL = "http://m.daum.net";
public static final String MOVE_TWITTER_LOGIN = "com.android.twittercon.TWITTER_LOGIN";
public static final int TWITTER_LOGIN_CODE = 10;
public static final String TWITTER_LOGOUT_URL = "http://api.twitter.com/logout";

public static boolean D = true;
}
*********************************************************************

이렇게 코딩하시고 실행시키신 담에
로그인 후에 로그아웃 버튼을 누르시면
다음과 같은 페이지로 가게 됩니다.

여기서 사인 아웃을 누르시면 로그아웃이 되면서
http://mobile.twitter.com/ 이 페이지로 리다이렉트가 되게 되는데

우리는 이미 TwitterLogin.java 파일을 만들때 logout후에 리다이렉트
되는 위의 링크가 로딩되면 webview 액티비티를 종료하도록 코딩해
놨습니다.
바로 이부분이죠
// 로그아웃을 처리한후에는 바로 Activity를 종료시킨다.
if (url != null && url.equals("
http://mobile.twitter.com/"))
{
finish();
}


자 이제 다시 로그인 버튼을 누르시면 아이디/패스워드를 다시 입력하라는 창이 뜰것입니다.
여기까지 트위터 연동을 알아 보았습니다.