Что на самом деле делает google-services.json?

Я работаю над добавлением сервисов Google Analytics и GCM в мое текущее приложение. В руководстве по внедрению обеих служб google просит разработчика сгенерировать файл json: google-services.json и поместить его в корневой каталог приложения.

Я обнаружил, что даже если я удалю этот файл json из своего приложения, сервисы все равно будут работать.

Просто хочу знать наверняка, для чего этот файл на самом деле? Каково его использование и как оно работает?

3 ответа

Решение

Я немного исследовал в отношении плагина google-services и json и нашел источники для этого плагина.

Перво-наперво

Google-services gradle-plugin, на который ссылается classpath и с apply, является плагином времени сборки! Так что это влияет только на процесс сборки вашего приложения, но не на процесс выполнения!

Этот плагин предназначен только для быстрого начала быстрой интеграции Google-сервисов в ваше приложение. Очевидно, что этот процесс несколько запутан и не задокументирован, поэтому Google должен был дать понять, что делает этот процесс.

На самом деле я нашел исходный код версии плагина com.google.gms:google-services:1.4.0-beta3 и не нашел в нем никакой конкретной ссылки, касающейся appinvites, а также не нашел никакого API Google для приглашений в приложения! (Но, возможно, он просто использует общий API-проект со своим идентификатором проекта, я не пробовал это)

Что оно делает

Плагин google-services gradle-plugin ищет упомянутый файл google-services.json в вашем модуле приложения. Затем он ищет настроенные параметры, такие как идентификатор проекта, идентификатор отслеживания и т. Д., Сгенерированные консолью разработчика Google API в файле google-services.json. Из найденных настроек значения ресурсов Android генерируются по следующему пути:

$project.buildDir/generated/res/google-services/$variant.dirName/values/values.xml

Например, для отладочной сборки вашего приложения:

app/build/generated/res/google-services/debug/values/values.xml

Например, если вы следовали учебному пособию по GCM, файл JSON будет содержать идентификатор проекта API в качестве следующего ресурса android:

<string name="gcm_defaultSenderId">project-id</string>

Таким образом, этот плагин и файл JSON не являются необходимыми для запуска или публикации вашего приложения, это всего лишь быстрый помощник для создания некоторых основных файлов ресурсов Android для упрощения интеграции определенных функций Google API.

Обратите внимание, что в исходном коде, указанном ниже, плагин google-services всегда генерирует эти ресурсы android для каждого варианта приложения, определенного в вашем app/build.gradle.

Если вы не хотите этого, вы должны использовать эти сгенерированные ресурсы в нужных вам вариантах приложения и удалить остальные. Не забудьте удалить плагин google-services, применимый к app/build.gradle, иначе он будет восстановлен для всех вариантов приложения.

Что это не так

Этот плагин и JSON-файл НЕ напрямую влияют на внутреннюю работу указанных функций Google для вашего приложения! Если вы уже следовали более старым учебникам на developer.android.com по вопросам интеграции, например, GCM или Google Analytics, то вам даже не нужно интегрировать ни gdle-plugin google-services, ни файл google-services.json!

Обратите внимание, где я нашел источники

После того, как вы интегрировали плагин google-services gradle-и при синхронизации вашего проекта, Gradle автоматически загружает зависимость google-services по пути, подобному следующему (в Windows вам может понадобиться заглянуть в ваш home/.gradle для Linux):

C:\Users\user\.gradle\caches\modules-2\files-2.1\com.google.gms\google-services\1.4.0-beta3\f1580f62e3be313eba041ce19b64fd3f44cf8951\google-services-1.4.0-beta3-sources.jar

Если вы извлечете этот jar-файл, вы найдете два файла:

GoogleServicesPlugin.groovy
GoogleServicesTask.java

которые содержат простой исходный код Gradle-плагина.

GoogleServicesPlugin.groovy

содержит обработку вариантов приложения и основных определений путей и т. д.

GoogleServicesTask.java

содержит фактическое определение задачи, ищите следующий метод, чтобы увидеть, что он действительно делает:

@TaskAction
public void action() throws IOException { 

Для чего этот файл на самом деле:

google-services.json содержит учетные данные разработчика и параметры конфигурации, которые необходимо проверить при подключении к GoogleApiClient. Хотя ваш сервис работает нормально с вашим тестовым устройством, так как он обнаруживает вашу учетную запись разработчика, но после публичного выпуска приложения он не будет работать без файла json. Так что не удаляйте это.

Официальная документация гласит:

Приложение создает GoogleApiClient, определяя, какие области и API будут доступны приложению. Когда GoogleApiClient подключается, пользователь входит в систему.

Посмотрите, как это работает.

Добавьте google-services.json в свой модуль и выполните ЧИСТЫЙ и ПЕРЕЗАГОТОВИТЬ. XML-файл будет сгенерирован в app / build / generate / res / google-services / debug / values ​​/ values.xml со свойствами вашего проекта, и вы сможете легко получать доступ, как обычная XML-строка. Пример:

String serverClientId = getString(R.string.default_web_client_id);

в google-service.json doc есть список со всеми строками и информацией о momre.

Другие вопросы по тегам