Flutter e plug-in google_sign_in: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 10:, null)


100

A caixa de diálogo (formulário do Google) para as credenciais foi aberta com êxito, mas depois de preencher minhas credenciais, recebo este erro. Eu segui as instruções daqui . Criei um projeto Firebase, habilitei a API Google Drive (é disso que eu preciso agora) do Console de APIs do Google.

O código que lança a exceção:

final GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'https://www.googleapis.com/auth/drive',
  ],
);

await _googleSignIn.signIn();

Esse é o rastreamento de pilha:

E/flutter ( 5068): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 5068): PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null)
E/flutter ( 5068): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7)
E/flutter ( 5068): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292:18)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #2      GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:226:58)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #3      GoogleSignIn._addMethodCall (package:google_sign_in/google_sign_in.dart:268:20)
E/flutter ( 5068): #4      GoogleSignIn.signIn (package:google_sign_in/google_sign_in.dart:339:48)
E/flutter ( 5068): #5      ThatsMyComponentState.theSignInFuction.<anonymous closure> (package:my_app/widgets/my_file.dart:666:45)
E/flutter ( 5068): <asynchronous suspension>
E/flutter ( 5068): #6      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter ( 5068): #7      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter ( 5068): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter ( 5068): #9      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter ( 5068): #10     TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter ( 5068): #11     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter ( 5068): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:184:20)
E/flutter ( 5068): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
E/flutter ( 5068): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
E/flutter ( 5068): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
E/flutter ( 5068): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
E/flutter ( 5068): #17     _invoke1 (dart:ui/hooks.dart:168:13)
E/flutter ( 5068): #18     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

A versão do plug-in google_sign_in é 4.0.0.

Essa é a saída de flutter doctot -v :

[√] Flutter (Channel stable, v1.0.0, on Microsoft Windows [Version 10.0.17763.253], locale en-US)
• Flutter version 1.0.0 at C:\src\flutter-0.7.3\flutter
• Framework revision 5391447fae (10 weeks ago), 2018-11-29 19:41:26 -0800
• Engine revision 7375a0f414
• Dart version 2.1.0 (build 2.1.0-dev.9.4 f9ebf21297)

[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
• Android SDK at C:\Users\myuser\AppData\Local\Android\Sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-28, build-tools 28.0.3
• ANDROID_HOME = C:\Users\myuser\AppData\Local\Android\Sdk
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)
• All Android licenses accepted.

[√] Android Studio (version 3.3)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin version 32.0.1
• Dart plugin version 182.5124
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1248-b01)

[!] IntelliJ IDEA Community Edition (version 2018.1)
• IntelliJ at C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.6
X Flutter plugin not installed; this adds Flutter specific functionality.
X Dart plugin not installed; this adds Dart specific functionality.
• For information about installing plugins, see
  https://flutter.io/intellij-setup/#installing-the-plugins

[!] VS Code, 64-bit edition (version 1.30.2)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension not installed; install from
  https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[√] Connected device (1 available)
• Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

! Doctor found issues in 2 categories.

Qualquer ajuda será muito apreciada. Obrigado!


Para todos: preste atenção ao código de exceção ApiException: 10e consulte os documentos primeiro - developers.google.com/android/reference/com/google/android/gms/… Certifique-se de corrigir o problema correto. Por exemplo, o código 7 significaria apenas 'sem conexão com a Internet'.
Kirill Karmazin de

Execute ./gradlew assinaturaReport, está na pasta do aplicativo Android. Adicione SHA1 na configuração do Google Firebase Google Sign in. developers.google.com/android/guides/client-auth . Você precisará de um SHA1 para cada computador em que trabalhar.
viver-amar

@KirillKarmazin alguma idéia do que é 12500? E / flutter (23795): [ERROR: flutter / lib / ui / ui_dart_state.cc (157)] Exceção não tratada: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 12500:, null)
raiton

Respostas:


155

Eu me deparo com o mesmo problema agora. Isso pode acontecer se você estiver executando em depuração e não registrar uma SHAimpressão digital no firebase. Resolvi isso gerando um debug.keystoree registrando-o dentro do aplicativo no Firebase. Não se esqueça de baixar o novo google-services.jsondepois disso. Veja também isso .

