Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MVP和分析_Android_Google Analytics_Firebase Analytics_Mosby - Fatal编程技术网

Android MVP和分析

Android MVP和分析,android,google-analytics,firebase-analytics,mosby,Android,Google Analytics,Firebase Analytics,Mosby,如何在MVP应用程序架构上应用Firebase分析(例如)?(我用于构建MVP) 我想跟踪“打开屏幕”,“执行单击操作”的事件 下面是我如何发送“打开屏幕”事件 private const val ANALYTICS_SCREEN_NAME = "ask_password" private const val ANALYTICS_ACTION_DONE = "done" class AskPasswordPresenter : MyDiaryPresenter<AskPasswordVie

如何在MVP应用程序架构上应用Firebase分析(例如)?(我用于构建MVP)

我想跟踪
“打开屏幕”
“执行单击操作”
的事件

下面是我如何发送
“打开屏幕”
事件

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)
    }
}
private const val ANALYTICS\u SCREEN\u NAME=“询问密码”
private const val ANALYTICS_ACTION_DONE=“DONE”
类AskPasswordPresenter:MyDiaryPresenter{
@注入
构造函数(analytics:AnalyticsManager):超级(analytics)//AnalyticsManager是Firebase analytics API的包装器
override fun initialize(){//在创建新的ViewState时调用此方法
super.initialize()
analytics.Doscreen打开(analytics\u屏幕\u名称)
}
乐趣完成(密码:String){//当用户单击“完成”按钮时调用
...
分析.行动(分析\屏幕\名称,分析\行动\完成)
}
}
  • 必须调用doAction(…)。好的

  • initialize()。我希望它只在用户以“前方向”导航到屏幕时发送事件。它看起来也是一个糟糕的解决方案,因为在第一次创建
    ViewState
    时,为初始化
    Presenter
    引入了
    initialize()
    方法,而不是用于记录分析事件

  • 听起来我必须向演示者共享片段的生命周期。不太好


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

    在我看来,分析属于视图层,而不是演示者层。 因此,可以直接在片段/活动中跟踪它,或者(我通常做的)使用以下库之一
    或者将“分析组件”插入到您的活动/片段中。通过这样做,您的片段/活动不包含分析代码,而是解耦到自己的类中(单一责任)。

    我认为分析属于演示者,但正如我在有分析视图的问题上所回答的,更容易点击按钮/标签/。。。定义并查看此按钮在UI中的位置,更好地了解为GAnalytics的类别、活动、标签和值参数发送什么。我想我不需要提及演示者不能有任何特定于android的依赖项,所以你不能跳转到按钮/标签/。。。来自演示者的定义。关于

    我不同意
    分析
    属于
    视图
    层<代码>视图
    是关于显示信息,而不是跟踪信息。但是,哇
    CompositeAndroid
    看起来像是我的“扩展地狱”的解决方案,无论如何,谢谢!)