Я создал свой собственный аутентификатор учетной записи Android, расширив AbstractAccountAuthenticator
и реализовав addAccount()
и getAuthToken()
. Некоторые методы в нем вызываются AccountManager
, а другие нет. .
Это прекрасно работает:
AccountManager accountManager = AccountManager.get(activity);
accountManager.addAccount(MyAccountAuthenticator.ACCOUNT_TYPE,
MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null, null,
activity, callback, null);
Проблема возникает, когда я вызываю AccountManager#getAuthToken()
в моем Activity
. AccountManager не вызывает метод getAuthToken()
, который я определяю в моем AccountAuthenticator
. Он вызывает какой-то другой метод по умолчанию, который только проверяет наличие authToken
перед запуском AuthenticatorActivity
.
Это не работает. Он не вызывает мой метод getAuthToken()
:
AccountManager accountManager = AccountManager.get(activity);
accountManager.getAuthToken(
mAccount, MyAccountAuthenticator.AUTHTOKEN_TYPE_FULL_ACCESS, null,
activity, callback, handler);
AuthenticatorService
Я создал свой сервис и определил onBind()
. addAccount()
иначе работать не должно.
public IBinder onBind(Intent intent) {
return intent.getAction().equals(ACTION_AUTHENTICATOR_INTENT) ? new MyAccountAuthenticator(this).getIBinder() : null;
}
EDIT: я вызываю addAccountExplicitly
в MyAuthenticatorActivity
после того, как приложение возвращает токен авторизации для пользователя.
Фрагмент урока MyAuthenticatorActivity extends AccountAuthenticatorActivity
:
if (getIntent().getBooleanExtra(KEY_IS_ADDING_NEW_ACCOUNT, false)) {
// Creating the account on the device and setting the auth token we recieved
accountManager.addAccountExplicitly(account, null, null);
}
addAccountExplicitly
в своей деятельности? - person Tom G   schedule 31.01.2014AccountAuthenticatorActivity
. Я добавил это в EDIT в вопросе. - person Austyn Mahoney   schedule 31.01.2014getAuthToken
является запуск вашей активности входа в систему, то вызывается ваш аутентификатор - у Android нет другого способа определить, какую активность запускать, кроме того, что вы возвращаете как Intent. Я заметил, что вы добавляете учетную запись с нулевым паролем. Возможно, ваша реализация замкнется, если найдет нулевой проход? Опубликуйте телоgetAuthToken
из вашего аутентификатора. - person Tom G   schedule 31.01.2014getAuthToken()
даже не вызывается, когда существует существующий набор токенов аутентификации. Он обходит вызов и просто возвращает токен аутентификации, чего я не ожидал. Как я интерпретировал документацию, она все равно должна вызывать мой метод. Затем я могу решить, хочу ли я вернуть существующий токен или получить новый (перед возвратом я проверяю, не истек ли срок действия токена авторизации). - person Austyn Mahoney   schedule 01.02.2014getAuthToken
отлично работает, когда он действительно вызывается, нет необходимости видеть там исходный код. - person Austyn Mahoney   schedule 01.02.2014