Estou tentando integrar o Login do Google ao meu aplicativo. Não tenho um servidor back-end, estou apenas obtendo os detalhes da conta do Google conectada em meu aplicativo.
Eu tentei primeiro usando o exemplo de login do Google, mas obtive um erro (nenhuma alteração de código foi feita, exceto para imprimir o rastreamento de pilha abaixo). Acabei de usar o exemplo SignInActivity porque não tenho um servidor back-end.
Exception com.google.android.gms.common.api.ApiException: 12500:
at com.google.android.gms.common.internal.zzb.zzz(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at com.ewise.android.api.MainActivity.onActivityResult(SignInActivity.java:89) at android.app.Activity.dispatchActivityResult(Activity.java:7010)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4187)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4234)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6316)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Código
public class SignInActivity extends AppCompatActivity implements
View.OnClickListener {
private static final String TAG = "SignInActivity";
private static final int RC_SIGN_IN = 9001;
private GoogleSignInClient mGoogleSignInClient;
private TextView mStatusTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Views
mStatusTextView = findViewById(R.id.status);
// Button listeners
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.disconnect_button).setOnClickListener(this);
// [START configure_signin]
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
// [END configure_signin]
// [START build_client]
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// [END build_client]
// [START customize_button]
// Set the dimensions of the sign-in button.
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
// [END customize_button]
}
@Override
public void onStart() {
super.onStart();
// [START on_start_sign_in]
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
// [END on_start_sign_in]
}
// [START onActivityResult]
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
// [END onActivityResult]
// [START handleSignInResult]
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
// Signed in successfully, show authenticated UI.
updateUI(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
e.printStackTrace();
updateUI(null);
}
}
// [END handleSignInResult]
// [START signIn]
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signIn]
// [START signOut]
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END signOut]
// [START revokeAccess]
private void revokeAccess() {
mGoogleSignInClient.revokeAccess()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
}
// [END revokeAccess]
private void updateUI(@Nullable GoogleSignInAccount account) {
if (account != null) {
mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.sign_out_button:
signOut();
break;
case R.id.disconnect_button:
revokeAccess();
break;
}
}
}
Pelo que li, o problema pode ser causado pela geração SHA1 .
Segui o guia completo, mas aparentemente não está funcionando.
Copiei o SHA1 do Gradle SigningReport
Variant: debug
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
qual poderia ser a possível causa disso?
obrigado
PS Esta pode ser uma causa possível?
Google Play services out of date. Requires 11720000 but found 10932470
android
google-signin
Aaron
fonte
fonte
Respostas:
Basta atualizar o Google Play Services para a versão mais recente (ou 11720000 neste caso). Se você estiver usando AVD, as imagens do Nexus 5 e 5X são compatíveis com o Google Play. Assim que o emulador estiver instalado e funcionando, vá para o menu Extended Controls> Google Play e atualize.
fonte
Erro PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
fonte
Verifique se as impressões digitais SHA-1 foram adicionadas às configurações do projeto do Firebase. Caso contrário, encontre a impressão digital SHA-1 usando
https://developers.google.com/android/guides/client-auth
Além disso, encontre a impressão digital SHA-1 da chave de liberação usando
Remova
<keystore path>
com o caminho do armazenamento de chaves.Em seguida, adicione as duas impressões digitais SHA-1 às configurações do Firebase projects.
NB: Não se esqueça de substituir google-services.json por google-services.json atualizado com novas impressões digitais. Perdi dois dias nisso.
Durante a depuração
O Android Studio gera automaticamente
~/.android/debug.keystore
na primeira compilação de depuração e usa-o para assinar o aplicativo.Para obter o SHA-1 execute (senha
android
) ( doc ):Isso
SHA-1
deve ser adicionado às configurações do aplicativo emfirebase
para permitir o uso dos recursos de login do Google durante o teste de compilação de depuração.fonte
para o erro 12500, você precisa adicionar support gmail nas configurações do firebase apenas e para o erro 10, adicione a impressão digital ssh no console do firebase, como você vê na imagem
fonte
O e-mail de suporte e também todos os links de projetos e privacidade são necessários para que o Google SignIn funcione, caso contrário, ele gera 12500.
Configure-o em https://console.developers.google.com/apis/credentials na parte inferior da segunda guia chamada "tela de consentimento OAuth" - lá você encontrará três links que precisam ser configurados.
Isso não é mencionado EM QUALQUER LUGAR nos guias do Firebase.
fonte
Tente atualizar a tela de consentimento do OAuth em https://console.developers.google.com/apis/credentials
fonte
Eu estava preso nisso por um tempo.
Certifique-se de que essas etapas sejam realizadas
fonte
Parece que seu SHA1 foi substituído pela Google Play Store. Verifique em sua loja Google Play, painel de lançamento, em assinatura de aplicativo, se o Google Play tem um SHA1 adicional adicionado.
E copiar aquele SHA1, adicionar ao seu lugar relevante, faria o trabalho.
fonte
Se ainda houver alguém com um problema semelhante, se você estiver adicionando escopos personalizados, certifique-se de que seja um escopo válido. No meu caso, misturei escopos do Facebook com escopos do Google e demorei um pouco para descobrir!
fonte
Estou usando o Firebase Authentication. Meu SHA-1 foi indicado corretamente, a id do cliente também estava correta, mas eu ainda estava recebendo 12.500.
Descobri que meu problema era não indicar o e-mail de suporte nas configurações do projeto. (Configurações -> guia Geral -> seção Seu projeto (Configurações públicas)).
fonte
Acesse seu projeto no Firebase console, abra as Configurações do projeto e adicione suas impressões digitais do certificado SHA. Baixe o arquivo google-services.json atualizado e adicione-o à pasta do aplicativo Projetos.
Isso funcionou para mim.
fonte
Acho que o erro veio do SHA1 errado. Não se esqueça de que o SHA1 é diferente entre os modos de liberação e depuração no Android Studio. Em vez de usar o keytool para obter o SHA1, você pode usar o projeto Gradle -> Tarefa -> android -> SignReport no Android Studio (pode abri-lo pelo menu Exibir -> Toolwindow -> gradle) para obter a liberação e depuração do SHA1. Depois disso, para facilitar o trabalho, você precisa criar 2 credenciais separadas com dois SHA1 no Google Cloud Console (google apenas instrua para criar 1 usando a versão SHA1, quando o desenvolvermos não funcionará, pois usa o SHA1 de depuração).
fonte
Primeiro, certifique-se de registrar seu aplicativo no console de desenvolvedores do Google
Certifique-se de ter as chaves
debug
erelease
em seu aplicativo Firebase. Se esse erro aparecer na produção, adicione seuSHA-1 release key
para acionar o aplicativo base. Se estiver em desenvolvimento, adicione o seuSHA-1 debug key
.Obtendo a chave de depuração / liberação:
Certifique-se de baixar o atualizado
google-services.json
para o seu aplicativo.fonte
Para mim, o problema era usar um ClientID de 'liberação' com meu aplicativo configurado para depuração. Certifique-se de ter um release e um debug keys, usando cada SHA-1 respectivamente.
fonte
Se você está vindo aqui do flutter : Este é um dos casos extremos que temos que consertar conforme a documentação aqui: https://pub.dev/packages/google_sign_in
fonte
Quando seu aplicativo se autentica com um servidor de back-end ou acessa APIs do Google de seu servidor de back-end, você deve passar o ID do cliente OAuth 2.0 que foi criado para seu servidor para o método requestIdToken ao construir o objeto GoogleSignInOptions, para acessar as informações básicas de perfil do usuário . Além disso, não se esqueça de enviar o e-mail de suporte na tela de consentimento do OAuth encontrada na página Credenciais no Console de API.
fonte
Também pode acontecer que o compilador cordova não consiga encontrar o arquivo keystore adequado.
Solução: Antes de executar,
ionic cordova build android
especifique as propriedades de assinaturaEtapa 1 : gerar um arquivo de armazenamento de chaves de depuração
Execute o comando
Use a senha:
android
Passo-2: Copie o arquivo de armazenamento de chaves (
debug.keystore
) a partir~/.android
deplatform/android
diretório do seu projeto atualEtapa 3: crie um arquivo chamado release-signing.properties no
platform/android
diretórioEtapa 4: adicione o conteúdo ao arquivo
Etapa 5: agora construir
ionic cordova build android
fonte
Eu tive o mesmo problema depois de abrir meu projeto em outro computador (diferente Android Studio). No meu caso, resolvi isso usando o Firebase Assistant, que usei para configurar o Firebase inicialmente. Abra o Firebase Assistant (Tools> Firebase) e selecione Authentication> Connect. Isso reconectou o projeto ao Firebase e atualizou as configurações
fonte
Eu estava preso no problema de login do Google há 2 semanas, finalmente resolvi bem. Deixe-me explicar o motivo. O problema estava relacionado com o firebase. No firebase, eles mencionaram um campo "email de suporte" como opcional. Mas depois que eu adicionei (qualquer um de seu e-mail pessoal), o problema foi resolvido e recebi a resposta. Se você receber um erro como 12501, isso está relacionado às configurações da sua conta do Google.
fonte
Eu estava preso nisso por um tempo.
Certifique-se de que essas etapas sejam realizadas
fonte
No meu caso, é por causa do ID de cliente do Google errado. Eu mudo minha chave para a chave listada em
google-services.json
(soboauth_client
objeto)fonte
Certifique-se de ter os seguintes itens configurados corretamente:
strings.xml
,google-services.json
oucredentials.json
arquivo.fonte
https://developers.google.com/identity/sign-in/android/sign-in siga esta documentação da API, mas tenha em mente que dentro de WEB_CLIENT_ID use o valor do id do cliente que é gerado dentro do arquivo google-services.json.
fonte
No meu caso, depois de adicionar a impressão digital no console do Firebase, ela foi automaticamente selecionada pelo console do desenvolvedor do Google e mostrada nas impressões digitais. Mas o login não funcionou. Depois de examinar cada etapa, descobri que o Google reverteu meu pacote de arquivo de manifesto assim
com.xxxxxxxx.app
. Mas éapp.xxxxxxxx.com
, na verdade , no console do desenvolvedor do Google. Portanto, apaguei automaticamente, criei uma impressão digital e adicionei a impressão digital com o nome do pacote correto. ESTRONDO!!. Funcionou.fonte
O erro apareceu para mim quando a opção Google não estava habilitada, conforme mostrado na imagem .
Aconteceu quando mudei de conta do Google e esqueci de ativar a opção de conexão com o Google.
fonte
Certifique-se de que seu projeto não contenha nenhum caractere especial, incluindo numérico ou qualquer tipo de símbolo (o nome do projeto deve ser simples como com.google.testproject)
fonte
No meu caso, eu estava trabalhando em um aplicativo de não produção, o problema era que, ao criar um projeto no console do firebase, havia problemas ao sincronizar as chaves SHA-1 para frente e para trás nos consoles de desenvolvedores do Firebase e do Google. Portanto, decidi criar o projeto primeiro no console do Google Developer e, em seguida, selecioná-lo ao criar um novo projeto no console do Firebase.
Também fiz um tutorial para isso, que pode te ajudar.
fonte
No meu caso, o problema era que meu emulador não tinha Play Store. Eu fiz o emulador (chamado API 23) através do Visual Studio, porque eu desenvolvo usando Xamarin.Forms também, e no Gerenciador de dispositivos Android do Visual Studio você pode selecionar se seu emulador deve ter Google Play Store.
Tive que criar um emulador por meio do AVD do Android Studio e garantir que tivesse Play Store:
fonte
No meu caso, esse erro ocorreu porque a autenticação do Android foi removida pela equipe sênior, pois parece que não há necessidade de chave do Android na autenticação de backend. Portanto, as chaves de cliente Android e Web são necessárias no login do Google.
fonte
Experimente estas opções:
Ele solicita a senha e apenas digite a senha. Você pode ver as impressões digitais SHA1, MD5.
fonte