GoogleService falhou ao inicializar

113

Estou usando o Google Maps em meu aplicativo Android. Eu criei a chave e adicionei as permissões necessárias no arquivo de manifesto. Mas logo eu inicio o aplicativo e recebo esta mensagem no depurador:

Falha ao inicializar GoogleService, status: 10, recurso esperado ausente: 'R.string.google_app_id' para inicializar serviços do Google. As possíveis causas são a ausência do plug-in google-services.json ou com.google.gms.google-services gradle.

Eu não tenho certeza do que está errado. O mapa está funcionando bem e posso usá-lo sem problemas. Meu arquivo gradle tem esta entrada:

compilar 'com.google.android.gms: play-services: 8.4.0'

Do que ele está reclamando e como faço para aliviá-lo?

Zach
fonte
está em seu manifesto: <meta-data android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue
Eu tentei os dois, mas continuo recebendo a mesma mensagem!
Zach
1
O APK dos serviços de reprodução do seu dispositivo está atualizado?
Abhigyan de
Nenhuma dessas soluções estava funcionando, mas atualizar o APK de serviços parecia funcionar!
midoriha_senpai

Respostas:

38

Você precisa colocar o arquivo de configuração ( google-services.json) gerado por developer.google.com , conforme mencionado na 2ª etapa dos documentos oficiais aqui

O processo é simples

  1. Você pode selecionar seu projeto ou criar um novo.
  2. Depois de selecionar os serviços desejados (neste caso o serviço de mapas), você pode gerar o arquivo de configuração.

    Para as pessoas que migraram para os projetos do Firebase, eles podem fazer o mesmo acessando o Firebase Console , selecionando seu projeto e, nas configurações, você encontrará o arquivo de configuração.

  3. Então, conforme citado na etapa 3 dos documentos oficiais aqui

    Copie o google-services.jsonarquivo que você acabou de baixar no diretório app / ou mobile / do seu Android

PS: Para as pessoas que estão votando contra esta resposta, por favor, deixe um comentário explicando porque você está votando contra ela.

Nishant.
fonte
6
Precisamos realmente disso em nossos aplicativos com a nova versão do Google Play Services? Ou é apenas para fazer login no Google? Parece estranho que os logs
gerem
2
@Radix ... Acessei o link que você compartilhou, mas ele me pediu para me registrar no Google Sign In ou no Google Cloud Messaging ... nada sobre o mapa. Qualquer ideia? Além disso, copiar este arquivo json diretamente em / app é meio estranho ... você pode esclarecer? Muito obrigado!
Johnny Wu
2
Já tínhamos google-services.json em nosso aplicativo, mas tivemos que recriá-lo ao atualizar para 8.4.0.
Roy Solberg
1
mesmo problema, adicionar google-services.json não ajudou, coisa estranha que ele não vê meu gcm já ativado e quer criar a cada vez sua própria chave de servidor
Andrew V.
11
Veja a resposta correta aqui do gerente de produto do Google: stackoverflow.com/questions/34365369/…
Ahmed Mounir
52

[De Product Manager @ Google]

Você pode corrigir esse problema baixando e copiando o google-services.jsonarquivo para seu aplicativo Android seguindo as etapas abaixo:

  • Selecione o nome do seu aplicativo / projeto e o nome do pacote Android neste link e clique em Continue to Choose and configure services.
  • Clique Continue to Generate Configuration files.
  • Baixe google-services.jsone copie o arquivo para o diretório do módulo app/ou mobile/em seu projeto Android.

Se você importou anteriormente seu projeto do Google para o Firebase, pode obter o google-services.json atualizado no Firebase console em Configurações do projeto.

NÃO COPIE PROJECT_NUMBER conforme sugerido por uma das outras respostas, pois google_app_id se refere ao seu aplicativo dentro de um projeto e não ao próprio projeto.

Sriram
fonte
1
Para pessoas que usam o plug-in gradle-experimental, google-services.json não terá efeito direto. Consulte stackoverflow.com/a/38097895/457137 para obter uma solução alternativa.
zevoid
Por que é obrigatório incluir o arquivo json? Por que não posso fornecer o id em tempo de execução no código?
der_michael
O arquivo vai no diretório / app , não no diretório de nível superior?
IgorGanapolsky
11

No meu caso, a causa desse erro foi que o plugin do Google Services para Gradle e a biblioteca do Play Services eram versões incompatíveis. Instruções para versões compatíveis:

1) Adicione a dependência ao build.gradle de nível de projeto:

classpath 'com.google.gms:google-services:1.5.0-beta2'

2) Adicione o plug-in ao build.gradle de nível de aplicativo:

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

3) Se você estiver usando o Android Studio, esta é a string a ser adicionada à seção de dependência do arquivo build.gradle do seu aplicativo:

