2017-01-14 26 views
1

我使用TwitterKit V2.3.0的Android Twitter的工具包碰撞時的身份驗證後再次取消

com.twitter.sdk.android:twitter:[email protected] 

這是我如何調用Twitter的認證使用TwitterAuthClient

 if (mTwitterAuthClient == null) { 
      TwitterAuthConfig authConfig = new TwitterAuthConfig(getString(R.string.twitter_api_key), 
        getString(R.string.twitter_api_secret)); 
      Fabric.with(getActivity(), new Twitter(authConfig)); 
     } 
     mTwitterAuthClient = new TwitterAuthClient(); 
     mTwitterAuthClient.authorize(getActivity(), new Callback<TwitterSession>() { 
      @Override 
      public void success(Result<TwitterSession> result) { 
       handleTwitterSession(result.data); 
      } 

      @Override 
      public void failure(TwitterException exception) { 
      } 
     }); 

如果我按下登錄按鈕,然後按回退或取消按鈕關閉認證屏幕,然後再次按下登錄按鈕,它會拋出一個沒有顯示認證屏幕的異常:

01-13 21:34:40.689 10842-10842/com.ihnel.mclearning W/Twitter: Authorize already in progress 
01-13 21:34:40.689 10842-10842/com.ihnel.mclearning E/Twitter: Authorization completed with an error 
                   com.twitter.sdk.android.core.TwitterAuthException: Authorize failed. 
                    at com.twitter.sdk.android.core.identity.TwitterAuthClient.handleAuthorize(TwitterAuthClient.java:110) 
                    at com.twitter.sdk.android.core.identity.TwitterAuthClient.authorize(TwitterAuthClient.java:101) 
                    at com.binh.auth.fragment.LoginFragment.loginWithTwitter(LoginFragment.java:157) 
                    at com.binh.auth.databinding.AuthFragmentLoginBinding$OnClickListenerImpl2.onClick(AuthFragmentLoginBinding.java:273) 
                    at android.view.View.performClick(View.java:5198) 
                    at android.view.View$PerformClick.run(View.java:21147) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我檢查了Twitter核心源代碼,它保留了一個靜態實例AuthState,儘管我重新創建了TwitterAuthClient的新實例,但永遠不會續訂。 有人知道如何繞過這個異常嗎?

回答

3

發現了類似的線程在Twitter社區:https://twittercommunity.com/t/getting-authorization-error-when-cancelling-from-twitter-authorization-using-fabric-sdk/31341/10

,當我在下面我的活動實現onActivityResult方法了這個問題:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     final TwitterAuthClient twitterAuthClient = new TwitterAuthClient(); 
     if(twitterAuthClient.getRequestCode()==requestCode) { 
      twitterAuthClient.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

但是,這就像他們所說的一種變通方法。我希望我們能得到最終的更好的解決方案。