Введение
В рамках включения API Google или служб Firebase в ваше приложение Android вам, возможно, придется добавить плагин google-services в файл build.gradle :
dependencies {
classpath 'com.google.gms:google-services:4.4.4'
// ...
}
Плагин google-services имеет две основные функции:
- Обработайте файл
google-services.jsonи создайте ресурсы Android, которые можно использовать в коде вашего приложения. Подробнее см. в разделе Добавление JSON-файла . Добавьте зависимости для базовых библиотек, необходимых для включенных сервисов. На этом этапе необходимо применить плагин Google Services Gradle в файле
app/build.gradle, например:
apply plugin: 'com.google.gms.google-services'Результат этого шага можно увидеть, запустив
./gradlew :app:dependencies.
Добавление JSON-файла
Файл google-services.json обычно размещается в каталоге app/ (в корне модуля приложения Android Studio). Начиная с версии 2.2.0 плагин поддерживает JSON-файлы, специфичные для типа сборки и версии продукта. Допустимы все следующие структуры каталогов:
// dogfood and release are build types. app/ google-services.json src/dogfood/google-services.json src/release/google-services.json ...
Примечание: Предоставление файла google-services.json в каталоге релиза позволяет вам поддерживать отдельный проект Firebase для ваших производственных APK-файлов.
При использовании разновидностей продукта эти более сложные структуры каталогов также допустимы.
// free and paid are product flavors. app/ google-services.json src/dogfood/paid/google-services.json src/release/free/google-services.json ...
Обработка JSON-файла
Файл google-services.json имеет следующую базовую структуру:
{
"project_info": {...},
"client": [...],
} Объект project_info содержит общую информацию о вашем проекте, в то время как каждый член массива client содержит информацию о клиентах (приложениях Android), которые вы добавили в проект.
При обработке JSON-файла для вашего приложения Android плагин использует только тот client объект, который соответствует имени вашего пакета (для текущего типа сборки), основываясь на следующей логике:
- Для каждого члена
clientмассива:- Проверьте значение
client_info/android_client_info/package_name - Если имя пакета соответствует этому значению, вернуть объект-член.
- Проверьте значение
- Если ни один из членов
clientне соответствует имени пакета, генерируется исключение.
В оставшейся части документа мы будем использовать {YOUR_CLIENT} для ссылки на член массива client , определенный описанной выше процедурой.
Основным результатом обработки JSON является создание двух XML-файлов, которые можно использовать в качестве ресурсов Android в коде Java. Ниже приведён пример каждого файла:
app/build/generated/res/google-services/{build_type}/values/values.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<! -- Present in all applications -->
<string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>
<! -- Present in applications with the appropriate services configured -->
<string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
<string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
<string name="ga_trackingId" translatable="false">UA-65557217-3</string>
<string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
<string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="project_id" translatable="false">mydemoapp</string>
</resources>app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ga_trackingId" translatable="false">UA-65557218-3</string>
</resources> Все значения в XML-файлах присутствуют в файле google-services.json по адресам ниже. Если конфигурация вашего проекта Android не позволяет использовать плагин google-services , вы можете безопасно пересоздать XML-файлы вручную, используя эти значения:
google_app_id :
{YOUR_CLIENT}/client_info/mobilesdk_app_idgcm_defaultSenderId :
project_info/project_number
default_web_client_id :
{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)
ga_trackingId :
{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_idfirebase_database_url :
project_info/firebase_url
google_api_key :
{YOUR_CLIENT}/api_key/current_keygoogle_crash_reporting_api_key :
{YOUR_CLIENT}/api_key/current_keyproject_id :
project_info/project_id
Поиск неисправностей
В: При сборке появляется следующее сообщение об ошибке: «Файл google-services.json отсутствует в корневой папке модуля. Плагин Google Services не может работать без него».
A: Консоль Firebase поможет вам скачать файл google-services.json . Кроме того, инструкции по созданию этого файла можно найти в руководствах по быстрому старту для большинства API. После загрузки файла google-services.json скопируйте его в папку app/ вашего проекта Android Studio или в папку app/src/{build_type} если вы используете несколько типов сборки.
В: Я не могу найти символ «R.string.gcm_defaultSenderId», «R.xml.global_tracker» и т. д.
A: Убедитесь, что имя пакета в файле build.gradle совпадает с именем пакета, указанным при создании файла google-services.json . Если вы не уверены, повторите начальный этап и получите новый JSON-файл.