Intereting Posts
Обнаружение выбранного элемента (в ListView) порождало ContextMenu (Android) Как запретить Android делать снимок экрана, когда мое приложение переходит на задний план? Ошибка stackoverflow при просмотре перетаскивания Android. Префикс «xmlns» не может быть привязан к любому пространству имен явно; Ни одно пространство имен для «xmlns» не должно быть привязано к любому префиксу явно Android ScrollView fillViewport не работает Android Studio – непризнанная опция VM «MaxPermSize = 256m» Лучший способ удалить Activity и его ссылки в Android Studio Мастер Eclipse для создания новой активности Android не работает Android Multi SurfaceViews Как избежать 15-секундной задержки / кэширования в Android Media Player при воспроизведении потока Основное различие между Manifest и Programmatic регистрации BroadcastReceiver ListView очень медленно при прокрутке (используя ViewHolder / recycling) Android Youtube Player Api завершает работу и создает Как подключить файл изображения по электронной почте? System.gc () вызывает замедление от второго запуска Activity

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