2013-12-02 5 views
0

что такое обычный способ работы с этим типом аутентификации twitter. Я не думаю, что я делаю это правильно, прямо сейчас у меня есть эта активность:twitter4j OAuth Android

Таким образом, пользователь для того, чтобы подтвердить подлинность приложения они должны получить штифт, который они должны получить, нажав на кнопке Pin.

, который имеет этот код:

@ 
Override 
protected String doInBackground(Void...params) { 

    String s = null; 

    twitter = TwitterFactory.getSingleton(); 
    twitter.setOAuthConsumer("XXXX", "XXXXX"); 




    try { 
     requestToken = twitter.getOAuthRequestToken(); 

     s = requestToken.getAuthorizationURL(); 

    } catch (TwitterException e) { 



     e.printStackTrace(); 
    } 




    return s; 
} 

@ 
Override 
protected void onPostExecute(String url) { 


    Intent intent = new Intent(AuthenticateActivity.this, Oauth_web_view.class); 
    intent.putExtra("url", url); 
    startActivity(intent); 




} 
} 

, который принимает их на другой вид деятельности, который является просто WebView и позволяет им получить свой палец, после того, что они вводят их контактный, они должны представить палец, который он нажмет отправьте PIN-код, есть этот код.

class AddUserCreds extends AsyncTask < Void, String, String > { 

    @ 
    Override 
    protected String doInBackground(Void...urls) { 


     //String url = urls[0]; 




     String pin = txtPin.getText().toString(); 
     System.out.println(pin); 

     // try{ 
     // if(pin.length() > 0){ 
     try { 
      accessToken = twitter.getOAuthAccessToken(requestToken, pin); 

      // Shared Preferences 
      Editor e = mSharedPreferences.edit(); 

      // After getting access token, access token secret 
      // store them in application preferences 
      e.putString("PREF_KEY_OAUTH_TOKEN", accessToken.toString()); 
      // Store login status - true 
      e.putBoolean("PREF_KEY_TWITTER_LOGIN", true); 
      e.commit(); // save changes 

      Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); 
     } catch (TwitterException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 




     // } 
     // } catch (TwitterException te) { 
     // if(401 == te.getStatusCode()){ 
     // // System.out.println("Unable to get the access token."); 
     // }else{ 
     //  te.printStackTrace(); 
     // } 
     // } 
     return "done"; 


     // 




    } 


    @ 
    Override 
    protected void onPostExecute(String url) { 




     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(AuthenticateActivity.this); 

     alertDialogBuilder.setMessage("You've been authenticated" + url); 

     alertDialogBuilder.show(); 




    } 

он работал один раз, и он добавил свой твиттер аккаунт Дев на фальшивый счет, я сделал, но теперь, если я запускаю его снова ломается, потому что это уже проверка подлинности. Есть ли способ проверить, если я уже прошел проверку подлинности? так что им не нужно проходить этот процесс? Есть ли более упорядоченный процесс получения подлинности?

ответ

1

Что я делаю, это сначала прочитать auth toekn/secret из настроек (которые я сохранил во время первой проверки подлинности, как вы уже это сделали), и если я увижу, что она была сохранена, я использую ее вместо того, чтобы выполнять дополнительную auth попытка. Ниже приведен фрагмент моего кода, надеюсь, что это поможет:

 String authToken = prefs.getString(PREF_TWITTER_ACCESS_TOKEN, null); 
     String authTokenSecret = prefs.getString(PREF_TWITTER_ACCESS_TOKEN_SECRET, null); 
     if (authToekn == null) 
     { 
      //... perform auth 
     } 
     else //we're ready to go 
     { 
      ConfigurationBuilder cb = new ConfigurationBuilder(); 
      cb.setDebugEnabled(true) 
      .setOAuthConsumerKey(APIKEY) 
      .setOAuthConsumerSecret(APISECRET) 
      .setOAuthAccessToken(authToken) 
      .setOAuthAccessTokenSecret(authTokenSecret); 
      twitterConnection = new TwitterFactory(cb.build()).getInstance(); 
     } 
Смежные вопросы