Введение
В рамках включения API Google или служб Firebase в вашем приложении Android вам может потребоваться добавить плагин google-services
в ваш файл build.gradle
:
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
// ...
}
Плагин 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_id
gcm_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_id
firebase_database_url :
project_info/firebase_url
google_api_key :
{YOUR_CLIENT}/api_key/current_key
google_crash_reporting_api_key :
{YOUR_CLIENT}/api_key/current_key
идентификатор_проекта :
project_info/project_id
Поиск неисправностей
Вопрос: При сборке я получаю следующее сообщение об ошибке: «Файл google-services.json отсутствует в корневой папке модуля. Плагин Google Services не может работать без него».
О: Консоль Firebase поможет вам загрузить google-services.json
. Кроме того, в руководствах по быстрому запуску для большинства API есть инструкции по созданию этого файла. Загрузив файл google-services.json
, скопируйте его в папку app/
вашего проекта Android Studio или в папку app/src/{build_type}
если вы используете несколько типов сборки.
Вопрос: Я не могу найти символ «R.string.gcm_defaultSenderId», «R.xml.global_tracker» и т. д.
О: Убедитесь, что имя пакета в файле build.gradle
соответствует имени пакета, которое вы указали при создании файла google-services.json
. Если вы не уверены, повторите процедуру начала работы еще раз и получите новый файл JSON.