Реализация 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 в свою библиотеку, но все равно вам нужно будет настроить каждое приложение, чтобы предоставить уникальный идентификатор пакета, и вам также нужно будет отправить уведомление на каждый идентификатор.