7

我正在开发的应用程序启动官方推特应用程序新帖子屏幕,因此用户可以发布推文,并在意图中添加一些额外的文本。我已经很好地完成了这项工作,但是如果用户没有使用 twitter 应用程序登录,事情就会变得有些混乱。该应用程序启动但用户必须登录,一旦他们完成正常的推特屏幕出现,如果他们使用后退按钮返回我的应用程序,新的帖子屏幕实际上会在回击推特提要屏幕后出现。

有什么方法可以在尝试运行意图之前检查用户是否实际登录到 twitter 应用程序?

4

4 回答 4

3

我正在使用 twitter4j 库。在这里,我检查用户名。如果用户名为空,则没有用户登录,否则我得到用户名。此用户名在我存储在共享首选项中的访问令牌中可用。

用户名= mySession.getUsername();

用户名 = (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;
    }
}

希望这会帮助你。

于 2012-10-31T12:03:45.707 回答
3

I think it's a Twitter app internal issue and you can't test for it.

On the other hand you could provide a Dialog warning the user for this matter with a "Do not show this dialog anymore" checkbox so he gets advised and can dimiss forever the Dialog. You could even provide instructions to authenticate insside the Twitter app in this Dialog.

于 2012-10-31T09:30:38.053 回答
0

试试这个函数,它会反过来返回真或假。

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;
      }
}
于 2012-03-01T10:53:42.477 回答
0

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

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

if (activeSession != null){
           //do someting
        }
于 2016-08-26T04:41:38.150 回答