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)
    }
}
  1. doAction (...) вызывается как надо. Хорошо.

  2. 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, поэтому вы не можете перейти к определениям кнопок / меток /... от докладчика. С уважением

Другие вопросы по тегам