2012-05-09 18 views
2

这已经非常痛苦。我不知道我在做什么错误的AccessToken,但我试图设置它,然后我调用Twitter4j的updateStatus发布到Twitter。如何在授权成功后将AccessToken发布到Twitter

我尝试了不同的获取AccessToken的方法,我只使用Twitter4J。

AccessToken accessToken = twitter.getOAuthAccessToken(twitter.getOAuthRequestToken(), verifier); 

给出错误:

05-09 12:06:45.776: D/GameName(678): Received authentication challenge is null 

我能够切换到Twitter的浏览器进行授权。我输入我的用户名和密码,按“授权应用程序”。然后浏览器更改为“重定向”回到我的应用程序。我的应用程序出现并繁荣!它崩溃!我的应用程序已经调用onNewIntent。

代码授权做工不错: (Twitter是一个成员变量)

public void twitterAuthorize() 
    { 
     try 
     { 
      twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); 

      RequestToken requestToken = twitter.getOAuthRequestToken(Constants.OAUTH_CALLBACK_URL);       
      startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthorizationURL())), TWITTER_AUTHORIZE_ACTIVITY_RESULT_CODE); 
     } 
     catch (TwitterException e) 
     { 
       Log.d(Globals.sApplicationName, e.getMessage()); 
       e.printStackTrace();     
     }  

    } 

从授权回来后,我得到了符合 “的accessToken的accessToken = ...”,则抛出异常。

@Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 

    Log.d(Globals.sApplicationName, "ENTERED: onNewIntent"); 

    Uri uri = intent.getData(); 
    if (uri != null && uri.toString().startsWith(Constants.OAUTH_CALLBACK_URL)) 
    { 
     Log.d(Globals.sApplicationName, "oAuth: " + uri.toString()); 
     String verifier = uri.getQueryParameter("oauth_verifier"); 

     try { 
      if (verifier != null) 
      { 
       Log.d(Globals.sApplicationName, "Verifier: " + verifier); 


       //Try 1: doesn't work 
       //AccessToken a = new AccessToken(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); 

       //Try 2: doesn't work    
       AccessToken accessToken = twitter.getOAuthAccessToken(twitter.getOAuthRequestToken(), verifier); 

       //Try 3: doesn't work 
       //String token = uri.getQueryParameter("oauth_token");  
       //AccessToken accessToken = new AccessToken(token, verifier); 

       //twitter = new TwitterFactory().getInstance(); 

       twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); 
       twitter.setOAuthAccessToken(accessToken); 

       // create a tweet 
       Date d = new Date(System.currentTimeMillis()); 
       String tweet = "#OAuth working! " + d.toLocaleString(); 

       // send the tweet 
       twitter.updateStatus(tweet); 
      } 
     } catch (Exception e) { 

      Log.d(Globals.sApplicationName, e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 

我上调用堆栈这些错误(我刚刚更换了,所以我把它从这个论坛帖子私人):

05-09 12:06:45.136: D/GameName(678): ENTERED: onNewIntent 
05-09 12:06:45.136: D/GameName(678): oAuth: GameNameTwitterOAuth://callback?oauth_token=<some long string>&oauth_verifier=<some long string> 
05-09 12:06:45.156: D/GameName(678): Verifier: <some long string> 
05-09 12:06:45.747: W/AudioFlinger(32): write blocked for 131 msecs, 825 delayed writes, thread 0xff88 
05-09 12:06:45.776: D/GameName(678): Received authentication challenge is null 
05-09 12:06:45.846: W/System.err(678): Received authentication challenge is nullRelevant discussions can be on the Internet at: 
05-09 12:06:45.846: W/System.err(678): http://www.google.co.jp/search?q=bfb606ed or 
05-09 12:06:45.856: W/System.err(678): http://www.google.co.jp/search?q=72d7e395 
05-09 12:06:45.856: W/System.err(678): TwitterException{exceptionCode=[bfb606ed-72d7e395 e2110e48-e8248ad2], statusCode=-1, retryAfter=-1, rateLimitStatus=null, featureSpecificRateLimitStatus=null, version=2.2.5} 
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:200) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:121) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:104) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:276) 
05-09 12:06:45.856: W/System.err(678): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:269) 
05-09 12:06:45.856: W/System.err(678): at com.mnecreations.panarchyfling.PanarchyFling.onNewIntent(PanarchyFling.java:602) 
05-09 12:06:45.869: W/System.err(678): at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1122) 
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:1812) 
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.performNewIntents(ActivityThread.java:1825) 
05-09 12:06:45.869: W/System.err(678): at android.app.ActivityThread.handleNewIntent(ActivityThread.java:1834) 
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread.access$2300(ActivityThread.java:123) 
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1040) 
05-09 12:06:45.876: W/System.err(678): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-09 12:06:45.876: W/System.err(678): at android.os.Looper.loop(Looper.java:126) 
05-09 12:06:45.876: W/System.err(678): at android.app.ActivityThread.main(ActivityThread.java:3997) 
05-09 12:06:45.876: W/System.err(678): at java.lang.reflect.Method.invokeNative(Native Method) 
05-09 12:06:45.876: W/System.err(678): at java.lang.reflect.Method.invoke(Method.java:491) 
05-09 12:06:45.896: W/System.err(678): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
05-09 12:06:45.896: W/System.err(678): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
05-09 12:06:45.896: W/System.err(678): at dalvik.system.NativeStart.main(Native Method) 
05-09 12:06:45.896: W/System.err(678): Caused by: java.io.IOException: Received authentication challenge is null 
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:1176) 
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:1118) 
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1044) 
05-09 12:06:45.896: W/System.err(678): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:736) 
05-09 12:06:45.906: W/System.err(678): at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:35) 
05-09 12:06:45.906: W/System.err(678): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:164) 
05-09 12:06:45.906: W/System.err(678): ... 21 more 
05-09 12:06:45.906: D/GameName(678): -------------------------------------------- 
05-09 12:06:45.906: D/GameName(678): Restart activity GameName 

请指教,这实在是令人困惑的。我查看了其他帖子,他们提到了有关时间戳的内容,但这对我来说没有意义。

谢谢

回答

0

我想你产生具有无关,与你验证一个新的请求令牌。

尝试保存Twitter的对象和令牌您请求的第一次尝试做这样的事情:

  1. 列表项
  2. 从Twitter工厂consumerkey
  3. 获取Twitter的对象和consumerkeysecret
  4. 得到requesttoken(twitter.getrequesttoken())
  5. 问requesttoken的验证网址
  6. 保存twitterobject和requesttoken
  7. 去Twitter和验证
  8. 通过回调回报和检索验证
  9. 得到保存twitterobject和requesttoken
  10. 那些保存twitterobject和requesttoken应与验证一起使用来验证用户....

然后您被认证