Android MVP和分析

Ale*_*ndr 2 android google-analytics mosby firebase-analytics

如何在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)
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. doAction(...)被称为必须.好的.

  2. initialize()即使用户从backstack导航回屏幕,也会调用.我希望它仅在用户导航到"前方"屏幕时发送事件.它也看起来像一个糟糕的解决方案,因为它是在第一次创建时initialize()初始化Presenter时引入的方法ViewState,而不是用于记录分析事件.

听起来我必须与Presenter分享Fragment的生命周期.不好.

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

soc*_*qwe 7

在我看来,Analytics属于View层而不是Presenter层.因此,直接在Fragment/Activity或(我通常做的)中使用其中一个库(如lightcycleCompositeAndroid)来跟踪它,以便在您的Activity/Fragment中插入"Analytics组件".通过这样做,您的Fragment/Activity不包含Analytics的代码,而是分离到它自己的类(单一责任).

  • 我不同意`Analytics`属于`View`层.`View`是关于显示信息,而不是跟踪它.但是,哇!`CompositeAndroid`看起来像我的_"延伸地狱"的解决方案_,谢谢!:) (6认同)