Реализация Firebase внутри библиотеки
Я хочу внедрить систему уведомлений Friebase внутри библиотеки, которую я хочу использовать как SDK во многих приложениях.
Firebase теперь запрашивает идентификатор приложения, но я реализую его внутри библиотеки, поэтому нет идентификатора приложения.
Как я могу достичь своей цели, чтобы отправлять уведомления в мои приложения, которые используют мою библиотеку?
Спасибо заранее.
Ответы
Ответ 1
Да, вы действительно можете это сделать, в своей библиотеке build.gradle
поместите это внутри поля defaultConfig
buildConfigField("String", "FIREBASE_APP_KEY", "\"${firebaseAppKey}\"")
Затем внутри вашего проекта gradle.properties
firebaseAppKey = <yourFirebaseAppSecret>;
Для каждого проекта/приложения вы должны определить эту переменную на gradle.properties
.
Вам нужно будет создать приложение firebase для каждого проекта, но теперь ваша библиотека может иметь SDK Firebase.
Если вы хотите получить доступ к этому значению переменной среды, используйте BuildConfig.FIREBASE_APP_KEY
(например, экземпляр firebase).
Ответ 2
Один из вариантов заключается в том, чтобы пользователь вашей библиотеки создал проект Firebase, а затем передал полученный файл google-services.json в свое приложение, и ваша библиотека может зависеть от этого.
Ответ 3
Я знаю, что это старый вопрос с принятым ответом, но все ответы имеют большое недовольство - они требуют, чтобы пользователь вашей библиотеки выполнял работу, помимо добавления вашей библиотеки в свое приложение. Существует способ сделать это , не беспокоя пользователя вашей библиотеки вообще, если ваша библиотека загружается из репозитория Maven.
Примечание: этот метод является взломом и не поддерживается Firebase. Когда я спросил о поддержке Firebase, я получил следующий ответ:
SDK Firebase не предназначены для проектов библиотеки. Функции, доступные на Firebase, были интегрированы на уровне приложений, а не на каждый модуль или на библиотечную базу, поэтому, прецедент для использования этого интегрировано в проект библиотеки, невозможно или не поддерживается.
Тем не менее, я нашел способ сделать это, и, возможно, кто-то найдет его полезным, так вот:
Это пример использования базы данных Realtime, но он должен работать для всех SDK Firebase.
В основном проекте build.gradle
добавить mavenCentral репозиторий:
allprojects {
repositories {
...
mavenCentral()
}
}
В проекте библиотеки build.gradle
добавьте сервисы Google Play (как зависимость, а не как плагин):
compile 'com.google.android.gms:play-services-gcm:11.0.4'
Добавьте соответствующие SDK Firebase (с той же версией, что и Службы Google Play):
compile 'com.google.firebase:firebase-core:11.0.4'
compile 'com.google.firebase:firebase-database:11.0.4'
Зарегистрируйте SDK в качестве проекта на Firebas, загрузите его google-services.json
и откройте его любым текстовым редактором.
В вашей библиотеке strings.xml
добавьте следующие строки и заполните эти строки данными из google-services.json
<string name="gcm_defaultSenderId">project_number</string>
<string name="google_api_key">current_key</string>
<string name="google_app_id">mobilesdk_app_id</string>
<string name="google_crash_reporting_api_key">current_key</string>
<string name="google_storage_bucket">storage_bucket</string>
<string name="firebase_database_url">firebase_url</string>
<string name="default_web_client_id">client_id</string>
<string name="project_id">project_id</string>
Это он. Вы можете использовать базу данных Firebase Realtime в своем libaray, затем создать ее и опубликовать ее в Maven (публикация в Maven необходима, в противном случае пользователю вашей библиотеки придется вручную добавлять зависимости). При активации из приложения ваша база данных будет использоваться.
Обратите внимание, что этот метод может вызывать исключения и неожиданное поведение, если пользователь вашей библиотеки будет использовать службы Google Play или Firebase, поэтому использовать на свой страх и риск!
Ответ 4
Насколько я знаю, вы не можете.
Для каждого проекта Firebase требуются идентификаторы пакетов, чтобы однозначно идентифицировать каждое из своих приложений.
Вам также необходимо настроить каждый модуль со своим google-services.json
, который создается специально для каждого идентификатора.
Если вы можете использовать один и тот же пакет для всех своих приложений, устройство или сам Play Store не смогут отличать один от другого, а не вариант.
Вы можете извлечь всю логику Firebase в свою библиотеку, но все равно вам нужно будет настроить каждое приложение, чтобы предоставить уникальный идентификатор пакета, и вам также нужно будет отправить уведомление на каждый идентификатор.