2012-03-12 11 views
11

Desidero recuperare il token tramite le classi di Account Manager. Ecco un esempio di codice che funziona per Twitter ma non per facebook plz help me.Come recuperare Twitter e Facebook Autenticazione e token tramite le classi Account Manager di Android

public class AccountManagerActivity extends Activity { 

    AccountManager mAccountManager; 
    AccountManagerFuture<Bundle> c; 
    String token; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mAccountManager = AccountManager.get(this); 
     Account[] acc = mAccountManager.getAccounts(); 
     for (int i = 1; i < acc.length; i++) { 
      System.out.println("Account name==" + acc[i].name); 
      System.out.println("Account Type==" + acc[i].type); 
     } 
     AuthenticatorDescription[] ad = mAccountManager.getAuthenticatorTypes(); 
     for (int i = 1; i < ad.length; i++) { 
      System.out.println("AuthenticatorDescription==" + ad[i].type); 
     } 


     tokenForTwitter(); 
     tokenForFacebook(); 
    } 

    private void tokenForFacebook() { 
     Account[] accts = mAccountManager 
       .getAccountsByType("com.facebook.auth.login"); 
     int i = 0; 
     if (accts.length > 0) { 
      System.out.println("here"); 
      Account acct = accts[0]; 
      c = mAccountManager.getAuthToken(acct, 
        "com.facebook.auth.token" , null, 
        this, new AccountManagerCallback<Bundle>() { 

         @Override 
         public void run(AccountManagerFuture<Bundle> arg0) { 
          try { 
           Bundle b = arg0.getResult(); 
           System.out.println("Facebook THIS AUHTOKEN: " 
             + b.getString(AccountManager.KEY_AUTHTOKEN)); 
           Intent launch = (Intent) b 
             .get(AccountManager.KEY_INTENT); 
           if (launch != null) { 
            startActivityForResult(launch, 0); 
            return; 
           } 
          } catch (Exception e) { 
           System.out.println("[email protected]"); 
          } 
         } 
        }, null); 

      c = mAccountManager.getAuthToken(acct, 
        "com.facebook.auth.token.secret" /* 
                  * what goes here 
                  */, null, this, 
        new AccountManagerCallback<Bundle>() { 

         @Override 
         public void run(AccountManagerFuture<Bundle> arg0) { 
          try { 
           Bundle b = arg0.getResult(); 
           System.out.println("Facebook THIS AUHTOKEN: " 
             + b.getString(AccountManager.KEY_AUTHTOKEN)); 
           Intent launch = (Intent) b 
             .get(AccountManager.KEY_INTENT); 
           if (launch != null) { 
            startActivityForResult(launch, 0); 
            return; 
           } 
          } catch (Exception e) { 
           System.out.println("[email protected]"); 
          } 
         } 
        }, null); 

      // mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0); 

      i++; 
     } 

    } 

    public void tokenForTwitter() { 
     Account[] accts = mAccountManager 
       .getAccountsByType("com.twitter.android.auth.login"); 
     int i = 0; 
     if (accts.length > 0) { 
      System.out.println("here"); 
      Account acct = accts[0]; 
      c = mAccountManager.getAuthToken(acct, 
        "com.twitter.android.oauth.token" /* what goes here */, null, 
        this, new AccountManagerCallback<Bundle>() { 

         @Override 
         public void run(AccountManagerFuture<Bundle> arg0) { 
          try { 
           Bundle b = arg0.getResult(); 
           System.out.println("twitter THIS AUHTOKEN: " 
             + b.getString(AccountManager.KEY_AUTHTOKEN)); 
           Intent launch = (Intent) b 
             .get(AccountManager.KEY_INTENT); 
           if (launch != null) { 
            startActivityForResult(launch, 0); 
            return; 
           } 
          } catch (Exception e) { 
           System.out.println("[email protected]"); 
          } 
         } 
        }, null); 

      c = mAccountManager.getAuthToken(acct, 
        "com.twitter.android.oauth.token.secret" /* 
                  * what goes here 
                  */, null, this, 
        new AccountManagerCallback<Bundle>() { 

         @Override 
         public void run(AccountManagerFuture<Bundle> arg0) { 
          try { 
           Bundle b = arg0.getResult(); 
           System.out.println("twitter THIS AUHTOKEN: " 
             + b.getString(AccountManager.KEY_AUTHTOKEN)); 
           Intent launch = (Intent) b 
             .get(AccountManager.KEY_INTENT); 
           if (launch != null) { 
            startActivityForResult(launch, 0); 
            return; 
           } 
          } catch (Exception e) { 
           System.out.println("[email protected]"); 
          } 
         } 
        }, null); 

      // mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0); 

      i++; 
     } 

    } 

} 
+0

-1 Due domande in una ... Per Facebook, è un duplicato di http://stackoverflow.com/questions/4593061/how-to-retrieve-an-facebook-authtoken-from-the-accounts- saved-on-android – rds

risposta

8

chiamata AccountManager.getAccountsByType(null) per recuperare tutti i conti, e verificare i dati dell'account restituito include le informazioni necessarie. Potrebbe semplicemente non essere esposto.

Prova a chiamare AccountManager.blockingGetAuthToken invece. Inoltre, assicurati che il file manifest contenga correttamente il set di autorizzazioni USE_CREDENTIALS.

Si può vedere questa discussione How to retrieve an Facebook-AuthToken from the accounts saved on Android

ma vorrei anche suggerire Facebook SDK con permesso l'accesso offline (Questa autorizzazione rende il token di accesso restituito dal endpoint OAuth longevo, altrimenti token di autenticazione è valida solo per 1 ora.)

+0

Restituisce sempre 0 risultati ora su Android M – Dpedrinha

2

È inoltre possibile creare intento e ottenere gettone applicazione Facebook

Intent intent = new Intent(); 
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProxyAuth"); 
intent.putExtra("client_id", apiKey); 
intent.putExtra("scope", scope); 

try { 
    activity.startActivityForResult(intent, requestCode); 
} catch (ActivityNotFoundException e) { 
    return false; 
} 

Poi onActivityResult(int requestCode, int resultCode, Intent data) di voi attività è possibile ottenere il token di usin g

data.getStringExtra("access_token"); 
0

Solo per informazioni, la parte di applicazione Facebook di getAuthToken non è implementata. Quando lo decompilate, vedete che restituisce semplicemente null.

È necessario utilizzare l'SDK di Facebook.

+0

non è vero @antonee marthin –

Problemi correlati