안드로이드에서 트위터 연동하기 (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 함수를 호출할때는 별도의 스레드에서
         처리해야 충돌이 일어나지 않고, 정상적인 처리가 된다.

    

댓글

이 블로그의 인기 게시물

MQTT SERVER 설치 하기 (mosquitto broker)

nightwish - elan 가사 & 해석

아이폰 앱 생명주기