Я внедряю новый Google Cloud Messaging, следуя инструкциям на странице разработчиков Google здесь
Я успешно запустил и протестировал его. Но моя проблема сейчас в том, что у меня разные варианты продуктов с разными applicationId / packageName и разными идентификаторами проекта Google Cloud Messaging Project. google-services.json
Должно быть помещено в /app/google-services.json
не папке вкусов.
Есть ли способ сделать google-services.json
конфиг другим для разных вкусов?
apply plugin: 'com.google.gms.google-services'
в файле Gradle, кажется, помещаетgcm
строки вapp/build/generated/res/google-services/debug/values/values.xml
...Ответы:
Google включил поддержку ароматов в версию 2.0 плагина сервисов воспроизведения. С этой версии
gradle plugin com.google.gms:google-services:2.0.0-alpha3
ты можешь сделать это
Плагин версии 3.0.0 ищет файл json в этих местах (учитывая, что у вас есть
flavor
flavor1 и тип сборкиdebug
):Это сработало для меня даже с использованием flavourDimensions. У меня есть бесплатный и платный в одном измерении и Mock & Prod в другом измерении. У меня также есть 3 buildTypes: отладка, выпуск и постановка. Вот как это выглядит в моем проекте для аромата FreeProd:
Сколько файлов google-services.json будет зависеть от характеристик вашего проекта, но вам потребуется как минимум один файл json для каждого проекта Google.
Если вы хотите узнать больше о том, что этот плагин делает с этими файлами json, вот оно: https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720
Ссылка на официальные документы: https://developers.google.com/android/guides/google-services-plugin
Сообщение в блоге с обновленной информацией: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
И перейдите сюда, чтобы проверить последнюю версию этого плагина: https://bintray.com/android/android-tools/com.google.gms.google-services/view
источник
File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.
поэтому я собираюсь прибегнуть к копированию файла flavour в корневую папку каждый раз через скрипт сборки.ОБНОВЛЕНИЕ: Следующее объяснение относится к одному проекту Android Studio с одним проектом Firebase и различными приложениями Firebase внутри этого проекта. Если целью является создание разных файлов JSON для разных приложений Firebase в разных проектах Firebase внутри одного проекта Android Studio (или, если вы не знаете, в чем разница), посмотрите здесь. ,
Вам нужно одно приложение Firebase для каждого идентификатора приложения Android (обычно это имя пакета). Обычно для каждого варианта сборки Gradle используется один идентификатор приложения (вероятно, если вы используете типы сборки Gradle и варианты сборки Gradle)
Начиная с Google Services 3.0 и использования Firebase , нет необходимости создавать разные файлы для разных вкусов. Создание разных файлов для разных вкусов может быть непонятным или простым, если у вас есть типы productFlavours и Build, которые сочетаются друг с другом.
В этом же файле вы будете иметь все необходимые конфигурации для всех типов сборки и разновидностей.
В консоли Firebase вам нужно добавить одно приложение для каждого имени пакета. Представьте, что у вас есть 2 варианта (dev и live) и 2 типа сборки (debug и release). В зависимости от вашей конфигурации, но вполне вероятно, что у вас есть 4 разных имени пакета, таких как:
Вам нужно 4 разных приложения для Android в консоли Firebase. (На каждом из них вам нужно добавить SHA-1 для отладки и в реальном времени для каждого компьютера, который вы используете)
Когда вы загружаете файл google-services.json, на самом деле не имеет значения, из какого приложения вы его загружаете, все они содержат одинаковую информацию, относящуюся ко всем вашим приложениям.
Теперь вам нужно найти этот файл на уровне приложения (app /).
Если вы откроете этот файл, вы увидите, что if содержит всю информацию для всех имен ваших пакетов.
Болевая точка использовать, чтобы быть плагином. Чтобы он работал, вам нужно найти плагин внизу вашего файла. Так что эта линия ..
... должен быть в нижней части файла вашего приложения build.gradle.
Для большей части сказанного здесь это относится и к предыдущим версиям. У меня никогда не было разных файлов для разных конфигов, но теперь с консолью Firebase проще, потому что они предоставляют один единственный файл со всем, что вам нужно для всех ваших конфигов.
источник
Написал Средний пост по этому вопросу.
Возникла похожая проблема (с использованием BuildTypes вместо Flavors) и исправлена так.
Воспользуйтесь преимуществами системы управления зависимостями Gradle. Я создал две задачи,
switchToDebug
иswitchToRelease
. Требовать, чтобы в любое времяassembleRelease
запускалось тоswitchToRelease
же самое. То же самое для отладки.РЕДАКТИРОВАТЬ: использовать
processDebugFlavorGoogleServices
/processReleaseFlavorGoogleServices
задача, чтобы изменить его на уровне вкуса.источник
Ну, я сталкиваюсь с той же проблемой и не могу найти идеального решения. Это просто обходной путь. Мне интересно, как Google не думал о вкусах ...? И я надеюсь, что они скоро предложат лучшее решение.
Что я делаю:
У меня есть два варианта, в каждый из которых я помещаю соответствующий google-services.json:
src/flavor1/google-services.json
иsrc/flavor2/google-services.json
.Затем в build gradle я копирую файл в зависимости от разновидности в
app/
каталог:Ограничение: вам придется изменить
myFlavor
вручную в gradle каждый раз, когда вы хотите использовать другой аромат (потому что он жестко запрограммирован).Я пробовал много способов, чтобы получить текущий вкус сборки, как
afterEvaluate
close ... не мог найти лучшего решения до сих пор.Обновление, Другое решение: один google-services.json для всех вкусов:
Вы также можете иметь разные имена пакетов для каждого варианта, а затем в консоли разработчика Google вам не нужно создавать два разных приложения для каждого варианта, а только два разных клиента в одном приложении. Тогда у вас будет только один,
google-services.json
который содержит оба ваших клиента. Конечно, это зависит от того, как вы реализуете бэкэнд своих вкусов. Если они не разделены, то это решение вам не поможет.источник
google-services.json
для обоихrelease
иdebug
работал для меня, как упоминалось в вашем обновлении. Я думаю, что это самое простое решение, если вы пытаетесь разделитьdebug
сборку, как я. Для справки вы можете создать файл здесь: developers.google.com/mobile/add?platform=androidСогласно ответу ahmed_khan_89 , вы можете поместить свой «код копии» во вкус продукта.
Тогда вам не нужно переключать настройки вручную.
источник
Я использую файл google-services.json, созданный здесь: https://developers.google.com/mobile/add?platform=android&cntapi=gcm&cnturl=https:%2F%2Fdevelopers.google.com%2Fcloud-messaging % 2Fandroid% 2Fclient & cntlbl = Продолжить% 20Adding% 20GCM% 20Support &% 3Fconfigured% 3Dtrue
В JSON-структуре есть JSON-массив, называемый клиентами. Если у вас есть несколько вкусов, просто добавьте различные свойства здесь.
В моем проекте я использую тот же идентификатор проекта, и когда я добавляю второе имя пакета в указанном выше URL-адресе, google предоставляет мне файл, содержащий несколько клиентов в json-data.
Извините за компактные JSON-данные. Я не мог правильно его отформатировать ...
источник
Файл google-services.json не нужен для получения уведомлений. Просто добавьте переменную для каждого варианта в вашем файле build.gradle:
Используйте эту переменную BuildConfig.GCM_SENDER_ID вместо getString (R.string.gcm_defaultSenderId) при регистрации:
источник
1.) Что на самом деле делает google-services.json?
Следуйте этому: https://stackoverflow.com/a/31598587/2382964
2.) Как файл google-services.json влияет на ваш проект студии android?
Следуйте этому: https://stackoverflow.com/a/33083898/2382964
просто в качестве второго URL, если вы добавляете google-services.json в свой проект,
google-services
для этогоdebug
варианта должна быть автоматически сгенерированная папка для варианта3.) Что делать, чтобы это было сделано?
добавить зависимость google-services в
project_level
build.gradle, вы также можете использовать ее,version 3.0.0
если вы используете библиотеку app_compact.теперь в
app_level
build.gradle вы должны добавить внизу.4.) Где разместить файл google-service.json в вашей структуре.
случай 1.) если у вас нет build_flavor, просто поместите его во внутреннюю
/app/google-service.json
папку.случай 2.) если у вас несколько build_flavor и у вас есть разные-разные файлы google_services.json
app/src/build_flavor/google-service.json
.случай 3.) если у вас несколько build_flavor и у вас есть один файл google_services.json, помещенный внутрь
app/google-service.json
.источник
Нет необходимости в каких-либо дополнительных скриптах Gradle.
Google начал добавлять другое имя пакета в имя «android_client_info». Это выглядит ниже в google-services.json
поэтому для выбора другого google-services.json достаточно следующих шагов.
Вот и все! ..
источник
У нас есть другое имя пакета для отладочных сборок (* .debug), поэтому я хотел что-то, что работает на основе flavour и buildType, без необходимости писать что-то связанное со вкусом в шаблоне
processDebugFlavorGoogleServices
.Я создал папку с именем «google-services» в каждом варианте, содержащую как отладочную версию, так и версию выпуска файла json:
В разделе buildTypes вашего файла Gradle добавьте это:
Когда вы переключите вариант сборки, он автоматически скопирует нужный файл json в корень вашего модуля приложения.
Добавьте два метода, вызываемых, чтобы получить текущий вариант и текущий тип сборки в корне вашего build.gradle
Вот и все, вам не нужно беспокоиться об удалении / добавлении / изменении вариантов из вашего файла Gradle, и он автоматически получает отладочный файл или релиз google-services.json.
источник
Firebase теперь поддерживает несколько идентификаторов приложений с одним файлом google-services.json.
Этот блог описывает это подробно.
Вы создадите один родительский проект в Firebase, который будете использовать для всех ваших вариантов. Затем вы создаете отдельные приложения Android в Firebase под этим проектом для каждого имеющегося у вас идентификатора приложения.
Когда вы создали все свои варианты, вы можете скачать google-services.json, который поддерживает все идентификаторы ваших приложений. Когда уместно видеть данные отдельно (например, отчеты о сбоях), вы можете переключать их с помощью раскрывающегося списка.
источник
Согласно документации Firebase вы также можете использовать строковые ресурсы вместо google-services.json .
Пример
strings.xml
:источник
Основываясь на ответе @ ZakTaccardi и предполагая, что вам не нужен один проект для обоих вариантов, добавьте это в конец
build.gradle
файла:Вам нужно иметь файлы
src/staging/google-services.json
иsrc/production/google-services.json
. Замените названия вкусов на те, которые вы используете.источник
Я обнаружил, что плагин google-services совершенно бесполезен для проектов, которые хотят добавить GCM. Он только генерирует следующий файл, который просто добавляет идентификатор вашего проекта в качестве строкового ресурса:
Похоже, он вам нужен только в том случае, если вы скопировали образец кода прямо из руководства Cloud Messaging for Android . Вот пример строки:
Решение
Если вы хотите иметь возможность переключать проекты API для разных типов сборки или разновидностей продукта, вы можете просто определить свои собственные константы и выбрать соответствующую при вызове
getToken()
API.Для ароматов продукта
Приведенный выше код работает для переключения между сборками отладки и выпуска. Для вариантов продукта вы должны определить различные ключи API в исходном файле Java и поместить файлы в соответствующий каталог продукта. Для справки: Варианты сборки Gradle
источник
ОБНОВЛЕНО:
С точки зрения настройки Firebase с вариантами сборки, пожалуйста, обратитесь к этому блогу, в котором есть подробные инструкции.
источник
Смысл плагина google-services заключается в упрощении интеграции функций Google.
Поскольку он генерирует android-resources только из файла google-services.json, я думаю, что слишком сложная логика gradle сводит на нет этот момент.
Поэтому, если в Google-документации не указано, какие ресурсы необходимы для определенных функций Google, я бы предложил сгенерировать JSON-файл для каждого соответствующего типа сборки / разновидности, посмотреть, какие ресурсы генерируются плагином, а затем поместить эти ресурсы вручную. в соответствующие каталоги src / buildtypeORflavor / res.
После этого удалите ссылки на плагин google-services и JSON-файл, и все готово.
Для получения подробной информации о внутренней работе google-services gradle-plugin см. Мой другой ответ:
https://stackoverflow.com/a/33083898/433421
источник
Упрощение того, что сказал Скотти. Вам нужно создавать приложения Multiples с разными именами пакетов для конкретного проекта в зависимости от вкуса продукта.
Предположим, ваш проект представляет собой ABC с различными вариантами продуктов X, Y, где X имеет имя пакета com.x, а Y имеет имя пакета com.y, тогда в консоли Firebase вам нужно создать проект ABC, в котором вам нужно создать 2 приложения. с именами пакетов com.x и com.y. Затем вам нужно скачать файл google-services.json, в котором будет 2 объекта client-info, которые будут содержать эти пакеты, и вам будет хорошо.
Фрагмент JSON будет что-то вроде этого
источник
Действительно, один каталог google-services.json в
MyApp/app/
каталоге хорош, нет необходимости в дополнительном скрипте сcom.google.gms:google-services:3.0.0
. Но будьте осторожны, чтобы удалить файлgoogle-services.json
из каталога приложения,MyApp/app/src/flavor1/res/
чтобы избежать ошибки типаExecution failed for task ':app:processDebugGoogleServices'. > No matching client found for package
источник
Так что если вы хотите программно скопировать
google-services.json
файл из всех ваших вариантов в вашу корневую папку. Когда вы переключаетесь на конкретный вариант, вот решение для васЕсть предостережение в отношении этого подхода, который заключается в том, что вам нужно иметь
google-service.json
файл в каждой папке вариантов, вот пример.источник
У вас много вкуса, так что это значит, что у вас будет много разных идентификаторов, верно? Итак, просто перейдите на страницу, где вы настраиваете / генерируете свой json-файл и конфигурируете для каждого имени пакета. Все это добавит в файл JSON.
Я очень ленив, чтобы опубликовать картинку сейчас, но в основном:
При настройке файла вы можете увидеть, что Google показывает вам ключ сервера API + идентификатор отправителя. И это одинаково для всей упаковки (вкусы)
В конце вам нужен только один файл json для всех вариантов.
Еще один вопрос, который вы должны проверить при регистрации, чтобы получить регистрационный токен, проверьте, есть ли разница для каждого варианта. Я не касаюсь этого, но это должно быть различие. Слишком поздно, и я так сонный :) Надеюсь, это поможет!
источник
Эй, Друзья, также ищет имя, использовать только строчные, тогда вы не получите эту ошибку
источник
В настоящее время я использую два идентификатора проекта GCM в одном пакете приложения. Я поместил google-service.json моего первого проекта GCM, но я переключаюсь с первого на второй, только меняя SENDER_ID:
(На данный момент я думаю, что google-services.json не является обязательным)
источник
Вдохновленный ответом @ ahmed_khan_89 выше. Мы можем напрямую сохранить это в файле Gradle.
источник
Поместите файл "google-services.json" в app / src / flavors соответственно, затем в build.gradle приложения, под android добавьте ниже код
источник