代码之家  ›  专栏  ›  技术社区  ›  lacas

Android twitter oauth错误-过期令牌请求

  •  0
  • lacas  · 技术社区  · 15 年前
    private static String requestToken;
     private static String requestSecret;
    
     public static void loginTwitter(Context mycontext) {
    
      if (savedToken==null) {
       try {
        consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
                  "https://api.twitter.com/oauth/access_token",
                  "https://api.twitter.com/oauth/authorize");
    
        String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
        Toast.makeText(mycontext, "login to twitter", Toast.LENGTH_LONG).show();
    
        mycontext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
    
       } catch (Exception e) {
        Log.e(APP, e.getMessage());
       }
      } else {
    
       tweetShareURL();
      }
     }
    
     private static void tweetShareURL() {
    
      twitter = new TwitterFactory().getInstance();
      twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
      twitter.setOAuthAccessToken(savedToken);
    
      // create a tweet
      String tweet = title+" " + url;
    
      try {
       twitter.updateStatus(tweet);
      } catch (TwitterException e) {
       Log.e(APP, "2 "+e.getMessage());
    
      } finally {
       utils.hint("tweet sent!");
      }
    
    
     }
    
     static AccessToken savedToken=null;
    
     @Override
     protected void onNewIntent(Intent intent) {
      super.onNewIntent(intent);
    
      Uri uri = intent.getData();
      Log.e("URI", ""+uri.toString());
    
      if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
    
       String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
       Log.e("verifier", ""+verifier);
    
       try {
        requestToken  = consumer.getToken();
        requestSecret = consumer.getConsumerSecret();
    
        consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        consumer.setTokenWithSecret(requestToken, requestSecret);
    
        provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
                  "https://api.twitter.com/oauth/access_token",
                  "https://api.twitter.com/oauth/authorize");
        provider.setOAuth10a(true);
    
        // TODO: you might want to store token and token_secret in you app settings!!!!!!!!
        savedToken = new AccessToken(requestToken, requestSecret);
    
        provider.retrieveAccessToken(consumer, verifier);
    
        Log.e(APP, "2");
    
        tweetShareURL();
    
       } catch (Exception e) {
        Log.e(APP, "1 "+e.getMessage());
       }
    
      }
     }
    

    总是这样:

    11-02 22:36:39.526:错误/OAUTH(424):2 401:身份验证凭据丢失或不正确。 11-02 22:36:39.526:ERROR/OAUTH(424):{“ERROR”:“Invalid\/expired Token”,“request”:“\/1\/statuses”\/更新.json"}

    为什么?

    1 回复  |  直到 15 年前
        1
  •  0
  •   j0k gauthamp    13 年前

    "\/1\/statuses\/update.json" 当你把东西放在引号里时,它把引号里的所有东西都作为字符串发送。所以逃逸的角色 \ 也许是在妨碍你?