Введение
As part of enabling Google APIs or Firebase services in your Android application you may have to add the google-services plugin to your build.gradle file:
dependencies {
classpath 'com.google.gms:google-services:4.5.0'
// ...
}
Плагин google-services выполняет две основные функции:
- Обработайте файл
google-services.jsonи создайте ресурсы Android, которые можно использовать в коде вашего приложения. Дополнительную информацию см. в разделе «Добавление файла JSON» . Добавьте зависимости для основных библиотек, необходимых для включенных вами сервисов. Для этого необходимо добавить плагин Google Services Gradle в файл
app/build.gradleследующим образом:
apply plugin: 'com.google.gms.google-services'You can see the result of this step by running
./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": [...],
} The project_info object contains general information about your project, while each member of the client array contains information about the clients (Android apps) that you have added to the project.
When processing the JSON file for your Android app, the plugin only uses the client object that matches your package name (for the current build type) based on the following logic:
- Для каждого элемента массива
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: Make sure the package name in your build.gradle file matches the package name you entered when creating the google-services.json file. If you are not sure, run through the getting started flow again and get a new json file.