2012-03-01 14 views
7

Moja aplikacja, którą rozwijam, uruchamia nowy ekran posta na oficjalnym Twitterze, dzięki czemu użytkownik może opublikować tweeta z dodatkowym tekstem dodanym w intencji. Mam to ładnie działa, jednak rzeczy się trochę zagmatwane, jeśli użytkownik nie jest zalogowany w aplikacji Twitter. Aplikacja uruchamia się, ale użytkownik musi się zalogować, gdy zrobi się, że pojawi się normalny ekran Twittera, jeśli użyją przycisku Wstecz, aby wrócić do mojej aplikacji, ekran nowego postu rzeczywiście pojawia się po uderzeniu w ekran kanału twitter.Sprawdzanie, czy aplikacja na Twitterze jest zalogowana na Androidzie

Czy jest jakiś sposób sprawdzić, czy użytkownik faktycznie jest zalogowany do aplikacji Twitter przed próbą uruchomienia intencji?

+2

wierzę, że to błąd w aplikacji Twitter. Nowy ekran postu powinien pojawić się po pomyślnym zalogowaniu (w oparciu o otrzymane początkowe intencje). –

Odpowiedz

0

Wypróbuj tę funkcję, która z kolei zwróci wartość true lub false.

prawda: Zalogowany
Fałsz: Nie zalogowany

twitter.getAuthorization() funkcji będzie rzucać się błąd, jeśli to nie jest zalogowany obsługując to cię znajdzie, czy użytkownik wcześniej zalogowany lub nie .

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; 
     } 
} 
+0

Pytanie wyraźnie stwierdza, że ​​otwiera oficjalną aplikację. Nie używa api twittera. – Phil

3

Myślę, że to wewnętrzny problem z aplikacją na Twitterze i nie można go przetestować.

Z drugiej strony można podać okno dialogowe ostrzegające użytkownika w tej sprawie za pomocą pola wyboru "Nie pokazuj więcej tego okna dialogowego", dzięki czemu zostanie poinformowany i może na zawsze zamknąć okno dialogowe. Można nawet podać instrukcje uwierzytelniania aplikacji serwisu Twitter w tym oknie dialogowym.

3

Używam biblioteki twitter4j. Tutaj sprawdzam nazwę użytkownika. Jeśli nazwa użytkownika ma wartość null, oznacza to, że użytkownik nie jest zalogowany, w przeciwnym razie otrzymam nazwę użytkownika. Ta nazwa użytkownika jest dostępna w tokenie dostępu, który przechowuję we współużytkowanej preferencji.

username = mySession.getUsername();

username = (username.equals (""))? "Nie zalogowany": nazwa użytkownika; Kod

dla 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; 
    } 
} 

Nadzieja to pomoże.

0

tylko dodać te linie w onCreate (ur) w działalności

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

if (activeSession != null){ 
      //do someting 
     } 
Powiązane problemy