2016-08-22 4 views
2

MVP 앱 아키텍처에 Firebase Analytics (예 :)를 적용하는 방법은 무엇입니까? (나는 MVP를 만들기 위해 Mosby을 사용합니다)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 (...). 괜찮아. 사용자가 뒤로 가기 backstack에서 화면을 탐색하더라도 호출

  2. initialize(). 사용자가 "정면 방향"으로 화면을 탐색 할 때만 이벤트를 보내길 원합니다. 또한 ViewState가 없습니다 분석 이벤트 로깅을 위해, 처음에 만들 때 Presenter를 초기화 도입 initialize() 방법으로 나쁜 솔루션처럼 보인다.

프리젠 테이션에 Fragment의 라이프 사이클을 공유해야하는 것처럼 들립니다. 안좋다.

당신은 무엇을 추천 할 수 있습니까? 각 단편마다 AnalyticsPresenter와 같은 다른 엔티티를 만들어야합니까? 이 사건을 어떻게 처리합니까? 내 의견 웹 로그 분석에서

답변

7

는보기 층과 발표자하지 계층에 속한다. 그래서 조각/활동에 직접 중 하나를 추적하거나 (나는 보통 무엇을) 당신의 활동/조각에 "웹 로그 분석 구성 요소"플러그인의 종류에 lightcycle 또는 CompositeAndroid 같은 라이브러리 중 하나를 사용하십시오. 그렇게함으로써 귀하의 단편/활동에는 애널리틱스 코드가 포함되지 않고 오히려 자체 클래스로 분리됩니다 (단일 책임).

+4

나는 '분석'이 '보기'계층에 속한다는 것에 동의하지 않습니다. '보기 (View) '는 정보를 보여주는 것이지 추적하지 않는 것입니다. 그러나, 와우! 'CompositeAndroid'는 내 _ "확장 지옥"_에 대한 해결책처럼 보입니다. 어쨌든 감사합니다! :) – Alexandr

-1

나는 analytics가 발표자에 속한다고 생각하지만, similar 질문에 대한 답변은보기에서 버튼/라벨/... 정의로 쉽게 넘어갈 수 있으며이 버튼이 UI에있는 위치를보고 더 나은 아이디어를 얻을 수 있습니다. GAnalytics의 카테고리, 액티비티, 라벨 및 값 매개 변수를 보내십시오. 발표자의 버튼/라벨/... 정의로 이동할 수 없기 때문에 발표자가 어떤 안드로이드 특정 종속물도 가질 수 없다는 언급은 필요하지 않다고 생각합니다. 감사합니다