Intereting Posts
Android проверяет статус WIFI (отключен или пользователь изменен WIFI) Как FLAG это? Разница между ContentObserver и DatasetObserver? Нормально ли для метода activity.onCreate () вызывать несколько раз Есть ли побочные эффекты использования нескольких файлов string.xml? Значение предупреждающего сообщения «Отсутствие ярлыков указывает на это текстовое поле» После изменения конфигурации фрагмент потерял переходную анимацию Не удается запустить проект Android из файла макета xml в Eclipse Eclipse Android и gitignore Попытка поймать щелчок на элементе ListView android: android: descendantFocusability = "blocksDescendants" не работает Android READ PHONE STATE? Android – мягкая клавиатура выталкивает макет моей активности из экрана Как использовать один класс SyncAdapter для нескольких полномочий? Экспортировать Контакты как файл VCF Android получить и разобрать Google Directions Используйте мое собственное приложение для Android / apk в качестве запуска / Замена главного экрана

Как получить Twitter и facebook Authentication and Token через классы Account Manager для Android

Я хочу получить токен через классы Account Manager. Вот пример кода, который работает для twitter, но не для facebook plz, помогите мне.

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

Solutions Collecting From Web of "Как получить Twitter и facebook Authentication and Token через классы Account Manager для Android"

Вызовите AccountManager.getAccountsByType(null) чтобы получить все учетные записи, и проверьте, что данные возвращенной учетной записи содержат необходимую информацию. Он может просто не подвергаться воздействию.

Попробуйте вместо этого вызвать AccountManager.blockingGetAuthToken . Кроме того, убедитесь, что ваш манифест имеет USE_CREDENTIALS разрешение USE_CREDENTIALS .

Вы можете увидеть это обсуждение Как получить Facebook-AuthToken из учетных записей, сохраненных на Android

Но я также предлагаю Facebook SDK с автономным доступом к доступу (это разрешение делает маркер доступа, возвращаемый конечной точкой OAuth долговечным, в противном случае токен аутентификации действителен только в течение 1 часа).

Вы также можете создать намерение и получить токен из приложения 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; } 

Затем onActivityResult(int requestCode, int resultCode, Intent data) вашей активности вы можете получить токен, используя

 data.getStringExtra("access_token"); 

Только для информации, часть приложения facebook в getAuthToken не реализована. Когда вы декомпилируете его, вы увидите, что он просто возвращает null.

Вы должны использовать SDK для Facebook.