【问题标题】:Android-twitter4j Exception - no authentication challenges foundAndroid-twitter4j 异常 - 未发现身份验证挑战
【发布时间】:2013-07-05 08:49:54
【问题描述】:

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

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

问题在于,如果用户曾经登录过,因此我在Shared Preferences中有AccessToken,而现在,如果用户撤销了应用程序的权限我尝试发布状态,然后它给出了这个异常或错误。

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

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

【问题讨论】:

    标签: android twitter twitter4j android-twitter


    【解决方案1】:

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

    然后试试这个:-

    // 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() + ")";
    

    【讨论】:

      【解决方案2】:

      我解决了这个问题。问题是我正在测试用户未授权应用程序时它会做什么。我从 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();
          }
      }
      

      【讨论】:

      • @BlaShadow 是的,这是提出问题的问题的正确答案。这才是最重要的。
      • 这不是 twitter4j 的错误/问题是你的错误。这对任何人有什么帮助?
      • 有很多关于 SO 的问题是开发人员的小错误造成的。这有助于其他犯同样错误的开发人员。请注意,任何问题的接受答案仅表示它解决了提问者的问题。它并没有说它会解决其他人的问题。
      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2013-09-05
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多