안드로이드에서 트위터 연동하기 (web, twitter4j)
안드로이드에서 트위터를 연동하는 방법은 2가지가 있다.
twitter4j를 이용하는 방법, url을 이용하여 activity를 실행하는 방법이다.
1) url를 이용하는 방법
try
{
String strLink = String.format("http://twitter.com/intent/tweet?text=%s",
URLEncoder.encode(message, "utf-8"));
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(strLink));
startActivity(intent);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
2) twitter4j를 이용하는 방법
1. sdk를 다운로드 받는다. (http://twitter4j.org/ko/index.html#download)
2. lib 폴더에 twitter4j-core-3.0.5.jar 를 복사해 넣는다
3. eclipse에서 property ->Java Build Path -> Libraries 에 Add JaRs 버튼을 이용해 추가한다
Order and Export 에서도 선택한다.
4. manifest 파일에 아래 내용을 추가한다
<!-- activity에 추가 onNewIntent(Intent intent) 함수가 호출될려면 필요하다 -->
android:launchMode="singleInstance"
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sample" android:host="twitter" />
</intent-filter>
5. 공유 버튼을 클릭했을 경우 아래 소스를 추가한다
1) twitter api key, secret key는 https://apps.twitter.com/ 에 app를 등록하면 생성된다.
2) 트위터에 app를 등록한 후 권한 설정을 Read, Write and Access direct messages로 변경한다
3) activity 멤버 변수로 Twitter twitter = null, RequestToken requestToken = null 를 선언한다
String twitterKey = getApplicationContext().getResources().getString(R.string.twitter_key);
String twitterSecret = getApplicationContext().getResources().getString(R.string.twitter_secret);
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(twitterKey);
builder.setOAuthConsumerSecret(twitterSecret);
twitter4j.conf.Configuration configuration = builder.build();
twitter = new TwitterFactory(configuration).getInstance();
new Thread(new Runnable()
{
@Override
public void run()
{
try
{
requestToken = twitter.getOAuthRequestToken("sample://twitter");
}
catch (TwitterException e)
{
e.printStackTrace();
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthorizationURL()));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
}).start();
6. 웹브라우저로 트위터 페이지가 열리면서, 로그인 및 승인 창이 나온다.
클릭하면, 나의 App 화면으로 넘어오면서 onNewIntent(Intent intent) 가 호출된다
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
final Uri uri = intent.getData();
if(uri != null && uri.toString().startsWith("file24coupon://twitter"))
{
new Thread()
{
@Override
public void run()
{
try
{
String oauth_verifier = uri.getQueryParameter("oauth_verifier");
AccessToken acToken = twitter.getOAuthAccessToken(requestToken, oauth_verifier);
String message = String.format("파일24에서 쿠폰을 제공합니다 \n쿠폰번호:%s\nwww.file24.co.kr", couponText.getText().toString() );
Status status = twitter.updateStatus(message);
Bundle bundle = new Bundle();
bundle.putString("msg", "트윗에 성공적으로 전송 되었습니다.\n" + message);
Message msg = m_Handler.obtainMessage();
msg.what = 0;
msg.setData(bundle);
m_Handler.sendMessage(msg);
}
catch (TwitterException e)
{
Log.e("File24coupon", e.getMessage());
}
}
}.start();
}
}
참고) getOAuthRequestToken, getOAuthAccessToken 함수를 호출할때는 별도의 스레드에서
처리해야 충돌이 일어나지 않고, 정상적인 처리가 된다.
댓글
댓글 쓰기