insira a descrição da imagem aqui

Editar Se você não conseguir usar a autenticação no modo de liberação, tente o seguinte:

-Adicione as impressões digitais do certificado SHA da chave de liberação.

keytool -exportcert -list -v \ -alias <your-key-name> -keystore <path-to-production-keystore>

Para mais detalhes sobre isso veja aqui na seção "get release certificate" https://developers.google.com/android/guides/client-auth

Se a sua autenticação ainda não estiver funcionando, provavelmente é porque você baixou o aplicativo da Playstore e ativou o "App Signing by Google Play Feature". Nesse caso, acesse o console de publicação da play store e vá para a assinatura do aplicativo sob gerenciamento de lançamento. Lá você encontrará a impressão digital do certificado SHA para registrar no Firebase console.

insira a descrição da imagem aqui


19
Obrigado por isso. Isso ajudou. Vale a pena observar que as chaves SHA1 e SHA256 tiveram que ser adicionadas para que a autenticação funcionasse
Srini

2
Aceite isso como resposta.
Muruganandham K

@TSR funcionou, mas não precisei baixar um novo google-services.json.
Darren Cole

2
Para sua informação, tive o mesmo erro mesmo depois de configurar minhas impressões digitais do sha. Acontece que eu também tive que adicionar um endereço de e-mail de suporte por github.com/flutter/flutter/issues/25909#issuecomment-497378619 .
Michael Nelson

@MichaelNelson, esse era o meu problema também
Tobias

44

A seguinte solução funciona em projeto de flutter:

Etapa 1: gere as chaves SHA1 e SHA256 .
Etapa 2: adicionar SHA1 e SHA256 ao firebase. (nas configurações do seu aplicativo)
Etapa 3: Baixe google-services.json para android / app na pasta do seu projeto.
Etapa 4: Em seu terminal, execute o comando flutter clean.
Etapa 5: execute seu aplicativo de vibração.

Para obter mais informações, visite:
https://developers.google.com/android/guides/client-auth
https://firebase.google.com/docs/flutter/setup


10
limpar é muito importante
mkkhedawat

29

Quando me deparei com esse problema, tentei todas as outras soluções descritas neste post. Nenhum desses funcionou. Eventualmente eu descobri: na minha situação, eu precisava ter certeza de ter meu "e-mail de suporte" definido.

Email de suporte de configuração pública


Isso funcionou para mim.
dvallejo

27

Você precisa configurar seu projeto Google Cloud Api com seu pacote.

https://developers.google.com/identity/sign-in/android/start-integrating#configure_a_project

Certifique-se de estar conectado com a mesma conta do Firebase

  1. Selecione seu projeto Firebase
  2. Selecione Android
  3. Abra o terminal dentro do seu projeto de flutter
  4. cd android
  5. ./gradlew signingReport ou gradlew signingReport
  6. Cole o nome do pacote e a chave SHA1
  7. Baixar informações do cliente
  8. Baixe e substitua o google-services.json
  9. flutter clean

IOS:

  1. Selecione seu projeto Firebase
  2. Selecione IOS
  3. Insira seu ID de pacote
  4. Baixar credetials
  5. Baixe e substitua GoogleService-info.plist

2
gradlew SignReport me ajuda muito, porque primeiro eu apenas uso o keystore errado. E com esse comando, você obtém definitivamente o certo.
BHuelse

25

Passei muito tempo tentando consertar isso.

1. Abra grade.properties Este arquivo está localizado em: {{YOUR PROJECT}} / android / gradle.properties

insira a descrição da imagem aqui

2. Adicione o seguinte argumento a 'org.gradle.jvmargs' conforme mostrado na captura de tela.

-XX: MaxHeapSize = 256m -Xmx256m

insira a descrição da imagem aqui

3. Clique com o botão direito em 'gradlew' e vá para 'Abrir no Terminal'. Este arquivo pode ser encontrado em {{SEU PROJETO}} / android / gradlew

insira a descrição da imagem aqui

4. Digite o seguinte comando.

gradlew signingReport

Se não funcionou, tente primeiro o segundo comando:

./gradlew signingReport

5. Espere que a compilação termine e suas chaves SHA sejam impressas para você.

