2016-08-22 7 views
2

MVPアプリケーションアーキテクチャにFirebase Analyticsを(たとえば)適用する方法は? (私はMosbyを使用してMVPを構築します)Android MVPとAnalytics

イベントをトラッキングしたいと思います。"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が最初に作成されたときにPresenterを初期化するために導入されたinitialize()メソッドのような悪い解決策のように見えます。

私はPresenterにFragmentのライフサイクルを共有する必要があります。良くない。

お勧めできますか?各フラグメントに対してAnalyticsPresenterのような別のエンティティを作成する必要がありますか?あなたはこのケースをどのように扱いますか?

答えて

7

私の意見では、アナリティクスはViewレイヤーに属し、Presenterレイヤーには属しません。 それをフラグメント/アクティビティで直接追跡するか(通常は何か)、lightcycle またはCompositeAndroidのようなライブラリの1つを使用して、アクティビティ/フラグメントに「アナリティクスコンポーネント」をプラグインします。そうすることで、あなたのフラグメント/アクティビティにはアナリティクスのコードが含まれず、むしろ独自のクラスに分離されます(単一の責任)。

+4

私は 'Analytics'は' View'レイヤに属しているとは思っていません。 'View'は情報を表示し、追跡しません。しかし、うわー!とにかく、「CompositeAndroid」は、私の_「地獄を広げる」_のための解決策のようです。 :) – Alexandr

-1

アナリティクスはプレゼンターに属していると思いますが、私はsimilarの質問でアナリティクスをビューに表示すると、ボタン/ラベル/ ...の定義にジャンプしてこのボタンがUIのどこにあるかを確認しやすくなりますGAnalyticsのカテゴリ、行動、ラベル、および値パラメータを送信します。私は発表者からボタン/ラベル/ ...の定義にジャンプすることはできませんので、私は発表者は、任意のアンドロイド固有の依存関係を持つ必要はありません言及する必要はないと思う。よろしくお願いします。

関連する問題