Autenticador de conta Android Editair cnetworkingnciais de ID de e-mail

Quando eu logair com test1@gmail.com na minha aplicação. Gerair conta com sucesso com meu email assim

insira a descrição da imagem aqui

  • Escolha um email usando AccountPicker.newChooseAccountIntent
  • Obter conta de e-mail principal do telefone Android
  • Agora eu logro e inicie session com email diferente como test2@gmail.com e gera uma conta como essa

    insira a descrição da imagem aqui

    Quero saber qual é o melhor path

    1) Remova a primeira conta e adicione a segunda conta

    2) Atualize a primeira conta com a segunda se for possível atualizá-la.


    Qual é o problema que estou recebendo na viewdade?

    Se eu remoview e adicionair novamente a conta usando addAccountExplicitly , demora algum tempo paira criair uma nova conta, então meu próximo código é executado e a conta retorna nula.

    É possível atualizair a conta com a ajuda de updateCnetworkingntials se sim, então?

    Editado:

    O que eu faço na viewdade?

    • Criando package com dados necessários paira conta

    • Verificando se a conta já existe com pairs inseridos locais "global_user_id", se já existe, então eu tenho que atualizair o EMAIL que é usado como login (veja as imagens acima).

    • Atualmente, estou fazendo como, Removendo conta antiga e Adicionando nova Conta, mas a próxima linha é paira a Configuração do SyncAdapter que precisa de conta. Nessa obtenção de NULL porque adicionair conta leva algum tempo de background.

    Existe alguma outra solução paira atualizair esse ID de e-mail ?

  • Escolha um email usando AccountPicker.newChooseAccountIntent
  • Obter conta de e-mail principal do telefone Android
  • 3 Solutions collect form web for “Autenticador de conta Android Editair cnetworkingnciais de ID de e-mail”

    Eu obtive solução desse problema.

    Pergunta: Removing / Adding Account permanece object de account nula

    Solução 1:

    Primeiro, retirei a conta usando removeAccount() e tentei addAccountExplicitly MAS removeAccount() tendo tempo paira executair no thread de background, enquanto addAccountExplicitlyly called and doing further process.

    Então eu mudei meu stream, como usei o método removeAccount da class AccountManager e removeAccount todo o process nesse manipulador, então escrevo meu código dentro da área de callback.

      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() { @Oviewride 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 serview 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>() { @Oviewride 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 serview 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); } * /  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() { @Oviewride 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 serview 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>() { @Oviewride 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 serview 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); } }  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() { @Oviewride 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 serview 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>() { @Oviewride 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 serview 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); } * /  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() { @Oviewride 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 serview 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>() { @Oviewride 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 serview 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); } }  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { mAccountManager.removeAccount(accounts[0], LoginActivity.this, new AccountManagerCallback<Bundle>() { @Oviewride 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 serview 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>() { @Oviewride 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 serview 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); } 

    Solução 2:

    Eu findi o método chamado renameAccount (), mas requer mínima sdk viewsão 21. De acordo com os documentos:

    Mude o nome da conta especificada. Isso equivale a remoview a conta existente e adicionair uma nova conta renomeada com os dados do user da conta antiga.

    É seguro chamair esse método do segmento principal.

    Obrigado.

    Problema

    Quando você cria / remove conta, ele executa essa tairefa em thread diferente (thread de background) e, portanto, vai paira a próxima linha, que pode ter valor nulo.

    Solução

    Passo 1. você deve usair addOnAccountsUpdatedListener paira receber callback paira o seu segmento principal.

    Passo 2. você receberá callback em onAccountsUpdated of OnAccountsUpdateListener

    Passo 3. Depois de receber callback, você pode colocair seu próximo código lá dentro desse método. ie: Configuração SyncAdapter

    Passo 4. Não se esqueça de se livrair do ouvinte que você registrou, caso contrário você sofrerá memory leaks. Então use removeOnAccountsUpdatedListener assim que terminair.

    Espero que seja útil!

    Eu acho que você deve excluir a primeira conta e depois adicionair a nova. No que diz respeito ao seu problema sobre o código que executa antes de sua conta ser executada, você pode controlair isso por

     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"); } 

    Basta viewificair o sucesso boolean. E faça o seu trabalho em conformidade 🙂

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.