AccountManager не может добавить учетную запись на Sony XZ 7.1.1

Приложение, которое я сейчас разрабатываю, недавно обнаружило проблемы, когда пользователи обновляются до версии 7.1.1 на мобильных устройствах Sony.

На Sony XZ мы можем увидеть это в журнале при попытке addAccountExplicitly:

AccountManagerService(1503): insertAccountIntoDatabase: учетная запись {[email protected], type=com.myapplication.go}, пропуская, поскольку учетная запись уже существует

Приложение было установлено, и учетная запись была добавлена ​​нашим приложением до обновления. Похоже, что учетная запись не была полностью удалена/прочитана.

Как мы можем в нашем приложении оправиться от этого? Почему это происходит? Я читал о подобных проблемах в предварительном просмотре Nougat, но мы не можем устранить его с помощью removeAccountExplicitly, а затем добавить его снова, как предлагается по ссылке ниже. Результат такой же, как и выше: удаление приложения не очищает учетную запись и не перезагружает телефон.

AccountManager не добавляет пользовательскую учетную запись в предварительную версию Android N


person Karl Kullberg    schedule 27.04.2017    source источник


Ответы (2)


Мы нашли возможную причину и решение проблемы.

Симптомы

TL;DR Это вина Sony.

Судя по нашей пользовательской базе, только пользователи Sony XZ использовали наше приложение до обновления своего устройства до версии 7.1.1.

Мы дошли до того, что купили несколько устройств Sony XZ (и в конечном итоге вернули их обратно в магазин), обновили их с Android 6.0 до 7.1.1 и попытались воспроизвести проблему. Но без везения.

Однако мы нашли другой способ добиться тех же «симптомов» с помощью эмулятора Android. Шаги:

  1. Запустить эмулятор
  2. Войдите в свое приложение (чтобы пользователь был добавлен в AccountManager)
  3. Заходим в терминал и делаем следующее

Шаги:

adb shell
su
cd /data/system_de/0/
rm accounts_de.db
  1. Перезапустите эмулятор
  2. Отныне ваша проблема воспроизводима.

Более того, если вы отметите /data/system_ce/0/accounts_ce.db, вы увидите, что это база данных, которая все еще содержит вашего предыдущего пользователя. Скорее всего, поэтому AccountManager не позволяет снова вставить того же пользователя.

Похоже, что во время обновления до Android 7.1.1 Sony каким-то образом испортила accounts_de.db, в котором содержалась исходная учетная запись.

Решение

Поскольку учетная запись с таким именем уже есть в базе данных (и вы не можете удалить ее оттуда), мы в принципе не можем снова вставить пользователя с тем же именем. Однако мы можем вставить учетную запись с немного обновленным именем пользователя:

if (!accountManager.addAccountExplicitly(account, password, bundle)) {
    // We failed to add the account. Fallback to workaround.
    accountManager.addAccountExplicitly(
        new Account(username + "\n", accountType), // this line solves the issue
        password,
        bundle
    );
}

Поскольку эта учетная запись теперь отличается от исходной учетной записи (благодаря символу \n), ее можно вставить в базу данных AccountManager.

person Dmitry Zaytsev    schedule 29.06.2017
comment
Я смог воспроизвести эту проблему. Но суффикс \n, вероятно, следует использовать как запасной вариант, если добавление учетной записи обычным способом не удалось, верно? В противном случае пользователи, которые еще не обновили свои устройства до Android 7.1.1, снова столкнутся с той же проблемой. - person Mauin; 29.06.2017
comment
@Mauin да, мы добавляем \n, только если addAccountExplicitly возвращает нам false - person Dmitry Zaytsev; 29.06.2017
comment
@DmitryZaytsev Был ли доступ к старой учетной записи с помощью вызова accountManager.getAccountsByType()? Или это было для всех по сути скрыто, но продолжая блокировать добавление новых учетных записей? - person Nicholas; 08.12.2017
comment
@DmitryZaytsev Спасибо! На всякий случай, если кто-то еще гуглит эту проблему, это случилось с одним из наших пользователей после того, как они очистили данные сервисов Google Play. - person Nicholas; 11.12.2017

Об этой проблеме известно Google: https://issuetracker.google.com/issues/142699760.

person Malachiasz    schedule 07.11.2019