Firebase setCurrentScreen дублирует записи журнала screen_view - PullRequest
0 голосов
/ 11 февраля 2020

Мне нужно отображать статистику на открытых экранах в firebase (как раньше в analytics.google)

И мне нужно отображать не реальные имена классов, такие как MainActivity, а, например, ScreenSeviceList

Я создал тестовый проект, состоящий из 4 Activity и 3 Fragment (в MainActivity4)

class App : Application() {
companion object{
    lateinit var mFirebaseAnalytics: FirebaseAnalytics
}
override fun onCreate() {
    super.onCreate()
     mFirebaseAnalytics = FirebaseAnalytics.getInstance(this)
}

}

все Activity содержат приблизительно одинаковый код

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    button2.setOnClickListener { startActivity(Intent(baseContext,Main2Activity::class.java)) }
    button3.setOnClickListener {  startActivity(Intent(baseContext,Main3Activity::class.java))}
    button4.setOnClickListener {  startActivity(Intent(baseContext,Main4Activity::class.java))}

}
override fun onResume() {
    super.onResume()
    App.mFirebaseAnalytics.setCurrentScreen(this, null, "ScreenActivity#1")
}

}

И у Activity4 есть 3 фрагмента, например

class Fragment1 :Fragment(){

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view=inflater.inflate(R.layout.fragment,container,false)
    view.fragment_title.text="====Fragment#1===="
    view.button_prev.setOnClickListener { activity!!.goToFragment(0) }
    view.button_next.setOnClickListener { activity!!.goToFragment(2) }
    return view
}
override fun onResume() {
    super.onResume()
    App.mFirebaseAnalytics.setCurrentScreen(activity!!, null, "ScreenFragment#1")
   }

}

В консоли Firebase DebugView, когда я переключаю экран. Я вижу два события screen_view
Первое четное firebase_screen_class = MainActivity
Второе четное firebase_screen_class = ScreenActivity#1
Для фрагмента все работает хорошо
Как не регистрировать автоматические c события, подобные MainActivity, но регистрировать только ваши собственные, такие как ScreenActivity#1? Как вы можете видеть на картинке ниже, записи дублируются и, как результат, значения неверны. Например, вместо отображения линии ScreenActivity#1 18 28% мы видим два из 14%

enter image description here

1 Ответ

0 голосов
/ 12 февраля 2020

Решение, конечно, не изящное, но, возможно, кому-то пригодится. Если кто-то знает более красивое решение, то я буду рад его видеть

    override fun onResume() {
    App.mFirebaseAnalytics.setAnalyticsCollectionEnabled(false)
    super.onResume()
    App.mFirebaseAnalytics.setAnalyticsCollectionEnabled(true)
    App.mFirebaseAnalytics.setCurrentScreen(this, "ScreenActivity#1", "ScreenActivity#1")
}
...