создать для каждого нового приложения firebase
FirebaseApp firebaseApp =
FirebaseApp.initializeApp(Context, FirebaseOptions,firebaseAppName);
вы можете создать приложение firebase, передав параметры:
https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseOptions.Builder
FirebaseOptions options = new FirebaseOptions.Builder()
.setApiKey(String)
.setApplicationId(String)
.setDatabaseUrl(String)
.build();
затем если вы хотите использовать Google Analytics, вам необходимо установить его по умолчанию, позвонив:
FirebaseApp firebaseApp =
FirebaseApp.initializeApp(Context, FirebaseOptions,"[DEFAULT]");
имейте в виду, что только это приложение firebase ПО УМОЛЧАНИЮ будет использоваться в аналитике.
но прежде всего вам нужно удалить провайдера инициализации в манифесте
<!--remove firebase provider to init manually -->
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="${applicationId}.firebaseinitprovider"
tools:node="remove"/>
и инициализировать приложение Firebase по умолчанию вручную!
пример отправки события через приложение firebase по умолчанию (после инициализации):
// get tracker instance
FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context);
// create bundle for params
Bundle params = new Bundle();
// put param for example action
params.putString(ACTION_KEY, eventAction);
// send event
trackerInstance.logEvent(eventCategory, params);
@ ceph3us Я попробовал ваше решение, но у меня оно не сработало. Если я инициализирую firebase во время выполнения, как вы предложили, я получаю сообщение об ошибке: Отсутствует google_app_id. Firebase Analytics отключена. Вы уверены, что он работает? - rMozes
прежде всего
- Вы удалили поставщика по умолчанию, добавив в манифест tools: node = "remove"?
- Вы инициализировали ['ПО УМОЛЧАНИЮ »] приложение firebase, как я описал
- Вы проверяли, инициализировано ли приложение firebase ['DEFAULT'] перед отправкой какого-либо события?
ad 1) error: Missing google_app_id
подсказывает мне, что плагин gardle не удалил поставщика, как ожидалось, и ваше приложение запускает поставщика по умолчанию, который жалуется на отсутствие идентификатора приложения
объявление 3) не выполняйте никаких вызовов, полагаясь на приложение firebase, до инициализации приложения firebase
protected boolean isDefaultFirebaseAppInitialized() {
try {
// try get
return FirebaseApp.getInstance(FirebaseApp.DEFAULT_APP_NAME) != null;
// catch illegal state exc
} catch (IllegalStateException ise) {
// on such case not initialized
return false;
}
}
// check on default app
if(isDefaultFirebaseAppInitialized()) {
// get tracker
FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context);
// log event
trackerInstance.logEvent(eventCategory, params);
} else {
// postpone
}
@ ceph3us 1. Я удалил поставщика, как вы сказали, если я не удалю поставщика и не попытаюсь инициализировать приложение по умолчанию, то я получу исключение IllegalStateException о том, что приложение firebase по умолчанию уже существует. 2. Я инициализировал приложение firebase по умолчанию, как вы описали. 3. Да, я зарегистрировал имя приложения и app_id, и есть журнал: AppName: [DEFAULT], идентификатор приложения Google: valid_app_id. Но когда я хочу опубликовать что-то в аналитике, появляется сообщение: Отсутствует google_app_id. Firebase Analytics отключена. - rMozes
99,99% вы пытаетесь отправить событие до инициализации приложения! (см. пример выше)
@ ceph3us Я инициализирую FirebaseApp в методе onCreate подкласса Application. Я отправляю событие в firebase при нажатии кнопки. В любом случае я загрузил тестовый проект на github, вы можете взглянуть на него? Возможно, я что-то неправильно понял. github.com/rMozes/TestFirebaseAnalytics - rMozes
попробуйте (поскольку инициализация асинхронная - поэтому, пока вы не проверите ее инициализацию, вы не можете отправлять события):
https://github.com/rMozes/TestFirebaseAnalytics/compare/master...c3ph3us:patch-2
в случае неудачи у вас есть еще два шанса :)
путем определения строки в xml: в качестве заполнителя
<string name="google_app_id">fuck_you_google</string>
1) измените идентификатор заполнителя через отражения на другой перед любым вызовом init / или использованием из firebase:
подсказка, как это сделать
2) предоставить собственный текст для идентификатора заполнителя с помощью собственной реализации класса ресурсов для вызова Resources.getString (R.string.google_app_id):
пример того, как этого добиться (добавление новые ресурсы по id)
если вы правильно измените поле R с помощью отражений или замените вызов Resources.getString (R.string.google_app_id) собственным текстом , вы не получите сообщение о неправильном идентификаторе приложения: "fuck_you_google"
& удачи :)
person
ceph3us
schedule
07.08.2017