GoogleService не удалось инициализировать

113

Я использую Карты Google в своем приложении для Android. Я создал ключ и добавил необходимые разрешения в файл манифеста. Но вскоре я запускаю приложение и получаю в отладчике такое сообщение:

GoogleService не удалось инициализировать, статус: 10, Отсутствует ожидаемый ресурс: 'R.string.google_app_id' для инициализации сервисов Google. Возможные причины: отсутствует плагин google-services.json или com.google.gms.google-services gradle.

Я не уверен, что случилось. Карта работает нормально, и я могу использовать ее без каких-либо проблем. В моем файле gradle есть эта запись:

скомпилировать com.google.android.gms: play-services: 8.4.0 '

На что он жалуется и как мне это облегчить?

Zach
источник
это в вашем манифесте: <meta-data android: name = "com.google.android.gms.version" android: value = "@ integer / google_play_services_version" />
j2emanue
Посмотрите на шаг 2: developers.google.com/identity/sign-in/android/start?hl=en
Клейтон Оливейра
Я пробовал оба, но все равно получаю то же сообщение!
Zach
1
Обновлен ли apk сервисов воспроизведения на устройстве?
Abhigyan
Ни одно из этих решений не помогло, но обновление APK служб, похоже, помогло!
midoriha_senpai

Ответы:

38

Вам необходимо разместить файл конфигурации ( google-services.json), сгенерированный developer.google.com , как указано на втором этапе официальных документов здесь.

Процесс прост

  1. Вы можете выбрать свой проект или создать новый.
  2. Затем, выбрав желаемые службы (в данном случае службу карт), вы можете сгенерировать файл конфигурации.

    Для людей, которые перешли на проекты Firebase, они могут получить то же самое, перейдя в Firebase Console , выбрав свой проект и в настройках вы найдете файл конфигурации.

  3. Затем, как указано в шаге 3 официальных документов здесь

    Скопируйте google-services.jsonфайл, который вы только что скачали, в каталог app / или mobile / вашего Android-устройства.

PS: Для людей, проголосовавших против этого ответа, пожалуйста, оставьте комментарий о том, почему вы его голосуете против.

Нишант.
источник
6
Действительно ли нам это нужно в наших приложениях с новой версией сервисов Google Play? Или это просто для входа в Google? Кажется странным, что журналы выдают мне ошибки, как будто они мне нужны, но я не могу
RED_ 08
2
@Radix ... Я перешел по ссылке, которой вы поделились, но она попросила меня зарегистрироваться для входа в Google или Google Cloud Messaging ... ничего о карте. Любая идея? Кроме того, копирование этого json-файла прямо в / app немного странно ... вы можете уточнить? Большое спасибо!
Джонни Ву,
2
У нас уже был google-services.json в нашем приложении, но нам пришлось воссоздать его при обновлении до 8.4.0.
Рой Сольберг
1
та же проблема, добавление google-services.json не помогло, странно, что он не видит мой уже активированный gcm и хочет каждый раз создавать собственный ключ сервера
Эндрю В.
11
См. Правильный ответ менеджера по продукту в Google: stackoverflow.com/questions/34365369/…
Ахмед Мунир
52

[От менеджера по продукту @ Google]

Вы можете решить эту проблему, загрузив и скопировав google-services.jsonфайл для своего Android-приложения, выполнив следующие действия:

  • Выберите название своего приложения / проекта и название пакета Android по этой ссылке и нажмите Continue to Choose and configure services.
  • Щелкните Continue to Generate Configuration files.
  • Загрузите google-services.jsonи скопируйте файл в каталог модуля app/или mobile/в своем проекте Android.

Если вы ранее импортировали свой проект Google в Firebase, вы можете получить обновленный файл google-services.json из консоли Firebase в настройках проекта.

НЕ КОПИРУЙТЕ PROJECT_NUMBER, как это было предложено в одном из других ответов, поскольку google_app_id относится к вашему приложению в рамках проекта, а не к самому проекту.

Sriram
источник
1
Для людей, использующих плагин gradle-experimental, google-services.json не вступит в силу напрямую. Пожалуйста, обратитесь к stackoverflow.com/a/38097895/457137 для решения проблемы.
zevoid
Почему обязательно включать файл json? Почему я не могу указать идентификатор во время выполнения в коде?
der_michael
Файл находится в каталоге / app , а не в каталоге верхнего уровня?
Игорь Ганапольский 03
11

