2014-09-10 5 views
1

Я воспользовался примером syncadapter для создания AccountManager и адаптера синхронизации. Я хотел иметь два разных типа authtokens для разных целей (доступ к различным сервисам - адаптер синхронизации использует один из них) под одной учетной записью.Android AccountManager с несколькими типами токенов аутентификации

Вещи работают, но я обнаружил, что когда я аутентифицирую (через getauthtoken) для одного типа authtoken, процесс его сохранения заменяет другой тип authtoken. Я просмотрел файл accounts.db до и после. Перед вызовом, чтобы получить токен для authtoken типа «B», таблица authtoken в accounts.db имеет authtoken для типа «A». После вызова таблица authtoken в accounts.db имеет authtoken для типа «B», но «A» был удален. Независимо от порядка, подсистема accountmanager никогда не хранит больше, чем один authtoken для каждой учетной записи для моего типа учетной записи.

Есть ли что-то особенное, которое вам нужно настроить в каком-либо файле xml где-то, когда у вас более одного типа authtoken?

+0

Когда вы сохраняете токен, вы уверены, что сохраните его в определенном типе? – CChi

+0

Сначала я подумал, что это возможно, но я не видел способа указать тип. Токен устанавливается с использованием унаследованного метода setAccountAuthenticatorResult() из AccountAuthenticatorActivity. Значения в пакетах экстрас не указывают тип - тип передавался с использованием getAuthToken(). Ни один из ключей в AccountManager (например, KEY_ACCOUNT_NAME) не относится к типу authtoken, если я не пропустил его. Но я вижу, что тип authtoken задан правильно в accounts.db - просто удалена другая запись типа authtoken. – BJV

+0

в дополнительном пакете, вы можете указать тип, передать в AccountManager.KEY_ACCOUNT_TYPE как ключ и строковое представление типа учетной записи в качестве значения. – CChi

ответ

1

Я нашел свою проблему. Если вы вызываете AccountManager.setPassword() в результате успешной аутентификации/входа в систему, это приведет к аннулированию всех токенов аутентификации для вашей учетной записи. Это недокументированный побочный эффект, и в некоторых случаях это имеет смысл. Программное обеспечение, которое устанавливает пароль на одно и то же значение без разбора, случайно приведет к аннулированию их токенов.