Отключить автоматическое отслеживание активности в Firebase
Мне интересно, есть ли способ отключить аналитическое автоматическое отслеживание активности? У меня есть иерархия просмотра, основанная на фрагментах, и есть несколько случаев:
- Деятельность, в которой всегда есть один фрагмент.
- Деятельность, которая может иметь разные фрагменты как корень.
- Активность с корневым фрагментом, который содержит ViewPager с другими фрагментами.
Я использую такой код во фрагментах из документации Firebase для отслеживания пользовательских экранов:
mFirebaseAnalytics.setCurrentScreen(getActivity(), "some_fragment_1", null);
В первом случае я хочу отслеживать только корневой фрагмент. Во втором случае я хочу отслеживать только каждый фрагмент, который становится корневым. В третьем случае я хочу отслеживать только каждый фрагмент, который становится видимым в ViewPager.
И проблема в том, что я вообще не хочу отслеживать активность, но, к сожалению, Firebase делает это самостоятельно - в результате этого моя статистика выглядит странно, например:
SomeActivity 50%
some_fragment_1 30%
some_fragment_2 20%
Мне не нужна активность в этой статистике, потому что статистика фрагментов уже включает ее.
Итак, есть ли способ отключить отслеживание активности?
3 ответа
Теперь с новым API можно вручную отслеживать экраны.
Можно отключить автоматическое отслеживание
В iOS установите для FirebaseAutomaticScreenReportingEnabled значение NO в вашем info.plist. На Android установите для параметра google_analytics_automatic_screen_reporting_enabled значение false в манифесте.
Ручное отслеживание
iOS
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// After enough time has passed to make this screen view significant.
Analytics.logEvent(AnalyticsEventScreenView, parameters: [
AnalyticsParameterScreenName: screenName!,
AnalyticsParameterScreenClass: screenClass!,
MyAppAnalyticsParameterFitnessCategory: category!
])
}
Андроид
@Override
public void onResume() {
super.onResume();
// After enough time has passed to make this screen view significant.
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, screenName);
bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, screenClass);
bundle.putString(MyAppAnalyticsConstants.Param.TOPIC, topic);
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
}
https://firebase.googleblog.com/2020/08/google-analytics-manual-screen-view.html
Я знаю, что это скорее взлом, но, похоже, он работает с последней аналитикой firebase. Идея состоит в том, что Firebase Analytics используетregisterActivityLifecycleCallbacks()
внутренне для каждого действия, объявленного в манифесте, поэтому отключение этого способа отключает автоматическое создание отчетов.
Поместите этот код в каждый корень Activity
ты используешь.
@Override
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
// com.google.android.gms.measurement.internal.zzfl for firebase-core:17.1.0, play-services-measurement-impl:17.1.0
if (!callback.getClass().getName().startsWith("com.google.android.gms.measurement.")){
super.registerActivityLifecycleCallbacks(callback);
}
}
Кредиты за находку отправляются в @liudongmiao на https://github.com/firebase/quickstart-android/issues/370.
Чтобы отключить автоматическое отслеживание экрана в Firebase Analytics 17.5.0, мне пришлось перехватывать регистрации обратного вызова в моем классе приложения, а не в отдельных действиях, и имя класса обратного вызова снова изменилось:
@Override
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
if (!callback.getClass().getName().startsWith("com.google.android.gms.internal.measurement.")){
super.registerActivityLifecycleCallbacks(callback);
}
}
К сожалению, вопреки тому, что указано в документации Google (https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.Event), мне не удалось вручную пометить просмотры экрана зарегистрировав событиеFirebaseAnalytics.Event.SCREEN_VIEW
. На данный момент я прибег к регистрации просмотров экрана с помощью настраиваемого события.