Android-twitter4j例外 - 未发现身份验证挑战

问题描述:

我已将Twitter集成到我的应用程序中(使用OAuthtwitter4j库)以代表用户更新用户帐户的状态。这很好。Android-twitter4j例外 - 未发现身份验证挑战

在更新状态之前,我检查Shared Preferences是否存储AccessToken。如果可用,即用户已登录,则更新状态,否则用户未登录,因此显示用户登录的twitter页面。

的问题是,如果用户登录后因此Shared Preferences,现在有AccessToken如果用户撤消应用程序的权限,我尝试后状态,那么它给这个意外事件或错误。

enter image description here

我怎么会知道该用户已撤销的许可,因此我要问的授权?

编辑:我来了解如何处理未经授权的访问,我处理了它。但是这个例外仍然存在。

我解决了这个问题。问题在于,我正在测试用户未授权应用程序时的功能。而且我未经授权使用我在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

这可能听起来很奇怪,但尝试自动设置您的时间/日期更新。根据我以前的经验,这是问题所在。当我设置这个和电话时间同步后,一切工作正常。

那就试试这个: -

// 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