验证Twitter应用程序在Android上是否已登录

7
我正在开发的应用程序可以启动官方Twitter应用程序的新建帖子屏幕,以便用户可以在意图中添加一些额外的文本来发布推文。我已经很好地完成了这个功能,但是如果用户没有使用Twitter应用程序登录,则会出现一些混乱。应用程序会启动,但用户必须登录后才能看到正常的Twitter屏幕,如果他们使用返回按钮回到我的应用程序,则在Twitter动态消息屏幕上点击返回后,实际上会出现新的发布屏幕。
有没有办法在尝试运行意图之前检查用户是否已登录Twitter应用程序?

2
我认为这是Twitter应用程序中的一个错误。在成功登录后(基于接收到的初始意图),新的帖子屏幕应该出现。 - Sherif elKhatib
4个回答

3
我正在使用twitter4j库。 在这里,我检查用户名。如果用户名为null,则没有用户登录,否则我获取用户名。此用户名可在访问令牌中使用,我将其存储在共享首选项中。 username = mySession.getUsername(); username =(username.equals("")?"未登录":username;
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;
    }
}

希望这能对您有所帮助。

3
我认为这是Twitter应用程序内部问题,您无法对其进行测试。
另一方面,您可以提供一个对话框,警告用户此事,并带有“不再显示此对话框”复选框,以便他得到建议并可以永久地忽略该对话框。您甚至可以在此对话框中提供在Twitter应用程序内进行身份验证的说明。

0

只需在您的活动的oncreate()中添加这些行

final Session activeSession = Twitter.getInstance().core.getSessionManager().getActiveSession();

if (activeSession != null){
           //do someting
        }

0
尝试使用此函数,该函数将返回true或false。 True:已登录
False:未登录

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 API。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接