Введение
Для включения 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 в каталоге release позволяет использовать отдельный проект 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.