본문 바로가기

안드로이드

안드로이드 트위터 연동

반응형

안드로이드 트위터 연동 예제입니다

//앱등록 및 라이브러리 다운은 아래 링크에 잘 설명되어있습니다

http://androi.tistory.com/60

// http://blog.naver.com/miriele/80147495967 를 참고했는데 네트워크 쓰레드 작업 처리가 안되어있어서 추가했습니다. 


---------------------------------------------------------------------------------------------------------

MainActivity.class


go_twiter.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent it = new Intent(MainActivity.this, IOPTE_Result.class);

it.putExtra("url", "https://play.google.com/store/apps/details?id=패키지명");

it.putExtra("msg", "메세지);

startActivity(it);

 

}

});



------------------------------------------------------------------------------------------------------

 IOPTE_Result.class


public class IOPTE_Result extends Activity implements OnClickListener {

private static final String SHARED_PREF_NAME = "IOPTE_TWITTER_SHARED_PREF";

private static final String TWITTER_CONSUMER_KEY = "컨슈머키를 등록해줍니다";

private static final String TWITTER_CONSUMER_SECRET = "컨슈머 패스워드를 등록해줍니다";

private static Uri TWITTER_CALLBACK_URL = Uri.parse("iopte://twitter"); 

private static final String SHARED_PREF_KEY_TWITTER_CONSUMER_KEY = "TWITTER_CONSUMER_KEY";

private static final String SHARED_PREF_KEY_TWITTER_CONSUMER_SECRET = "TWITTER_CONSUMER_SECRET";


private Twitter m_insTwitter; 

private AccessToken m_insAccessToken; 

private RequestToken m_insRequestToken; 


String msg = "";

String url = "";

AsyncTask<?, ?, ?> twiterTask;

AsyncTask<?, ?, ?> updateTask;

AsyncTask<?, ?, ?> newIntetTask;

        String  strError  ;

        String errorMsg="";


@Override

   public void onCreate(Bundle savedInstanceState)

   {


       super.onCreate(savedInstanceState);

 

       Log.d("myLog"   , "onCreate");


Intent gt = getIntent();

msg = gt.getStringExtra("msg");

url = gt.getStringExtra("url");

twiterTask = new twiterTask().execute();

   }

 

private class twiterTask extends AsyncTask<String, Void, Void> {

@Override

protected void onPreExecute() {

super.onPreExecute();

}


@Override

protected Void doInBackground(String... params) {

IOPTE_TWITTER_Submit();

return null;

}


@Override

protected void onPostExecute(Void result) {

}

}

 

private class updateTask extends AsyncTask<String, Void, Void> {

MyProgressDialog loagindDialog;

@Override

protected void onPreExecute() {

super.onPreExecute();

}


@Override

protected Void doInBackground(String... params) {

   IOPTE_TWITTER_UpdateStatus();

return null;

}


@Override

protected void onPostExecute(Void result) {

if(errorMsg.equals("")){

Toast.makeText(IOPTE_Result.this, "트위터 공유가 완료되었습니다", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(IOPTE_Result.this,errorMsg , Toast.LENGTH_SHORT).show();

}

finish();

}

}

 

private class newIntetTask extends AsyncTask<String, Void, Void> {

@Override

protected void onPreExecute() {

super.onPreExecute();

}


@Override

protected Void doInBackground(String... params) {

if(     null != uri

          && TWITTER_CALLBACK_URL.getScheme().equals(uri.getScheme()))

       // 내가 보낸 URI Scheme 과 동일하면

       {

           String  strOAuthVerifier    = uri.getQueryParameter("oauth_verifier");    // oauth_verifier 로 넘어옵니다.

           // twitter 인증 page에서 인증하지 않고 앱으로 이동 링크를 클릭해서 바로 돌아오면 strOAuthVerifier == null 이므로 예외처리

           if(null == strOAuthVerifier)

           {

               return null;

           }

           

           try

           {

               // request token 과 oauth verifier 로 access token 을 얻어옵니다.

               m_insAccessToken    = m_insTwitter.getOAuthAccessToken(m_insRequestToken, strOAuthVerifier);

 

               // 얻어온 access token 은 Shared Preference 에 고이 모셔 둡니다.

               Twitter_StoreAccessToken(m_insTwitter.verifyCredentials().getId(), m_insAccessToken);

 

               // access token 이 생겼으니 message 를 전송합니다.

               

           }

           catch (TwitterException te)

           {

               Log.e("myLog", te.getMessage());

           }

       }

return null;

}


@Override

protected void onPostExecute(Void result) {

updateTask = new updateTask().execute();

}

}

 

 

   @Override

   public void onClick(View v)

   {

       switch(v.getId())

       {

       }

   }

        Uri uri;

   @Override

   protected void onNewIntent(Intent intent)

   {

   

       Log.d("myLog"   , "onNewIntent");

       // WEB 에서 인증을 마치거나, 인증하지 않고 앱으로 돌아온 경우 이쪽으로 떨어지게 됩니다.


       super.onNewIntent(intent);

       

       uri = intent.getData();

       

       newIntetTask = new newIntetTask().execute();

 

      

   }

   