insira a descrição da imagem aqui

Use essas chaves para autenticar seu aplicativo em https://console.firebase.google.com/


1
Para mim, essa é a única coisa que funcionou, meu keytool gerou não funcionar SHA-1 / SHA-256
PRO GRAMMER

4
Se a etapa 4 não funcionar, chame gradlew assim: ./gradlew cleaningReport
Tincho825

1
Chiming para dizer isso também é a única coisa que funcionou para mim. Tentei de tudo e passei dias tentando resolver o problema antes de encontrar isso.
Mark Rawlingson

Recebendo este erro: Não foi possível inicializar a classe org.codehaus.groovy.runtime.InvokerHelper
Ramis

este é o método mais fácil! isso deve ser aceito.
reverie_ss

11

Para mim, não precisei adicionar SHAs extras, percebi que não habilitei o método de login do Google na guia Autenticação do console do Firebase

Ativando o método de login do Google no Firebase console


7

Etapas adicionais que você pode ter que seguir para que google_sign_in funcione:

] [2]

  • Se você pudesse executar o Google Sign In durante a depuração, mas NÃO na versão, há uma grande chance de que você não adicionou o SHA1 e o SHA256 da chave de lançamento ao firebase. Para obter os SHAs da chave de liberação, usekeytool -list -v -keystore ~/key.jks -alias key

console Você deve terminar com um total de pelo menos 6 credenciais SHA : 2 da chave de depuração, 2 da vinculação do Google Play e 2 da chave de liberação. Observe que você não precisa baixar novamente o arquivo google-services.json após adicionar as credenciais SHA de lançamento ao firebase.

Firebase

# Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

# GooglePlay Services
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class com.google.common.** { *; }
-dontwarn com.google.common.**

7

Você perdeu a etapa de configuração para ativar o login do Google no Firebase.

O login do Google é configurado automaticamente em seus aplicativos iOS e web conectados. Para configurar o login do Google para seus aplicativos Android, você precisa adicionar a impressão digital SHA1 para cada aplicativo nas configurações do projeto.

Basta concluir estas etapas suficientes abaixo

  1. Ativar método de autenticação do Google
  2. Configure as impressões digitais do certificado em seu projeto atual em project-level setting. Como gerar o certificado .
  3. Selecione o e-mail para o e-mail de suporte do Projeto
  4. Baixe google-service.jsonem seu projeto.
  5. Corre flutter clean
  6. começar flutter run

imagem


6

"Flutter clean" é a peça que falta a todos depois de registrar o SHA1 no Firebase Console!


4

Para a exceção de plataforma 10, tente o seguinte:

  1. Gere uma nova impressão digital SHA1 em sua máquina,
  2. Acesse a configuração do aplicativo Firebase para Android no Firebase Console
  3. Clique em adicionar nova impressão digital nas configurações do aplicativo Android
  4. Cole a nova impressão digital SHA1 no campo
  5. Gerar um novo arquivo de configuração json
  6. Substitua o arquivo de configuração no diretório android
  7. Executar vibração limpa
  8. Execute seu projeto

3

Um dos motivos pelos quais você pode estar enfrentando esse erro é não ter preenchido o formulário de consentimento OAuth do Google. Esta é uma nova mudança no Firebase.

