3

如何在 MVP 应用架构上应用 Firebase Analytics(例如)?(我使用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)
    }
}
  1. doAction(...) 必须调用。好的。

  2. initialize()即使当用户从后台导航回到屏幕时也会调用。我希望它仅在用户以“前向”导航到屏幕时发送事件。它看起来也是一个糟糕的解决方案,因为引入的方法是在首次创建时进行initialize()初始化,而不是用于记录分析事件。PresenterViewState

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

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

4

2 回答 2

7

在我看来,Analytics 属于 View 层而不是 Presenter 层。因此,可以直接在 Fragment / Activity 中跟踪它,或者(我通常这样做)使用诸如lightcycleCompositeAndroid之类的库之一将“分析组件”插入到您的 Activity / Fragment 中。通过这样做,您的 Fragment / Activity 不包含 Analytics 的代码,而是解耦到它自己的类中(单一职责)。

于 2016-08-23T06:08:09.610 回答
-1

我认为分析属于演示者,但正如我在 View 中对类似问题的分析所回答的那样,更容易跳转到按钮/标签/...定义并查看此按钮在 UI 中的位置,并且更好地了解要为类别发送什么, GAnalytics 的动作、标签和值参数。我想我不需要提到演示者不能有任何 android 特定的依赖项,所以你不能从演示者跳转到按钮/标签/...定义。问候

于 2016-09-03T09:48:25.937 回答