Android-twitter4j异常 - 未发现身份验证问题

时间:2013-07-08 05:15:01

标签: android twitter twitter4j android-twitter

我已将Twitter集成到我的应用程序中(使用OAuthtwitter4j库)代表用户更新用户帐户的状态。这很好用。

在更新状态之前,我会在Shared Preferences核对已存储的AccessToken。如果它可用,即用户登录,则更新状态,否则用户未登录,因此显示用户登录的推特页面。

问题是,如果用户已登录,因此AccessToken 中有Shared Preferences现在,如果用户撤消应用程序的权限,我尝试发布状态,然后它会发出此异常或错误。

enter image description here

我如何知道用户已撤销权限,因此我需要申请授权?

编辑:我知道如何处理未经授权的访问,我处理了它。但是仍然会抛出这个异常。

2 个答案:

答案 0 :(得分: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() + ")";

答案 1 :(得分:0)

我解决了这个问题。问题是我正在测试用户取消对应用程序进行授权时的操作。我从twitter帐户中未经授权申请,我曾在dev.twitter.com上创建应用程序。这样做会使我的accesstoken无效,这个存储在共享首选项中,因此当我从共享首选项中获取并使用它时,我的代码中,我曾经得到异常。

解决方案是在dev.twitter.com上创建的应用程序中重新创建一个accessstoken。在我的代码中,我添加了这个条件:

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();
    }
}