   public void IOPTE_TWITTER_Submit()

   {

       Twitter_GetInstance();

       

       m_insAccessToken    = Twitter_LoadAccessToken(0);

       

       Log.d("myLog"  ,  "m_insAccessToken :" +  m_insAccessToken);

       

       if(null != m_insAccessToken)

       {

           // SharedPreferences 에 저장된 access token 이 있으면

           // Twitter 객체에 access token 을 설정해 주고 바로 message 를 전송합니다.

           m_insTwitter.setOAuthAccessToken(m_insAccessToken);

 

   //        IOPTE_TWITTER_UpdateStatus();

           updateTask = new updateTask().execute();

       }

       else

       {

           // SharedPreferences 에 저장된 access token 이 없으면 인증 절차를 진행하게 됩니다.

           try

           {

               // request token 을 얻어옵니다.

               m_insRequestToken   = m_insTwitter.getOAuthRequestToken(TWITTER_CALLBACK_URL.toString());

           }

           catch (TwitterException te)

           {

               te.printStackTrace();

           }

 

           // WEB OAuth 인증을 진행하기 위해 Browser 를 호출합니다.

           startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(m_insRequestToken.getAuthorizationURL())));

       }

   }

 

   private void Twitter_GetInstance()

   {

       if(null == m_insTwitter)

       {

           m_insTwitter    = new TwitterFactory().getInstance();

 

           // twitter instance 에 앱의 key 를 등록 해 줍니다.

           m_insTwitter.setOAuthConsumer(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);

       }

   }

   

   private void Twitter_StoreAccessToken(long a_lUseID, AccessToken a_insAccessToken)

   {

       String  strToken        = null;

       String  strTokenSecret  = null;

       

       strToken        = a_insAccessToken.getToken();

       strTokenSecret  = a_insAccessToken.getTokenSecret();

       

       StoreData(SHARED_PREF_KEY_TWITTER_CONSUMER_KEY, strToken);

       StoreData(SHARED_PREF_KEY_TWITTER_CONSUMER_SECRET, strTokenSecret);

   }

 

   private AccessToken Twitter_LoadAccessToken(long a_lUseID)

   {

       AccessToken insAccessToken  = null;

       String      strToken        = null;

       String      strTokenSecret  = null;

       

       strToken        = LoadData(SHARED_PREF_KEY_TWITTER_CONSUMER_KEY);

       strTokenSecret  = LoadData(SHARED_PREF_KEY_TWITTER_CONSUMER_SECRET);

       

       if(   null != strToken

          && null != strTokenSecret

          && !"".equals(strToken)

          && !"".equals(strTokenSecret))

       {

           insAccessToken  = new AccessToken(strToken, strTokenSecret);

       }

       else

       {

           Log.v("myLog", "Twitter_LoadAccessToken() ## There's no saved strToken, strTokenSecret data");

       }

 

       return insAccessToken;

   }

 

   private boolean StoreData(String a_strKey, String a_strData)

   {

       SharedPreferences           insSharedPref       = null;

       SharedPreferences.Editor    insSharedPrefEditor = null;

       

       insSharedPref       = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);

       insSharedPrefEditor = insSharedPref.edit();

       

       insSharedPrefEditor.putString(a_strKey, a_strData);

 

       return insSharedPrefEditor.commit();

   }

   

   private String LoadData(String a_strKey)

   {

       SharedPreferences           insSharedPref   = null;

       

       insSharedPref       = getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);

 

       return insSharedPref.getString(a_strKey, "");

   }

   

   private void IOPTE_TWITTER_UpdateStatus()

   {

       String      strContent      = null;

       String      strTwitterID    = null;

 

       strContent     = msg+" " + url;

       strTwitterID    = "RECEIVER_ID";    

       

       try

       {

           // 특정 ID 에게 message 를 보내봅니다.

           m_insTwitter.updateStatus(strContent);

               


       }

       catch(TwitterException te)

       {

           if(HttpResponseCode.FORBIDDEN == te.getStatusCode())

           {

                strError    = null;

               

               strError    = te.getErrorMessage();

               

               if(true == strError.contains("duplicate"))

               {

                errorMsg="이미 트위터에 등록되었습니다.";

               }

               else if(true == strError.contains("140"))

               {

                errorMsg="등록이 실패하였습니다.! 140자가 넘었습니다.!";

               }

               else

               {

               }

               

           }

           else if(HttpResponseCode.UNAUTHORIZED == te.getStatusCode())

           {

            errorMsg="인증 오류입니다!";


           }

           

           te.printStackTrace();

       }

   }


}


---------------------------------------------------------------------------------------------------------매니페스트 


  <activity

            android:name=".IOPTE_Result"

            android:launchMode="singleTask"

            android:screenOrientation="portrait"

            android:theme="@style/Dialog" >

            <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:host="twitter"

                    android:scheme="iopte" />

            </intent-filter>

        </activity>

---------------------------------------------------------------------------------------------------------

반응형