Android 在使用Twitter登录后,应用程序返回到相同的活动

Android 在使用Twitter登录后,应用程序返回到相同的活动,android,twitter,Android,Twitter,我正在尝试为我的Android应用程序创建Twitter登录。登录后,我将twitter btn标题从Connect with twitter更改为Disconnect twitter,并写出我的twitter用户名。唯一奇怪的是,如果现在我单击“上一步”退出应用程序,我会返回到以前的位置,这意味着按钮上会显示“再次连接Twitter”,并且不会显示我的Twitter用户名。我已登录,因为如果现在再次单击“上一步”,我将退出应用程序,首先返回Twitter验证页面,当我再次打开应用程序时,会话将

我正在尝试为我的Android应用程序创建Twitter登录。登录后,我将twitter btn标题从Connect with twitter更改为Disconnect twitter,并写出我的twitter用户名。唯一奇怪的是,如果现在我单击“上一步”退出应用程序,我会返回到以前的位置,这意味着按钮上会显示“再次连接Twitter”,并且不会显示我的Twitter用户名。我已登录,因为如果现在再次单击“上一步”,我将退出应用程序,首先返回Twitter验证页面,当我再次打开应用程序时,会话将继续,按钮上显示“断开Twitter”

为什么?

公共类连接任务{

        @Override
        protected void onPostExecute(String result) {       
            Log.i("SIKER", result + "");
            tv_slogan.setText(result);
            btn_signupTW.setText("Disconnect Twitter");
        }

        @Override
        protected void onPreExecute() {

        }

        @Override
        protected String doInBackground(String... params) {

            try {
                accessToken = twitter.getOAuthAccessToken(requestToken, params[0]); 
                Log.e("Twitter OAuth Token1", "> " + accessToken.getToken());

                Editor e = mSharedPreferences.edit();
                e.putString(TwitterConst.PREF_KEY_TOKEN, accessToken.getToken()); 
                e.putString(TwitterConst.PREF_KEY_SECRET, accessToken.getTokenSecret()); 
                e.commit();

                long userID = accessToken.getUserId();
                Log.i("Twitter userID", String.valueOf(userID) + "");
                User user = twitter.showUser(userID);
                twitter_username = user.getName();
            } catch (Exception e) {
                e.printStackTrace();
            }  

            return twitter_username;
        }
    }

}

Twitter刚刚推出Fabric,这是一组SDK,为移动开发者提供了多种服务。其中一个是Twitter工具包,它直接从SDK提供Twitter登录、推文撰写、嵌入式推文和API调用

与其尝试在应用程序中实现此OAuth流,不如通过以下方式使用此SDK登录Twitter:

private void setUpTwitterButton() {
    twitterButton = (TwitterLoginButton) findViewById(R.id.twitter_button);
    twitterButton.setCallback(new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {
            SessionRecorder.recordSessionActive("Login: twitter account active", result.data);
            startThemeChooser();
        }

        @Override
        public void failure(TwitterException exception) {
            Toast.makeText(getApplicationContext(),
                    getResources().getString(R.string.toast_twitter_signin_fail),
                    Toast.LENGTH_SHORT).show();
            Crashlytics.logException(exception);
        }
    });
}
您可以在以下网站上找到更多详细信息:

android应用程序示例 要访问Fabric:Fabric.io

我就是这么做的

在调用SettingsActivity.this.startActivitynew IntentIntent.ACTION_视图Uri.parserequestToken.getAuthenticationURL之前,我将当前活动保存在SharedReferences中 当启动活动出现在每次打开应用程序时打开的主窗口时,我在SharedReferences中检查该变量,如果该变量为真,则打开SettingsActivity并发送验证程序。 在SettingsActivity now中,使用此验证器登录并获取用户数据很容易。 喷溅活动:

if (!isTwitterLoggedInAlready()) {
boolean fromSettingsActivity = mSharedPreferences2.getBoolean(TwitterConst.FROM_SETTINGS, false);
Uri uri = getIntent().getData();
    if (uri != null && uri.toString().startsWith(TwitterConst.CALLBACK_URL)) {
        final String verifier = uri.getQueryParameter(TwitterConst.IEXTRA_OAUTH_VERIFIER);
        if (fromSettingsActivity) {
           Intent intent = new Intent(Activity_Splash.this, SettingsActivity.class);
           intent.putExtra("verifier", verifier);
           startActivity(intent);
           finish();
           return;
        } else {    
           new Connect_Twitter().execute(verifier);
        }
    }
}
设置活动性:

Intent iin = getIntent();
Bundle extras = iin.getExtras();
if(extras != null) {
    String verifier = extras.getString("verifier");
    new Connect_Twitter().execute(verifier);
}
单击“上一步”时,不要忘记重置SharedReferences值:

@Override
public void onBackPressed() {
    mSharedPreferences2 = getSharedPreferences(TwitterConst.FROM_SETTINGS, MODE_PRIVATE);
    SharedPreferences.Editor e = mSharedPreferences2.edit();
    e.remove(TwitterConst.FROM_SETTINGS);
    e.commit();
    super.onBackPressed();    
}
还有一件事

使用当前意图,应用程序将再次打开设置活动,因此您需要单击后退两次。这是Twitter登录的默认行为。要防止出现这种情况,请使用如下意图:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(requestToken.getAuthenticationURL()));
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

谢谢你的广告,但是没有。首先,这并不能回答问题。其次,我注册了,我在等待名单上。你会在将来删除OAuth而优先考虑这种织物吗?
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(requestToken.getAuthenticationURL()));
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();