验证Twitter应用程序是否已登录Android
我正在开发的应用程序启动了官方的twitter应用程序new post屏幕,用户可以发布一条tweet,并在意图中添加一些额外的文本。我已经很好地工作了,但是如果用户没有使用twitter应用程序登录,事情会变得有点混乱。应用程序启动,但用户必须登录,一旦用户登录后,会显示正常的twitter屏幕,如果他们使用“后退”按钮返回到我的应用程序,新的帖子屏幕实际上会在点击twitter提要屏幕后出现验证Twitter应用程序是否已登录Android,android,android-intent,android-twitter,Android,Android Intent,Android Twitter,我正在开发的应用程序启动了官方的twitter应用程序new post屏幕,用户可以发布一条tweet,并在意图中添加一些额外的文本。我已经很好地工作了,但是如果用户没有使用twitter应用程序登录,事情会变得有点混乱。应用程序启动,但用户必须登录,一旦用户登录后,会显示正常的twitter屏幕,如果他们使用“后退”按钮返回到我的应用程序,新的帖子屏幕实际上会在点击twitter提要屏幕后出现 在尝试运行intent之前,是否有任何方法可以检查用户是否实际登录到twitter应用程序?尝试此函
在尝试运行intent之前,是否有任何方法可以检查用户是否实际登录到twitter应用程序?尝试此函数,该函数将返回true或false True:已登录
错误:未登录
twitter.getAuthorization()
函数将在未登录时向您抛出一个错误,通过处理该错误,您可以找到用户以前是否登录过
public static boolean isAuthenticated(SharedPreferences prefs) {
String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
AccessToken a = new AccessToken(token,secret);
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
try {
twitter.getAuthorization();
return true;
} catch (Exception e) {
return false;
}
}
我认为这是Twitter应用程序内部的问题,你不能测试它 另一方面,您可以通过“不再显示此对话框”复选框为用户提供一个对话框,警告用户此问题,这样他就可以得到建议,并可以永远关闭该对话框。您甚至可以在此对话框中提供在Twitter应用程序内进行身份验证的说明。我正在使用twitter4j lib。 在这里我检查用户名。如果用户名为空,则没有用户登录,否则我将获得用户名。此用户名在我存储在共享首选项中的访问令牌中可用 username=mySession.getUsername()强> username=(username.equals(“”)?“未登录”:用户名强> mySession的代码:-
public class MySession {
private SharedPreferences sharedPref;
private Editor editor;
private static final String TWEET_AUTH_KEY = "auth_key";
private static final String TWEET_AUTH_SECRET_KEY = "auth_secret_key";
private static final String TWEET_USER_NAME = "user_name";
private static final String SHARED = "Twitter_Preferences";
public TwitterSession(Context context) {
sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE);
editor = sharedPref.edit();
}
public void storeAccessToken(AccessToken accessToken, String username) {
editor.putString(TWEET_AUTH_KEY, accessToken.getToken());
editor.putString(TWEET_AUTH_SECRET_KEY, accessToken.getTokenSecret());
editor.putString(TWEET_USER_NAME, username);
editor.commit();
}
public void resetAccessToken() {
editor.putString(TWEET_AUTH_KEY, null);
editor.putString(TWEET_AUTH_SECRET_KEY, null);
editor.putString(TWEET_USER_NAME, null);
editor.commit();
}
public String getUsername() {
return sharedPref.getString(TWEET_USER_NAME, "");
}
public AccessToken getAccessToken() {
String token = sharedPref.getString(TWEET_AUTH_KEY, null);
String tokenSecret = sharedPref.getString(TWEET_AUTH_SECRET_KEY, null);
if (token != null && tokenSecret != null)
return new AccessToken(token, tokenSecret);
else
return null;
}
}
希望这将对您有所帮助。只需在您的活动中的oncreate()中添加这些行即可
final Session activeSession = Twitter.getInstance().core.getSessionManager().getActiveSession();
if (activeSession != null){
//do someting
}
这个问题清楚地表明它打开了官方应用程序。它没有使用twitter api。我相信这是twitter应用程序中的一个bug。新的post屏幕应在成功登录后出现(基于收到的初始意图)。