Android MVP и аналитика
Как применить Firebase Analytics(например) в архитектуре приложений MVP? (Я использую Мосби для создания MVP)
Я хочу отслеживать события "opening screen"
, "do click action"
,
Вот как я отправляю "opening screen"
событие.
private const val ANALYTICS_SCREEN_NAME = "ask_password"
private const val ANALYTICS_ACTION_DONE = "done"
class AskPasswordPresenter : MyDiaryPresenter<AskPasswordView> {
@Inject
constructor(analytics: AnalyticsManager) : super(analytics) // AnalyticsManager is wrapper around Firebase Analytics API
override fun initialize() { // this method called when new ViewState created
super.initialize()
analytics.doScreenOpened(ANALYTICS_SCREEN_NAME)
}
fun done(password: String) { // called when user click on 'Done' button
...
analytics.doAction(ANALYTICS_SCREEN_NAME, ANALYTICS_ACTION_DONE)
}
}
doAction (...) вызывается как надо. Хорошо.
initialize()
вызывается, даже когда пользователь переходит обратно на экран из backstack. Я хочу, чтобы он отправлял событие ТОЛЬКО, когда пользователь переходит на экран в "переднем направлении". Это также выглядит как плохое решение, так какinitialize()
метод введен для инициализацииPresenter
когдаViewState
был создан в первый раз, а не для регистрации событий аналитики.
Похоже, я должен поделиться жизненным циклом фрагмента с Presenter. Нехорошо.
Что вы можете порекомендовать? Должен ли я создать другую сущность, например, AnalyticsPresenter для каждого фрагмента? Как вы справляетесь с этим делом?
2 ответа
На мой взгляд, аналитика относится к слою View, а не к Presenter. Поэтому отслеживайте его либо непосредственно во Fragment / Activity, либо (что я обычно делаю), используя одну из библиотек, например, lightcycle или CompositeAndroid, чтобы подключить "компонент Analytics" к своей Activity / Fragment. Таким образом, ваш фрагмент / действие не содержит код для Google Analytics, а скорее развязан с собственным классом (единственная ответственность).
Я думаю, что аналитика принадлежит докладчику, но, поскольку я ответил на аналогичный вопрос, имея аналитику в View, проще перейти к определениям button/label /... и посмотреть, где находится эта кнопка в пользовательском интерфейсе, и лучше понять, что отправлять в Category, Actio, Label и Value param от GAnalytics. Я думаю, мне не нужно упоминать, что у докладчика не должно быть никаких зависимостей, специфичных для Android, поэтому вы не можете перейти к определениям кнопок / меток /... от докладчика. С уважением