안드로이드 트위터 연동 예제입니다
//앱등록 및 라이브러리 다운은 아래 링크에 잘 설명되어있습니다
// 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>
---------------------------------------------------------------------------------------------------------
'안드로이드' 카테고리의 다른 글
android 주소로 위도,경도얻기 (0) | 2013.11.22 |
---|---|
[java] 특정일로 부터 7일전 날짜구하기 (0) | 2013.10.16 |
안드로이드 카카오스토리 연동 (0) | 2013.08.22 |
안드로이드 네이버 밴드 연동 (0) | 2013.08.22 |
안드로이드 페이스북 연동 (0) | 2013.08.22 |