Aqui estão as etapas que você precisa seguir para preencher o formulário de consentimento para seu aplicativo:

  1. Navegue até o console da API do Google (atualmente em https://console.developers.google.com ), certifique-se de estar conectado à sua conta na qual seu projeto Firebase foi criado.
  2. Selecione seu projeto na lista suspensa "selecionar um projeto" no canto superior esquerdo do console do desenvolvedor.
  3. No painel esquerdo, vá até "credenciais" e mude para a "tela de consentimento OAuth".
  4. Em "Nome do aplicativo", insira o nome público do seu aplicativo
  5. Em "Logotipo do aplicativo", carregue um arquivo de imagem local do seu aplicativo
  6. Em "Support email", insira o mesmo e-mail de suporte listado no seu aplicativo Firebase.

Sua tela agora deve se parecer com este exemplo na etapa 6

  1. Role para baixo e preencha o "Link da página inicial do aplicativo", "Link da política de privacidade do aplicativo" e "Link dos termos de serviço do aplicativo" adicionando http: // antes do domínio autorizado em que seu aplicativo Firebase reside.

Aqui está um exemplo destacado de como essas regiões devem ser preenchidas na etapa 7

  1. Clique em Salvar

Essas etapas funcionaram para mim! Embora o link ainda não exista, gostaria de fazer referência à fonte desta solução aqui


É realmente uma resposta à pergunta?
Bulat

Obrigado pelo feedback. Tentei atualizar minha resposta para ser mais específico - por favor, deixe-me saber se agora é apropriado - e se não, como posso melhorá-lo.
Ben Elliott

1
Você precisa "Enviar para verificação" ou apenas "Salvar"?
Mais simples

2

Isso pode parecer bobo, mas isso aconteceu comigo agora (depois de ter alguma experiência trabalhando com o firebase no passado). Percebi que não habilitei a autenticação do Google. Certifique-se de fazer isso, pois você ainda poderá ver o prompt de login (mostrando os usuários do Google do seu telefone, sem estar habilitado).


onde eu habilito o thant?
Ahmed Albarody

@AhmedAlbarody Em seu console do firebase - escolha a autenticação e, em seguida, você precisa habilitar os serviços que deseja usar.
Guy

1

Certifique-se de que SHA-1 deve ser uma chave de depuração gerada apenas em seu sistema e, em seguida, baixe o arquivo google-services.json e anexe-o ao seu projeto


1

certifique-se de ter adicionado

 dependencies {
    classpath 'com.google.gms:google-services:4.2.0'
}

em android / build.gradle e

apply plugin: 'com.google.gms.google-services'

em android / app / build.gradle . Além disso, certifique-se de que applicationId em android / app / build.gradle seja igual ao nome do seu pacote em AndroidManifest.xml (você pode esquecer de alterar o applicationId depois de alterar o nome do pacote às vezes). Este aplicatioonId ou nome do pacote no arquivo de manifesto deve ser o nome do seu pacote android no aplicativo firebase.


1

Você deve gerar SHA-1 e SHA-256 para cada PC usado. E adicione-os todas às configurações do projeto Firebase.

E você deve preencher o formulário na guia Consentimento OAuth .



1

No entanto, as respostas fornecidas acima estão corretas, mas ainda assim, se você estiver tendo problemas, não se esqueça de verificar a seção subscriptionConfig {} do app / build.gradle. Ele não deve ter nenhuma referência de arquivo de armazenamento de chave indesejada, o que pode estar causando uma incompatibilidade com google-services.json e o armazenamento de chave.


1

No meu caso, foi um erro bobo, certifique-se de que seu applicationId no firebase como: 'com.example.appname' corresponda exatamente ao applicationId em seu arquivo app / src / build.gradle, em defaultConfig {}. Sem erros de ortografia , sem maiúsculas, conflito de letras minúsculas. No meu caso, uma letra era maiúscula, o que causou todos os problemas.


0

Em android / app / build.gradle , alterei as dependências de com.android.tools.build:gradle:3.1.3 / com.google.gms: google-services: 3.2.1 para com.android.tools.build:gradle : 3.2.1 / com.google.gms: google-services: 4.2.0 . E funcionou.


0

Ao registrar o aplicativo no Firebase, alterei meu applicationId para algo adequado ao meu aplicativo. No entanto, isso resultou na instalação de um segundo aplicativo Flutter no meu telefone quando executei o depurador (claro, devido à alteração no applicationId). Então, o que funcionou para a minha situação foi removetanto as instalações quanto re-installo aplicativo.


0

Tentei de tudo acima e nada funcionou. Meu erro foi que eu tinha várias pastas de versão do Android Studio na minha unidade e estava alimentando a chave SHA1 errada nas configurações do firebase.


0

Criar um appbundle (recomendado pelo Google Play e pelo Flutter) causará esse erro. Construir um apk resolverá isso.

Veja o problema 58194425


0

Eu tive o problema e levei 5 horas para resolvê-lo. Lembro que li em algum lugar que API Exception 10 significa que há um problema com as impressões digitais. Portanto, tinha que ser o keystore ou uma configuração incorreta no firebase. Eventualmente, era o keystore. Ainda não sei por que isso funcionou, mas isso é o que eu fiz, a propósito, estou usando o Windows 10:

1.) Certifique-se de que no arquivo android / build.gradle eu tinha o seguinte:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

