Що насправді робить google-services.json?


120

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

Я виявив, що навіть якщо я видалю цей файл json зі свого додатка, сервіси все ще працюють.

Просто хочу точно знати, для чого насправді цей файл? Яке його використання та як це працює?

Відповіді:


197

Я трохи дослідив плагін google-services та json та знайшов джерела цього плагіна.

Насамперед

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

Цей плагін призначений лише як швидкий старт-помічник для швидкої інтеграції служб Google у ваше додаток. Очевидно, що процес дещо складний і не документально підтверджений, тому Google повинен був дати зрозуміти, що робить цей процес.

Насправді я знайшов вихідний код для версії плагіна com.google.gms: google-services: 1.4.0-beta3 і не знайшов у ньому конкретних посилань щодо прикладних програм, а також не знайшов API Google для запрошень на додаток! (Можливо, він просто використовує загальний проект API зі своїм ідентифікатором проекту, я цього не намагався)

Що це робить

Плагін google-services gradle шукає згаданий файл google-services.json у вашому додатку-модулі. Потім він шукає конфігуровані параметри, такі як ідентифікатори проекту та ідентифікатори відстеження та такі, що генеруються консоллю розробника API Google у файл 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 як наступний андроїд-ресурс:

<string name="gcm_defaultSenderId">project-id</string>

Отже, цей плагін та файл JSON не є важливими для запуску чи публікації вашої програми, це лише швидкий старт-помічник для створення деяких основних файлів андроїд-ресурсів для легшої інтеграції конкретних функцій API Google.

Зауважте у вихідному коді, на який вказується нижче, що плагін Google Services завжди генерує ті андроїд-ресурси для кожного варіанта програми, визначеного у вашій програмі / build.gradle.

Якщо ви цього не хочете, слід використати створені ресурси в потрібних варіантах додатків та видалити інші. Не забудьте видалити додаток google-services застосувати з app / build.gradle, інакше він буде відновлений для всіх варіантів додатків.

Чого ні

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

Повідомте, де я знайшов джерела

Після інтеграції google-services gradle-плагін та під час синхронізації проекту 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-плагіна.

GoogleServicesPlugin.groovy

містить обробку варіантів додатків та основні визначення шляхів тощо.

GoogleServicesTask.java

містить фактичне визначення завдання, шукайте наступний метод, щоб побачити, що він насправді робить:

@TaskAction
public void action() throws IOException { 

2
набагато краща відповідь. але, мабуть, виникають проблеми при спробі дотримуватися рекомендованого підходу ( developers.google.com/analytics/devguides/collection/android/v4 ) "прийнята відповідь" - це смішна концепція ТА, яка повністю залежить від терпіння людини, яка може вирішуйте це ...
axd

7
Подальша примітка щодо цього, оскільки це може змінитися з моменту опублікування цього повідомлення. У посібнику плагінів Google Services Gradle зазначено 2-ю функцію плагіна. Він також стверджує, що додає деякі залежності для "базових бібліотек, необхідних для ввімкнених вами служб", а також перевіряє наявність зіткнень залежностей (від змішування версій). Я перекопався до джерел, і, здається, він вводить "компілювати com.google.android.gms: play-services-measurement". Просто вигадка на випадок, якщо хтось побачить, що з'являється, і не знаю, чому.
Android3000

3
Враховуючи, що файл містить пару клавіш, чи безпечно додати його до контролю версій? Наскільки я можу сказати, це лише відбитки пальців, тому я вважаю, що це безпечно. Але я не зовсім впевнений.
ексгума

1
@exhuma, на мою особисту думку, якщо ви працюєте над приватним проектом або внутрішнім проектом, було б добре перевірити це в контролі версій. З іншого боку, очевидно, я ніколи не перевіряв би файл json у контролі версій для проектів з відкритим кодом.
arne.jans

1
@ arne.jans Чи можете ви динамічно встановити senderId, або ви просто жорстко закодували його у values.xml? Мені потрібно динамічно отримувати senderId з сервера, а потім реєструватися на FCM.
Бресю

37

Для чого насправді цей файл:

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

В офіційній документації сказано:

Додаток створює GoogleApiClient, вказуючи, до яких областей та API буде додаток. Коли GoogleApiClient підключається, користувач входить у систему.

Дивіться, як це працює в розділі.


3
Спасибі за вашу відповідь. Просто є питання, хоча дивуйтеся, чи готові ви допомогти. Я бачив, що ваше посилання є публікацією для служб входу. Але якщо мені лише користуватися службою Google Analytics і службою GCM у своєму додатку, не потрібно входити, чи все-таки потрібно зберігати цей файл? Дякую!
Артур Ван

3
Так, для аналітики чи GCM вам також потрібен цей файл конфігурації. На кроці 2 документації вам потрібно було перейти за посиланням FET CONFIGURATION FILE . Там ви повинні вибрати, чи використовуєте ви цей конф-файл для GCM чи аналітики. Цей файл просто містить ідентифікатор вашого розробника (як ключ api, хеш-код SHA1 вашого ПК для розробки тощо)
Mohammad Arman

2
@androidGuy Вибачте за несвоєчасну відповідь. Я думаю, що вам доведеться створити новий файл конфігурації google-services.json з останньою версією SHA1 keyhash. Інші мудрі деякі функції можуть не працювати після публікації в ігровому магазині. Вибачте за попередню плутанину, я видалю попередній коментар, оскільки це дозволить комусь в неправильному напрямку.
Мохаммед Арман

1
Якщо ви копіюєте слова іншої людини, ви повинні належним чином заблокувати їх цитатами та надати повне віднесення. Я відмовив вашу редакцію, оскільки вважаю це плагіатом відповіді нижче цієї.
Бред Ларсон

6
А як щодо безпеки? Чи можна відтворити google-services.json і прочитати з apk? Я бачу ключ розробника та API всередині. Мені не подобається, щоб це знали інші ...
Тіно

4

Додайте google-services.json у свій модуль та зробіть CLEAN та REBUILD. Xml-файл буде створений у додатку / build / generated / res / google-services / debug / values ​​/ values.xml зі своїми властивостями проекту, і ви зможете легко отримати доступ, як звичайний xml-рядок. Приклад:

String serverClientId = getString(R.string.default_web_client_id);

в google-service.json doc є список з усіма рядками та додатковою інформацією

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.