【问题标题】:Android MVP and AnalyticsAndroid MVP 和分析
【发布时间】:2016-08-22 18:58:35
【问题描述】:

如何在 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() 即使当用户从后台导航回到屏幕时也会调用。我希望它仅在用户以“前向”导航到屏幕时发送事件。它看起来也是一个糟糕的解决方案,因为在首次创建 ViewState 时引入了 initialize() 方法来初始化 Presenter,而不是用于记录分析事件。

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

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

【问题讨论】:

    标签: android google-analytics firebase-analytics mosby


    【解决方案1】:

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

    【讨论】:

    • 我不同意Analytics 属于View 层。 View 是关于显示信息,而不是跟踪它。但是,哇! CompositeAndroid 看起来像是我的“扩展地狱” 的解决方案,无论如何,谢谢! :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多