Intereting Posts
Перейдите в окно «Разрешение приложений» приложения Eclipse LogCat показывает только первую букву из каждого сообщения Android: статическая переменная null на низкой памяти Android Fragments следует повторно использовать 1 фрагмент или создавать новые экземпляры? Импортировать существующий проект Android в Eclipse: нет исходной папки? Лучшие методы для запроса базы данных SQLite в ListFragment с помощью CursorLoader? WebView shouldOverrideUrlLoading () не вызывается для недопустимых ссылок Как отправлять и получать SMS-сообщения от Android-приложения? Рассчитать размер текста в соответствии с шириной области текста Как предотвратить изменение пользователем даты / времени (в Android)? Как эффективно управлять несколькими задачами Async на Android Закрытие базы данных в ContentProvider Установка ориентации камеры Android началась с намерения ACTION_IMAGE_CAPTURE Firebase onTokenRefresh () не вызывается Android: не удалось выделить память

Как получить 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.