GoogleService не удалось инициализировать
Я использую Google Maps в моем приложении для Android. Я создал ключ и добавил необходимые разрешения в файл манифеста. Но вскоре я запускаю приложение и получаю это сообщение в отладчике:
Не удалось инициализировать GoogleService, статус: 10, отсутствует ожидаемый ресурс: "R.string.google_app_id" для инициализации служб Google. Возможные причины: отсутствует плагин google-services.json или com.google.gms.google-services.
Я не уверен, что не так. Карта работает нормально, и я могу использовать ее без проблем. Мой файл Gradle имеет эту запись:
скомпилируйте com.google.android.gms:play-services:8.4.0
На что это жалуется и как мне облегчить это?
11 ответов
Вам нужно разместить файл конфигурации (google-services.json
), созданный developer.google.com, как указано во 2-м шаге официальных документов здесь
Процесс прост
- Вы можете выбрать свой проект или создать новый.
Затем, выбрав нужные сервисы (в данном случае сервис карт), вы можете сгенерировать файл конфигурации.
Для людей, которые мигрировали в проекты Firebase, они могут получить то же самое, перейдя в консоль Firebase, выбрав свой проект, и в настройках вы найдете файл конфигурации.
Тогда, как указано в шаге 3 официальных документов здесь
Скопируйте
google-services.json
файл, который вы только что загрузили в приложение / или мобильный / каталог вашего Android
PS: Если вы не согласны с ответом на этот вопрос, оставьте комментарий, почему вы голосуете против него.
[От менеджера по продукту @ 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 относится к вашему приложению в проекте, а не к самому проекту.
В моем случае причиной этой ошибки было то, что плагин 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
Я встретил ту же проблему и решил ее, следуя официальному решению.
Вот шаги:
получить файл конфигурации
google-services.json
по этой ссылке.Скопируйте
google-services.json
файл, который вы только что загрузили в каталог app/ или mobile / вашего проекта Android Studio.Добавьте зависимость к вашему уровню проекта build.gradle:
classpath 'com.google.gms:google-services:1.5.0-beta2'
Добавьте плагин к вашему приложению на уровне build.gradle:
apply plugin: 'com.google.gms.google-services'
Добавьте эту зависимость в ваш build.gradle уровня приложения:
dependencies { compile "com.google.android.gms:play-services:8.3.0" }
Для тех, кто сталкивается с этой проблемой даже после правильной настройки игровых сервисов и размещения google-services.json
файл в project/app
папка, реальное решение заключается в
Build > Rebuild Project
Возможно, из-за того, что строки из файла json не интегрированы в скомпилированные ресурсы, пока не будет выполнена полная перестройка.
Для 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
Вы можете изменить versionCode
а также versionName
вашего приложения в вашем файле Gradle.
У меня была такая же проблема тогда. Был в состоянии решить это, используя только необходимые библиотеки служб воспроизведения, которые в моем случае GCM.
Вместо com.google.android.gms:play-services:8.4.0
, Я использую com.google.android.gms:play-services-gcm:8.4.0
, Смотрите здесь для получения дополнительной информации; это также решает проблему мультидекса.
Затем я применил оба подхода @Radix и @Alexander, чтобы удалить сообщение, которое GCM выводил в logcat относительно google-services.json
,
Быстрое исправление, которое я использовал, - отключить подпись. Если вы не хотите создавать производственный код, вы можете настроить вариант сборки на отладку, localOldDebug или localDebug.
Нажмите на вариант сборки в левом нижнем углу в Android Studio.
как к отключить сгенерированный-зарегистрировано APK-андроид-студия
Это также случилось со мной. В моем случае это связано с тем, что студия Android пыталась вставить какой-то код в мою основную деятельность. Удаление кода исправляет ошибку
Вставленный код предназначен для индексирования приложений:
Просто есть другое решение, которое я удаляю случайно
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
Добавьте это и работайте, для нового решения