2014-01-11 38 views
2

我使用twitter4j获取用户令牌和秘密。 我在登录后应用程序重定向到我的应用程序时遇到问题。浏览器停留在前台,活动永远不会恢复。Twitter4j无法在登录后重定向回应用程序

这里是清单中的活性声明:

<activity 
     android:name=".TwitterActivity" 
     android:screenOrientation="portrait" > 
     <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="myapp" /> 
     </intent-filter> 
    </activity> 

我已经把这些常量:

private static final String TWITTER_CALLBACK_URL = "myapp:///"; 
private static final String TWITTER_OAUTH_VERIFIER_URL = "oauth_verifier"; 

当登录按钮,用户点击:

ConfigurationBuilder configBuilder = new ConfigurationBuilder(); 
    configBuilder.setOAuthConsumerKey(getString(R.string.twitter_consumer_key)); 
    configBuilder.setOAuthConsumerSecret(getString(R.string.twitter_consumer_secret)); 
    mTwitter = new TwitterFactory(configBuilder.build()).getInstance(); 
    mProgressDialog.show(); 
    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       mTwitterRequestToken = mTwitter.getOAuthRequestToken(TWITTER_CALLBACK_URL); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      mProgressDialog.dismiss(); 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(mTwitterRequestToken.getAuthenticationURL()))); 
     } 
    }.execute(); 

onResume方法,我检查意图并检索令牌和秘密

Uri uri = getIntent().getData(); 
    if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { 
     String verifier = uri.getQueryParameter(TWITTER_OAUTH_VERIFIER_URL); 
     try { 
      mTwitterToken = mTwitter.getOAuthAccessToken(mTwitterRequestToken, verifier); 
      Toast.makeText(this, "token: " + mTwitterToken.getToken() + "\nSecret: " + mTwitterToken.getTokenSecret(), Toast.LENGTH_SHORT).show(); 
     } catch (TwitterException e) { 
      e.printStackTrace(); 
     } 
    } 

回答

0

尝试处理您的回调onCreate()而不是onResume()

0

尝试

  <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 

      <data 
       android:host="callback" 
       android:scheme="x-oauthflow-twitter" /> 
     </intent-filter> 
</activity> 

String OAUTH_CALLBACK_SCHEME = "x-oauthflow-twitter"; 
String OAUTH_CALLBACK_HOST = "callback"; 
String callBack = OAUTH_CALLBACK_SCHEME+ "://" + OAUTH_CALLBACK_HOST; 
twitter = new TwitterFactory().getInstance(); 
twitter.setOAuthConsumer(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET); 
requestToken = twitter.getOAuthRequestToken(callBack); 

现在覆盖onNewIntent方法

public void onNewIntent(Intent intent) { 
     SharedPreferences prefs = activity.getSharedPreferences(Common.TAG, 
       Context.MODE_PRIVATE); 
     String callBackScheme = OAUTH_CALLBACK_SCHEME; 
     final Uri uri = intent.getData(); 
     if (uri != null && uri.getScheme().equals(callBackScheme)) { 
      new RetrieveAccessTokenTask(prefs).execute(uri); 
     } 
    }