Аутентификатор учетной записи Android редактировать учетные данные электронной почты
Когда я вхожу с test1@gmail.com в моем приложении. Это успешно создает учетную запись с моей электронной почтой, как это
Теперь я выхожу из системы и захожу с другим адресом электронной почты, например test2@gmail.com, затем он создает аккаунт
Я хочу знать, что является лучшим способом
1) Удалить первый аккаунт и добавить второй аккаунт
2) Обновите первый аккаунт вторым, если это возможно.
Какую проблему я получаю на самом деле?
Если я удалю и снова добавлю аккаунт используя addAccountExplicitly
создание нового аккаунта занимает некоторое время, поэтому мой следующий код выполняется, и аккаунт возвращает ноль.
Можно ли обновить аккаунт с помощью updateCredentials
если да то как??
Отредактировано:
Что я делаю на самом деле?
Создание пакета с необходимыми данными для аккаунта
Проверяя, существует ли учетная запись с локальными вставленными параметрами пакета "global_user_id", если она уже существует, я должен обновить EMAIL, который используется в качестве имени входа (см. Изображения выше).
В настоящее время я делаю как: удаление старой учетной записи и добавление новой учетной записи, но следующая строка предназначена для конфигурации SyncAdapter, которой требуется учетная запись. При этом получается NULL, потому что добавление аккаунта занимает некоторое время в фоновом режиме.
Есть ли другое решение для обновления этого идентификатора электронной почты?
3 ответа
Я получил решение этой проблемы.
Вопрос: удаление / добавление аккаунта остается нулевым account
объект
Решение 1:
Сначала я удалил аккаунт используя removeAccount()
а потом попытался addAccountExplicitly
НОremoveAccount()
требуется время для выполнения в фоновом потоке, покавызывается addAccountExplyly, и выполняется дальнейший процесс.
Так что я изменил свой поток, как я использовалremoveAccount
метод класса AccountManager и выполнение всего процесса в этом обработчике, поэтому я пишу свой код в области обратного вызова.
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
// Creating the account on the device and setting the auth token we got
// (Not setting the auth token will cause another call to the server to authenticate the user)
mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
mAccountManager.setAuthToken(account, authTokenType, authToken);
/**
* Setting for Sync Adapter
* Syncing Configuration
*/
SyncAdapter.configSyncAdapter(mContext);
}
}, null);
} else {
mAccountManager.removeAccount(accounts[0], new AccountManagerCallback<Boolean>() {
@Override
public void run(AccountManagerFuture<Boolean> future) {
// Creating the account on the device and setting the auth token we got
// (Not setting the auth token will cause another call to the server to authenticate the user)
mAccountManager.addAccountExplicitly(account, accountPassword, intent.getBundleExtra(AccountManager.KEY_USERDATA));
mAccountManager.setAuthToken(account, authTokenType, authToken);
/**
* Setting for Sync Adapter
* Syncing Configuration
*/
SyncAdapter.configSyncAdapter(mContext);
}
}, null);
}
Решение 2:
Я нашел метод с именем renameAccount(), но он требует минимальной версии SDK 21. Согласно документации:
Переименуйте указанную учетную запись. Это эквивалентно удалению существующей учетной записи и добавлению новой переименованной учетной записи с пользовательскими данными старой учетной записи.
Безопасно вызывать этот метод из основного потока.
Спасибо.
проблема
когда вы создаете / удаляете учетную запись, она выполняет эту задачу в другом потоке (фоновом потоке) и, таким образом, переходит к следующей строке, которая может иметь нулевое значение.
Решение
Шаг 1. Вы должны использовать addOnAccountsUpdatedListener для получения обратного вызова в ваш основной поток.
Шаг 2. Вы получите обратный вызов на onAccountsUpdated OnAccountsUpdateListener
Шаг 3. Получив обратный вызов, вы можете поместить свой следующий код в этот метод. то есть: конфигурация SyncAdapter
Шаг 4. Не забудьте избавиться от прослушивателя, который вы зарегистрировали, иначе вы будете страдать от утечки памяти. Так что используйте removeOnAccountsUpdatedListener, как только вы закончите.
Я надеюсь, что это будет полезно!
Я думаю, что вы должны удалить первый аккаунт, а затем добавить новый. Что касается вашей проблемы с кодом, который выполняется перед выполнением вашей учетной записи, вы можете управлять этим с помощью
AccountManager accountManager = AccountManager.get(this); //this is Activity
Account account = new Account("MyAccount","com.company.demo.account.DEMOACCOUNT");
boolean success = accountManager.addAccountExplicitly(account,"password",null);
if(success){
Log.d(TAG,"Account created");
}else{
Log.d(TAG,"Account creation failed. Look at previous logs to investigate");
}
Просто проверьте логический успех. И делай свою работу соответственно:)