2011-12-18 5 views
1

Twitter4jでOAuthを実行するのに荒い時間があります。この前に、私は#3255153と401エラーで詳細な問題を抱えていましたが、最終的にそれらを修正し、問題を解決するのがより難しくなりました。Twitter4j OAuthコールバックは成功しますが、テストツイートは失敗します

Twitterアプリケーションの承認ページがブラウザで起動し、ログインして自分のアカウントのアプリケーションを承認します。その後、アプリケーションにリダイレクトされ、何も起こりません。ビューは、認証ページを起動する前とまったく同じです。

正常に動作しているかどうかを確認するには、onResumeまたはonNewIntent(下に表示)のいずれかで、「Twitterに正常にログイン」というメッセージをトーストするように設定しています。このエントリはLogCatに表示として成功したコールバックURLは、しかし、受信された:

12-18 09:25:50.426: I/ActivityManager(186): Starting: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=snapp://twitter?oauth_token=tokenhere&oauth_verifier=verifierhere cmp=com.infini_servers.snapp/.SnappActivity } from pid 7853 

はここで(もonResumeの仮想クローンを持っている)私のonNewIntentです:

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

     Uri uri = intent.getData(); 
     if (uri != null && uri.toString().startsWith(CALLBACKURL)) 
     { 
      Toast.makeText(getBaseContext(), "Login to twitter successful!", Toast.LENGTH_LONG); 
      String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 
      try 
      { 
       provider.retrieveAccessToken(consumer, verifier); 

       AccessToken accessToken = new AccessToken(consumer.getToken(), 
         consumer.getTokenSecret()); 
       twitter.setOAuthConsumer(consumerKey, consumerSecret); 
       twitter.setOAuthAccessToken(accessToken); 
       String tweet = "Test"; 
       twitter.updateStatus(tweet); 
       Toast.makeText(getBaseContext(), "Tweet Successful!", Toast.LENGTH_LONG); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG); 
      } 
     }  
    } 

そして、私の関連ビットマニフェスト:私は最近、Twitter4jで遊んで、あなたが経験しているのと同様に聞こえるいくつかの問題を抱えてきた

<activity 
      android:label="@string/app_name" 
      android:name=".SnappLaunch" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      </activity> 
     <activity 
      android:label="@string/app_name" 
      android:name=".SnappActivity" 
      android:launchMode="singleInstance" > 
      <intent-filter > 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="snapp" android:host="twitter" /> 
      </intent-filter> 
     </activity> 
+0

私は同じ問題を抱えていますを参照してください。あなたの問題の解決策を見つけることができましたか? – Dilberted

答えて

0

。あなたが投稿したコードで何か間違ったことはありませんが、getOauthRequestTokenに渡しているコールバックURLは何ですか?私はこれにいくつか問題がありました。あなたのCALLBACKURLを "snapp:// twitter"に設定する必要があると思います。コロンが必要であることに注意してください。

問題が解決しない場合、私はあなたがアンドロイドを削除してみてくださいお勧め:

<data android:scheme="snapp" /> 

、その後で:マニフェストの行からホスト:ので、あなたがして

<data android:scheme="snapp" android:host="twitter" /> 

左ですあなたがgetOauthRequestTokenを呼び出すコードでは、値 "snapp:///"を渡します。これは基本的に私が最初にやったことです。

これがうまくいくならば、android:host = "twitter"を戻してから、getOauthRequestTokenに渡された値を変更してみてください。

onNewIntentがまったく呼び出されていない場合、つまり、uri.toString()、startsWith(CALLBACKURL)のテストをパスしていないことがわかりました。いくつかログインしたり、デバッガにブレークポイントを追加したりすることができます。

0

Toast.makeText(getBaseContext(), "Login to twitter successful!", Toast.LENGTH_LONG);

あなたはトーストを作りたいとき ')(ショー' を呼び出すことを忘れないでください。

0

あなたのonResume()メソッドのコードをasynctaskの内部に入れます。そのうまく動作します。

はそのサンプル、

class TwitterLogin extends AsyncTask<String, String, String> 
    { 

     @Override 
     protected String doInBackground(String... params) 
     { 
      // TODO Auto-generated method stub 

      Uri uri = getIntent().getData();     
      if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) 
      { 
       String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); 
       try 
       { 
        AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier); 
        // Shared Preferences 
        Editor e = loginPrefs.edit(); 
        e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); 
        e.putString(PREF_KEY_OAUTH_SECRET,accessToken.getTokenSecret()); 
        e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); 
        e.commit(); 

        Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); 


        long userID = accessToken.getUserId(); 
        User user = twitter.showUser(userID); 
        String username = user.getName(); 
        Log.e("UserID: ", "userID: "+userID+""+username); 

        Log.v("Welcome:","Thanks:"+Html.fromHtml("<b>Welcome " + username + "</b>")); 
       } 
       catch (Exception e) 
       { 
        Log.e("Twitter Login Error", "> " + e.getMessage()); 
       } 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

     } 

     @Override 
     protected void onPreExecute() 
     { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 

     } 
    } 
関連する問題