본문 바로가기

android/Twitter

Android app에서 Twitter 연동하기 4

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

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

지난편에 이어 이번에는 트위터에 글 쓰기를 해보도록 하겠습니다.
글과 함께 그림파일을 하나 트윗픽에 올리고 트위터로 같이 올라가도록
해보지요

자 먼저 적당한 그림파일을 하나 준비하시고 에뮬레이터의 SD카드에
그림파일을 올리도록 하겠습니다. DDMS를 사용하면 쉽게 올릴 수
있습니다.

다음 그림과 같이 DDMS를 선택하셔서 sdcard를 선택하시고 붉은색 박스를
클릭하시면 그림파일을 올릴 수 있습니다. 올리고 나면


이렇게 보이겠지요
다음은 Twitpic 사이트에 가셔서 앱을 등록하고 API키를 받아와야 합니다.
twitpic.com 에 접속하셔서 로그인 하시면(당연히 가입은 하셔야죠)
다음과 같은 화면이 나옵니다.
여기서 아래 붉은색 박스를 클릭(API)하셔서 들어갑니다.
그런 다음 아래 화면을 클릭합니다.

그리고 다음처럼 앱을 등록합니다.
등록이 끝나면 API Key를 받습니다.
잘 적어놓으시구요

이제 C.java 파일에 이 Api key를 등록해놓겠습니다.
이런 식으루요...
public static final String TWITPIC_API_KEY = "트윗픽 API Key";

이제 TwitterCon.java 파일을 수정합니다.
OAuthAuthorization 객체인 oauth을 만들고 이것과
트윗픽 API Key를 이용해 이미지 업로더를 초기화 합니다.
그렇게 해서 이미지 업로더의 upload 메서드를 이용해 그림을
트윗픽에 올리면 링크 정보가 스트링으로 떨어지구요 트위터에는
이 링크 정보(strResult)를 트윗팅 할 문구와 함께 붙여서 올리면
됩니다. 트위터에 글을 올리는건
mTwitter.updateStatus를 사용하면 되구요
별루 어렵진 않습니다.

************************** 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;
import android.widget.Toast;

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
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();
}
}

@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();
}
}
}
}
}
*********************************************************************

이렇게 코딩하고 컴파일 실행하고 나서
로그인 > 글을 쓰고 > Write 버튼을 클릭하면

이렇게 글이 올라가는 것을 볼 수 있습니다.

여기까지 트위터 연동을 알아봤습니다.
질문 있으시면 리플 달아주시면 아는 한도내에서는 답변해드리도록 하겠습니다.
다음번에 시간이 되면 트위터 앱 등록시 브라우져 타입이 아니라 네이티브 앱 타입으로
등록하고 로그인을 pin코드를 가져오는 방식을 함 해보도록 하겠습니다.
그럼...