2016-08-22 42 views
2

如何将MVC应用程序体系结构上的Firebase Analytics(例如)应用? (我用Mosby打造MVP)Android 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()。我希望它只在用户导航到“正面方向”屏幕时发送事件。它也看起来像一个不好的解决方案,initialize()方法引入初始化Presenter时,第一次创建ViewState,而不是日志记录分析事件。

听起来好像我必须将Fragment的生命周期分享给Presenter。不好。

您能推荐些什么?我必须为每个片段创建另一个实体,例如AnalyticsPresenter吗?你如何处理这种情况?

回答

7

在我看来,分析属于视图层,而不是演示者层。 因此,要么直接在片段/活动中进行跟踪,要么使用其中一个库(如lightcycleCompositeAndroid)来将“分析组件”插入活动/片段。通过这样做,您的Fragment/Activity不包含Google Analytics的代码,而是将其分解为自己的类(单一责任)。

+4

我不同意'Analytics'属于'View'图层。 'View'是关于显示信息,而不是跟踪它。但是,哇! 'CompositeAndroid'看起来像是我的_“延伸地狱”的解决方案,谢谢! :) – Alexandr

-1

我认为分析属于演示者,但正如我在similar上回答的问题,在View中进行分析可以更轻松地跳转到按钮/标签/ ...定义并查看此按钮在UI中的位置,并且更好地了解如何发送GAnalytics的Category,Actio,Label和Value参数。我想我不需要提及演示者必须没有任何android特定的依赖关系,因此您不能跳到演示者的按钮/标签/ ...定义。问候