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