2016-08-22 4 views
2

Как применять Firebase Analytics (например) в архитектуре приложений MVP? (Я использую Mosby для создания MVP)Android MVP и Analytics

Я хочу отслеживать события "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(), вызываемый даже тогда, когда пользователь переходит к экрану с задней стороны. Я хочу, чтобы он отправлял событие ТОЛЬКО, когда пользователь переходит на экран в «переднем направлении». Это также похоже на плохое решение, как метод initialize(), введенный для инициализации Presenter, когда ViewState был создан в первый раз, а не для регистрации событий аналитики.

Похоже, что я должен поделиться жизненным циклом Фрагмента с презентатором. Нехорошо.

Что вы можете порекомендовать? Должен ли я создать другой объект, например AnalyticsPresenter для каждого фрагмента? Как вы справляетесь с этим делом?

ответ

7

На мой взгляд, Analytics относится к слою «Уровень представления», а не «Презентатор». Итак, отследите его либо непосредственно в Fragment/Activity, либо (что я обычно делаю) используйте одну из библиотек, например lightcycle или CompositeAndroid, чтобы подключить компонент «Аналитика» к вашей деятельности/фрагменту. Таким образом, ваш Fragment/Activity не содержит код для Google Analytics, но довольно развязан в свой класс (одна ответственность).

+4

Я не согласен, что 'Analytics' принадлежит к слою' View'. «Просмотр» - это отображение информации, а не отслеживание ее. Но, ничего себе! 'CompositeAndroid' выглядит как решение для моего _" extends hell "_, спасибо в любом случае! :) – Alexandr

-1

Я думаю, что аналитика принадлежит ведущему, но, как я ответил на similar вопрос с аналитикой в ​​режиме просмотра, проще перейти на кнопки/метки/... определения и посмотреть, где эта кнопка расположена в пользовательском интерфейсе, и лучше понять, что отправьте для категории, Actio, Label и Value param of GAnalytics. Я думаю, что мне не нужно упоминать, что у ведущего не должно быть особых зависимостей от андроида, поэтому вы не можете перейти к кнопкам/меткам/... определениям из презентатора. С уважением

Смежные вопросы