Android addAccount usando explicitamente o tipo “com.google”
-
28-10-2019 - |
Pergunta
Estou procurando a resposta desde o início do dia e ainda não sei o que fazer! Para explicar o problema: Meu aplicativo usa GTasks API. Para fazer isso, o usuário DEVE ter uma conta do Google. Tenho duas maneiras de verificar isso:
- Eu instancio um gerente de conta e procuro por contas "com.google" se não houver tais contas
- Eu lanço um webview no qual o usuário faz login no Google e aceita usar a API.
Então, tenho que sincronizar meu aplicativo com GTask. A partir das informações extraídas do webview, tentei criar uma conta "com.google" usando o AccountManager, mas sempre recebo o erro "UID do chamador é diferente ...". Eu sei que o problema deve vir de "account-authenticator" porque o "accountType" tem que ser o mesmo no arquivo XML e no aplicativo, mas acho que não é o caso, porque quando eu uso um tipo de conta diferente, funciona perfeitamente (mas não consigo obter um authToken do GTask).
Então, aqui está o meu código:
Authenticator.xml:
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.google"
android:icon="@drawable/miniicon"
android:smallIcon="@drawable/miniicon"
android:label="@string/app_name"
android:accountPreferences="@xml/preferences"
/>
Definição do tipo de conta:
public class AuthenticationService extends Service {
public static final String ACCOUNT_TYPE = "com.google";
Como eu o uso em minha aula:
AccountManager manager = AccountManager.get(activity);
final Account account = new Account(login, AuthenticationService.ACCOUNT_TYPE);
manager.addAccountExplicitly(account, password, new Bundle());
Quando eu uso "com.plop" ou qualquer outra coisa em vez de "com.google", funciona muito bem.
Então, minhas duas perguntas são: 1. Posso usar o tipo de conta "com.google"? 2. É normal que eu não consiga obter meu authToken usando algo diferente de "com.google" (sabendo que a conta usada ainda é uma conta do Google, só não está configurada assim no Android)?
Obrigado antecipadamente pela sua ajuda e, por favor, me perdoe se a resposta estava no site!
Solução
Eu respondi minha própria pergunta: isso não é possível da maneira que eu queria.Você deve usar a função "addAccount" usando um tipo de conta "com.google".Isso resultará no popping da atividade de criação de conta usada pelo sistema Android.Então, está tudo bem usando GTasks API.