1

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

在更新状态之前,我检查Shared Preferences了 stored AccessToken。如果可用,即用户已登录,则更新状态,否则用户未登录,因此显示 Twitter 页面供用户登录。

问题是,如果用户曾经登录过因此AccessTokenShared Preferences现在已经登录,如果用户撤销了应用程序的权限并且我尝试发布 status,那么它会给出这个异常或错误。

在此处输入图像描述

我怎么知道用户已经撤销了权限,因此我需要请求授权?

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

4

2 回答 2

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() + ")";
于 2013-07-08T13:06:47.867 回答
0

我解决了这个问题。问题是我正在测试用户未授权应用程序时它会做什么。我从 twitter 帐户中授权了该应用程序,该帐户用于在 dev.twitter.com 上创建应用程序。这样做会使我存储在共享首选项中的访问令牌无效,因此当我从共享首选项中获取并使用它时,我的代码中会出现异常。

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

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();
    }
}
于 2013-07-09T06:33:59.743 回答