2012-03-12 7 views
11

Chcę odzyskać token za pośrednictwem klas Menedżera konta. Oto przykładowy kod, który działa na twitterze, ale nie na facebooku. Pomóż mi.Jak odzyskać Twittera i facebooka Uwierzytelnianie i token za pośrednictwem klas Menedżera konta Androida

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 Dwa pytania w jednym ... Dla Facebooka jest to duplikat http://stackoverflow.com/questions/4593061/how-to-retrieve-an-facebook-authtoken-from-the-accounts- zapisane na Androidzie – rds

Odpowiedz

8

połączeń AccountManager.getAccountsByType(null) aby pobrać wszystkie rachunki i sprawdzić zwróconych danych konta zawiera informacje potrzebne. To może po prostu nie zostać ujawnione.

Spróbuj zadzwonić pod numer AccountManager.blockingGetAuthToken. Upewnij się też, że manifest ma prawidłowo ustawione uprawnienie USE_CREDENTIALS.

Można zobaczyć tę dyskusję How to retrieve an Facebook-AuthToken from the accounts saved on Android

Ale chciałbym również zasugerować Facebook SDK w trybie offline zgody dostępu (Uprawnienie to sprawia, że ​​token dostępu zwrócony przez końcowego OAuth długotrwałych, poza auth Token jest ważny tylko przez 1 godzinę.)

+0

To zawsze powraca teraz 0 wyników na Androidzie M – Dpedrinha

2

można również tworzyć intencję i otrzymać token z aplikacji 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; 
} 

Następnie onActivityResult(int requestCode, int resultCode, Intent data) was aktywności można uzyskać tokena usin g

data.getStringExtra("access_token"); 
0

Dla celów informacyjnych część aplikacji getAuthToken nie jest zaimplementowana. Kiedy ją dekompilujesz, zobaczysz, że po prostu zwraca wartość null.

Należy użyć zestawu SDK Facebooka.

+0

nie jest to prawda @antonee marthin –