Cómo recuperar Twitter y Facebook Autenticación y Token a través de las clases de Administrador de cuentas de Android

Quiero recuperar token a través de las clases de Account Manager. Aquí está el código de la muestra que trabaja para el gorjeo pero no para el plz del facebook me ayuda.

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("EXCEPTION@AUTHTOKEN"); } } }, 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("EXCEPTION@AUTHTOKEN"); } } }, 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("EXCEPTION@AUTHTOKEN"); } } }, 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("EXCEPTION@AUTHTOKEN"); } } }, null); // mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0); i++; } } } 

Llame a AccountManager.getAccountsByType(null) para recuperar todas las cuentas y compruebe que los datos de cuenta devueltos incluyen la información que necesita. Simplemente puede no estar expuesto.

Intente llamar a AccountManager.blockingGetAuthToken en AccountManager.blockingGetAuthToken lugar. Además, asegúrese de que su manifiesto tenga el permiso USE_CREDENTIALS establecido correctamente.

Puedes ver esta discusión Cómo recuperar un Facebook-AuthToken de las cuentas guardadas en Android

Pero también sugeriría Facebook SDK con permiso de acceso sin conexión (este permiso hace que el token de acceso devuelto por el punto final de OAuth sea de larga vida, de lo contrario el token de autenticación es válido sólo durante 1 hora).

También puede crear intento y obtener el token de la aplicación de 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; } 

Entonces onActivityResult(int requestCode, int resultCode, Intent data) de su actividad puede obtener el token usando

 data.getStringExtra("access_token"); 

Sólo para información, la parte de la aplicación facebook de getAuthToken no está implementada. Cuando lo descompila, ve que acaba de devolver null.

Debe utilizar el SDK de Facebook.

  • Twitter4j => AndroidRuntime (446): java.lang.NoClassDefFoundError: twitter4j.http.AccessToken
  • Evitar que la dependencia de Gradle para la biblioteca de soporte sea reemplazada por una versión más reciente
  • Inicio de sesión móvil de Facebook y validación del servidor
  • Cómo instalar el kit de twitter con el plugin de tejido en el estudio de Android
  • ¿Cómo forzar Share Intent a abrir una aplicación específica?
  • Recibe correo electrónico de Twitter usando Fabric SDK
  • Abrir perfil de usuario de aplicaciones de Twitter desde la aplicación de Android
  • Abrir página en Facebook, Twitter y Google Plus desde otra aplicación - Android
  • Error al obtener el método de token de solicitud POST debe tener un cuerpo de solicitud
  • Publicar texto diferente en facebook y twitter utilizando las intenciones de Android
  • Problema en la devolución de llamada en Twitter en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.