В моем случае причиной этой ошибки было то, что плагин Google Services для Gradle и библиотека Play Services были несовместимыми версиями. Инструкции для совместимых версий:

1) Добавьте зависимость к build.gradle на уровне проекта:

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

2) Добавьте плагин в build.gradle на уровне приложения:

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

3) Если вы используете Android Studio, это строка, которую нужно добавить в раздел зависимостей файла build.gradle вашего приложения:

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

Источник: https://developers.google.com/cloud-messaging/android/client

13rac1
источник
1
Спасибо, но это не сработало для меня - Android Studio настаивает на том, что у меня также установлен файл google-services.json, хотя я счел это ненужным, если вы выполнили три приведенных выше шага, которые должны перекрыть необходимость в файле? Это заставляет меня задаться вопросом: зачем мне система входа пользователей Google, если все, что я предлагаю, - это базовое отображение?
iaindownie 04
1
Моего решения не было в списке, поэтому я ответил на вопрос, чтобы дать людям другое возможное решение этой проблемы. В вашем случае у вас могут быть установлены дополнительные библиотеки. Попробуйте использовать толькоcom.google.android.gms:play-services-maps:8.4.0
13rac1 04
@eosrei, у меня работал только com.google.android.gms: play-services-maps: 8.4.0, спасибо!
akshay7692
4

Я столкнулся с той же проблемой и решил ее, следуя официальному решению .

Вот шаги:

  1. получить файл конфигурации google-services.jsonот этой ссылки .

  2. Скопируйте google-services.jsonфайл, который вы только что скачали, в каталог app / или mobile / вашего проекта Android Studio.

  3. Добавьте зависимость в build.gradle на уровне проекта:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. Добавьте плагин в build.gradle на уровне приложения:

    apply plugin: 'com.google.gms.google-services'
  5. Добавьте эту зависимость в build.gradle на уровне приложения:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
Будет
источник
1
Я думаю, что лучше использовать com.google.gms: google-services: 1.5.0, так как это лучше, чем бета-версия, чтобы удалить некоторые непредсказуемые ошибки в вашем приложении.
Эндрю В.
@AndrewV. Да, я согласен. Версия 1.5.0-beta2 была скопирована по ссылке, которую я дал выше.
Уилл
1

Для тех, кто сталкивается с этой проблемой даже после правильной настройки игровых сервисов и помещения google-services.jsonфайла в project/appпапку, реальным решением является

Build > Rebuild Project

Возможно, из-за того, что строки из json-файла не интегрируются в скомпилированные ресурсы до тех пор, пока не будет выполнено полное перестроение.

anandbibek
источник
1

Для Xamarin / Visual Studio Mac мне нужно было добавить это в конец моего 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

stepheaw
источник
0

Это тоже случилось со мной. В моем случае это связано с тем, что студия Android пыталась вставить код в мое основное действие. Удаление кода исправляет ошибку

Вставленный код касается индексации приложений:

https://developers.google.com/app-indexing/android/publish

Супербиджи
источник
0

Тогда у меня была такая же проблема. Смог решить эту проблему, используя только необходимую библиотеку игровых сервисов, которая в моем случае GCM.

Вместо этого com.google.android.gms:play-services:8.4.0я использую com.google.android.gms:play-services-gcm:8.4.0. См. Здесь для получения дополнительной информации; это также решает проблему multidex.

Затем я применил подходы @Radix и @ Alexander, чтобы удалить сообщение, которое GCM выводит в logcat относительно файла google-services.json.

Emen
источник
0

Вы можете изменить versionCodeи versionNameсвоего приложения в файле Gradle.

Ф. Миллиард
источник
0

Быстрое решение я использовал , чтобы отключить подпись. Если вы не хотите создавать производственный код, вы можете установить свой вариант сборки на отладку, localOldDebug или localDebug.

Нажмите на варианты сборки в нижнем левом углу Android Studio.

как отключить сгенерированный подписанный apk-android-studio

Дудас
источник
может задать вопрос в качестве комментария
jjj
-2

Просто есть другое решение, которое я случайно удалил

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

Добавьте это и работайте, это новое решение

Cazs
источник