dependencies {
  compile "com.google.android.gms:play-services:8.3.0"
}

Fonte: https://developers.google.com/cloud-messaging/android/client

13rac1
fonte
1
Obrigado, mas isso não funcionou para mim - o Android Studio insiste que eu tenho o arquivo google-services.json também instalado, embora eu ache desnecessário se você seguir as três etapas acima, que devem substituir a necessidade do arquivo? O que me leva a perguntar: por que preciso de um sistema de login de usuário do Google se tudo o que estou fornecendo é um mapeamento básico?
iaindownie
1
Minha solução não estava listada, então respondi à pergunta para dar às pessoas outra solução potencial para esse problema. No seu caso, você pode ter bibliotecas extras instaladas. Tente usar apenascom.google.android.gms:play-services-maps:8.4.0
13rac1
@eosrei, usando apenas com.google.android.gms: play-services-maps: 8.4.0 funcionou para mim, obrigado!
akshay7692
4

Encontrei o mesmo problema e resolvi seguindo a solução oficial .

Aqui estão as etapas:

  1. obter o arquivo de configuração google-services.jsonde este link .

  2. Copie o google-services.jsonarquivo que você acabou de baixar no diretório app / ou mobile / do seu projeto Android Studio.

  3. Adicione a dependência ao build.gradle de nível de projeto:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. Adicione o plug-in ao build.gradle de nível de aplicativo:

    apply plugin: 'com.google.gms.google-services'
  5. Adicione esta dependência ao build.gradle de nível de aplicativo:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
Vai
fonte
1
Acho melhor usar com.google.gms: google-services: 1.5.0, pois é melhor do que a versão beta para remover alguns erros imprevisíveis em seu aplicativo.
Andrew V.
@AndrewV. Sim eu concordo. A versão "1.5.0-beta2" foi copiada do link que dei acima.
Será
1

Para aqueles que enfrentam esse problema mesmo depois de configurar corretamente os serviços de reprodução e colocar o google-services.jsonarquivo na project/apppasta, a solução real é

Build > Rebuild Project

Possivelmente devido ao fato de que as strings do arquivo json não são integradas aos recursos compilados até que uma reconstrução completa seja executada.

anandbibek
fonte
1

Para Xamarin / Visual Studio Mac, eu precisava adicionar isso na parte inferior do meu Droid.csproj

<Target Name="ProcessGoogleServicesJson" Condition=" '@(GoogleServicesJson)' != '' AND '$(AndroidApplication)' == 'True' AND '$(DesignTimeBuild)' != 'True'" BeforeTargets="$(ProcessGoogleServicesJsonBeforeTargets)" AfterTargets="$(ProcessGoogleServicesJsonAfterTargets)">
<Message Text="Using ProcessGoogleServicesJson override" Importance="high" />
<ProcessGoogleServicesJson GoogleServicesJsons="@(GoogleServicesJson)" IntermediateOutputPath="$(IntermediateOutputPath)" MonoAndroidResDirIntermediate="$(MonoAndroidResDirIntermediate)" AndroidPackageName="$(_AndroidPackage)">
    <Output ItemName="_AndroidResourceDest" TaskParameter="GoogleServicesGeneratedResources" />
    <Output ItemName="FileWrites" TaskParameter="GoogleServicesGeneratedResources" />
</ProcessGoogleServicesJson>
<ItemGroup>
    <FileWrites Include="$(IntermediateOutputPath)\ProcessGoogleServicesJson.stamp" />
</ItemGroup>

https://github.com/xamarin/GooglePlayServicesComponents/issues/64

estepe
fonte
0

Eu tive o mesmo problema naquela época. Consegui resolver usando apenas a biblioteca de serviços de jogo necessária, que no meu caso GCM.

Em vez de com.google.android.gms:play-services:8.4.0, eu uso com.google.android.gms:play-services-gcm:8.4.0. Veja aqui para mais informações; isso também resolve o problema do multidex.

Em seguida, apliquei a abordagem de @Radix e @Alexander para remover a mensagem que o GCM foi gerado no logcat em relação ao google-services.json.

emen
fonte
0

Você pode alterar o versionCodee versionNamedo seu aplicativo no arquivo Gradle.

F. Milliard
fonte
0

Uma solução rápida que usei foi desativar a assinatura. Se você não deseja criar um código de produção, pode definir sua variante de compilação como debug, localOldDebug ou localDebug.

Clique em Build Variants no canto inferior esquerdo do Android Studio.

como desativar o apk-android-studio-gerado-assinado

Dudas
fonte
poderia fazer pergunta como comentário
jjj
-2

Só tenho outra solução que vou remover acidentalmente

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

Adicione isso e trabalhe, é para uma nova solução

Cazs
fonte