2013-07-08 68 views
1

我已將Twitter集成到我的應用程序中(使用OAuthtwitter4j庫)以代表用戶更新用戶帳戶的狀態。這很好。Android-twitter4j例外 - 未發現身份驗證挑戰

在更新狀態之前,我檢查Shared Preferences是否存儲AccessToken。如果可用,即用戶已登錄,則更新狀態,否則用戶未登錄,因此顯示用戶登錄的twitter頁面。

的問題是,如果用戶登錄後因此Shared Preferences,現在有AccessToken如果用戶撤消應用程序的權限,我嘗試後狀態,那麼它給這個意外事件或錯誤。

enter image description here

我怎麼會知道該用戶已撤銷的許可,因此我要問的授權?

編輯:我來了解如何處理未經授權的訪問,我處理了它。但是這個例外仍然存在。

回答

0

我解決了這個問題。問題在於,我正在測試用戶未授權應用程序時的功能。而且我未經授權使用我在dev.twitter.com上創建應用程序的twitter帳戶的應用程序。這樣做使得我的accesstoken被存儲在共享首選項中,並因此在我的代碼中,當我從共享首選項中獲取並使用它時,我用來獲取異常。

解決方案是在dev.twitter.com創建的應用程序中重新創建一個accesstoken。在我的代碼中,我添加了這個條件:

catch (TwitterException e) { 

    if (e.getStatusCode() == -1) { 

     // This is the case when the developer who created the application has revoked the application permission. 
     // In this case we need to remove stored access token as it is no longer valid. 
     // Logging in again will fetch newer accesstoken and will solve the problem. 
     logoutFromTwitter(); 
     loginToTwitter(); 
    } 
} 
+0

這是一個正確的答案? (-1) – BlaShadow

+0

@BlaShadow是的,這是問問題的正確答案。這是重要的。 – Geek

+0

這不是來自twitter4j的bug /問題,你是bug。這怎麼能幫助任何人? – BlaShadow

3

這可能聽起來很奇怪,但嘗試自動設置您的時間/日期更新。根據我以前的經驗,這是問題所在。當我設置這個和電話時間同步後,一切工作正常。

那就試試這個: -

// ConfigurationBuilder 
ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.setOAuthConsumerKey(twitterConsumerKey); 
builder.setOAuthConsumerSecret(twitterConsumerSecret); 

// Access Token from sharedPreference 
String access_token = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_TOKEN, ""); 
// Access Token Secret from sharedPreference 
String access_token_secret = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_SECRET, ""); 

AccessToken accessToken = new AccessToken(access_token, access_token_secret); 
twitter = new TwitterFactory(builder.build()).getInstance(accessToken); 

// Getting user details from twitter 
// For now i am getting his name only 
long userID = accessToken.getUserId(); 
User user = twitter.showUser(userID); 
String username = user.getName() + " (" + user.getScreenName() + ")"; 
+0

它已被設置爲自動更新。 – Geek

相關問題