如何在MVP应用程序架构上应用Firebase分析(例如)?(我用Mosby构建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()
方法是在第一次创建ViewState
时引入的,用于初始化Presenter
,而不是用于记录分析事件。
听起来我必须把Fragment的生命周期分享给Presenter。不好。
你能推荐什么吗?我必须为每个片段创建另一个实体,如AnalyticsPresenter吗?你是怎么处理这个案子的?
在我看来,分析属于视图层而不是演示层。因此,直接在Fragment/Activity中跟踪它,或者(我通常做的)使用像lightcycle这样的库之一或CompositeAndroid插入一个"分析组件"到你的活动/片段。通过这样做,您的Fragment/Activity不包含用于分析的代码,而是将其解耦到自己的类(单一责任)。
我认为分析属于演示者,但正如我回答的类似问题一样,在视图中有分析更容易跳转到按钮/标签/…定义并查看此按钮在UI中的位置,并更好地了解要为GAnalytics的类别,动作,标签和值参数发送什么。我想我不需要提及演示器必须没有任何android特定的依赖,所以你不能跳转到按钮/标签/…来自演示者的定义。关于