2.) Eu adicionei essas duas linhas ao arquivo android / gradle.properties

android.useAndroidX=true
android.enableJetifier=true

3.) Navegou para C: \ Users \ YOURUSER \ .android e excluiu o seguinte:

debug.keystore
debug.keystore.lock

4.) Abra o terminal como admin e gere o keystore de depuração neste diretório.

$ keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

Obteve as impressões digitais:

$ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android 

5.) Adicionadas as impressões digitais SHA1 à configuração no firebase

Isso foi tudo do meu lado. Eu espero que isso ajude alguém.


0

Certifique-se de que os certificados de assinatura que você está usando no console do firebase são os mesmos usados ​​em SignConfigs >> configuração de depuração no arquivo app / build.gradle enquanto ainda está em desenvolvimento. Falha de correspondência causa erro.


0

Isso consertou para mim. Fiz uma pequena refatoração em um novo projeto. Achei que estava usando meu google-services.jsonarquivo antigo, mas estava usando o arquivo errado. Tentei de tudo por dois dias antes de perceber esse erro simples.


0

Isso foi ajudado para mim (foi um problema ao importar o SHA1)

cd .android i usei e copiei a chave SHA1 e colei no firebase, configuração do projeto, aplicativo Android, certificado SHA

keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android

e também criei mais uma chave com:

keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkeytwo -keypass android -keyalg RSA -keysize 2048 -validity 10000

e usei isso para pegar mais uma chave SHA:

keytool -list -v -keystore debug.keystore -alias androiddebugkeytwo -storepass android -keypass android

Copiei e colei adicionando mais uma chave no meu projeto Firebase.

também baixou google-services.json e colou em Android / app dentro do projeto flutter.

Isso funcionou corretamente, minhas dependências pubspec.yml:

  http: ^0.12.0+2
  cupertino_icons: ^0.1.2
  firebase_auth: ^0.15.1
  firebase_analytics: ^5.0.6
  firebase_core: ^0.4.2+1
  google_sign_in: ^4.0.14

meu código:

    Widget _signInButton() {
    return OutlineButton(
      splashColor: Colors.grey,
      onPressed: () async {
        await signInWithGoogle()
            .then((FirebaseUser user) => print(user.displayName))
            .catchError((e) => print(e));

      },

    );
  }

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = new GoogleSignIn();

Future<FirebaseUser> signInWithGoogle() async {
  final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount.authentication;

  final AuthCredential credential = GoogleAuthProvider.getCredential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  final AuthResult authResult = await _auth.signInWithCredential(credential);
  final FirebaseUser user = authResult.user;
  print(user.displayName.toString());
  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final FirebaseUser currentUser = await _auth.currentUser();
  assert(user.uid == currentUser.uid);

  return user;
}

void signOutGoogle() async {
  await googleSignIn.signOut();

  print("User Sign Out");
}

Espero que funcione.



0

Eu recebo este erro: PlatformException (sign_in_failed, com.google.android.gms.common.api.ApiException: 7 null) Talvez a solução seja boa para você.

E percebi que meu dispositivo de depuração (modo de depuração do Android) não está conectado à internet. Acho que a autenticação falhou, então o método retorna nulo ou usuário igual a nulo.

A variável retornada deve verificar antes de usar.


Acho difícil acompanhar sua resposta: você pode obter ajuda usando o inglês (não é o meu primeiro idioma)?
Barba Cinzenta de

0

No meu caso, nenhuma das respostas resolveu o problema. Depois de pensar um pouco, percebi que há algum tempo mudei o nome do pacote do meu aplicativo . Se for o seu caso, você deve simplesmente criar outro aplicativo dentro do seu projeto Firebase com seu novo nome de pacote e baixar o arquivo google-services.json novamente.


0

Se seu aplicativo lançado não estiver funcionando corretamente e você estiver usando o Google Play Signing, copie o SHA de sua conta da Play Store , o de sua chave local não funcionará insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.