2016-08-22 43 views
2

如何將MVC應用程序體系結構上的Firebase Analytics(例如)應用? (我用Mosby打造MVP)Android 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()方法引入初始化Presenter時,第一次創建ViewState,而不是日誌記錄分析事件。

聽起來好像我必須將Fragment的生命週期分享給Presenter。不好。

您能推薦些什麼?我必須爲每個片段創建另一個實體,例如AnalyticsPresenter嗎?你如何處理這種情況?

回答

7

在我看來,分析屬於視圖層,而不是演示者層。 因此,要麼直接在片段/活動中進行跟蹤,要麼使用其中一個庫(如lightcycleCompositeAndroid)來將「分析組件」插入活動/片段。通過這樣做,您的Fragment/Activity不包含Google Analytics的代碼,而是將其分解爲自己的類(單一責任)。

+4

我不同意'Analytics'屬於'View'圖層。 'View'是關於顯示信息,而不是跟蹤它。但是,哇! 'CompositeAndroid'看起來像是我的_「延伸地獄」的解決方案,謝謝! :) – Alexandr

-1

我認爲分析屬於演示者,但正如我在similar上回答的問題,在View中進行分析可以更輕鬆地跳轉到按鈕/標籤/ ...定義並查看此按鈕在UI中的位置,並且更好地瞭解如何發送GAnalytics的Category,Actio,Label和Value參數。我想我不需要提及演示者必須沒有任何android特定的依賴關係,因此您不能跳到演示者的按鈕/標籤/ ...定義。問候