Что действительно делает google-services.json?

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

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

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

Ответ 1

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

Сначала первые вещи

gradle -plugin google-сервисы, на которые ссылается путь к классам, и с применением - это только плагин для построения времени! Таким образом, это влияет только на процесс сборки вашего приложения, но не на процесс выполнения!

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

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

Что он делает

Google-сервисы 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 файл не являются существенными для запуска или публикации вашего приложения, это просто помощник быстрого запуска для генерации некоторых базовых файлов андроидных ресурсов для упрощения интеграции определенных функций API Google.

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

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

Что это не означает

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

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

После того, как вы интегрировали утилиту google-services gradle -plugin и при синхронизации проекта Gradle автоматически загружает зависимость google-сервисов к пути, подобному этому (в Windows вам может потребоваться изучить ваш домашний /.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 -plugin.

GoogleServicesPlugin.groovy

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

GoogleServicesTask.java

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

@TaskAction
public void action() throws IOException { 

Ответ 2

Что этот файл действительно для:

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

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

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

Смотрите раздел как это работает.

Ответ 3

Добавьте 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