Как получить Facebook-AuthToken из учетных записей, сохраненных на Android - PullRequest
7 голосов
/ 04 января 2011

Я пытаюсь получить AuthToken для Facebook (сохраненный Facebook для Android ), используя следующий фрагмент кода.

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType("com.facebook.auth.login");
if (accounts.length > 0) {          
    for(int j = 0; j < accounts.length; j++) {
        Account account = accounts[j];
        if(account.type != null && account.type.equals("com.facebook.auth.login")) { 
            Log.e(RuntimeVars.MY_NAME, "FACEBOOK-TYPE FOUND");
            am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this,
                new AccountManagerCallback<Bundle>() {
                    public void run(AccountManagerFuture<Bundle> arg0) {
                        try {
                            Bundle b = arg0.getResult();
                            Log.e(RuntimeVars.MY_NAME, "THIS AUTHTOKEN: " + b.getString(AccountManager.KEY_AUTHTOKEN));
                        }
                        catch (Exception e) {
                            Log.e(RuntimeVars.MY_NAME, "EXCEPTION@AUTHTOKEN");
                        }
                    }
                }, null);
            }
        }
    }

Найдены учетные данные для входа и FACEBOOK-TYPE FOUND записано в LogCat, но ни ЭТОТ AUTHTOKEN: [...] , ни EXCEPTION @ AUTHTOKEN зарегистрирован Поэтому я полагаю, что am.getAuthToken никогда не вызывается.

Что мне не хватает?

В общем, если есть лучший (и хотя бы работающий) подход для извлечения аутентификационного кода Facebook из учетных записей Android, сообщите мне.

Большое спасибо за вашу помощь!

С уважением
С.

Ответы [ 4 ]

6 голосов
/ 10 января 2011

Почему бы не использовать Facebook SDK?

В классе Facebook есть член для получения токена доступа OAuth 2.0 (если это то, что вам нужно), getAccessToken().

2 голосов
/ 18 июня 2011

Чтобы объяснить тот факт, что ни один из ваших операторов ведения журнала не был достигнут, рассмотрим:

Строка ~ 8:

        am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this,

... может вернуть токен, если он сразу доступен.Может быть, это ответ, который вы ищете?Цитирование документации по AccountManager:

Если для этой учетной записи и типа кешируется ранее созданный токен авторизации, он возвращается.В противном случае, если сохраненный пароль доступен, он отправляется на сервер для создания нового токена авторизации.В противном случае пользователю предлагается ввести пароль.

1 голос
/ 08 января 2011

Попробуйте позвонить AccountManager.blockingGetAuthToken.Если это работает, то здесь есть что-то более интересное ...

Кроме того, убедитесь, что у вашего манифеста правильно установлено разрешение USE_CREDENTIALS.

0 голосов
/ 04 января 2011

добавьте try {before am.getAuthToken и поймайте Exception, где заканчивается объявление этого метода. Это даст вам объяснение, почему и где происходит исключение

...