瀏覽代碼

[공통][New] Google Analytics - 콘텐츠: 구매/예약. 시리즈

hyodong.min 6 年之前
父節點
當前提交
1c0ea551aa

+ 64 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/helper/FirebaseAnalyticsHelper.java

@@ -34,6 +34,10 @@ public class FirebaseAnalyticsHelper extends Helper {
     static final String FILTER_ITEM = "filter_item";
     static final String TYPE = "type";
     static final String PAGE = "page";
+    static final String COMPANY_NAME = "company_name";
+    static final String PRODUCT_NAME = "product_name";
+    static final String SERIES_UID = "series_uid";
+    static final String SERIES_NAME = "series_name";
 
     protected Param() {
     }
@@ -46,6 +50,8 @@ public class FirebaseAnalyticsHelper extends Helper {
     static final String APPLY_FILTER = "필터_적용";
     static final String SCREEN_VIEW = "스크린";
     static final String BUTTON = "버튼";
+    static final String BUTTON_PURCHASE = "구매예약_버튼";
+    static final String BUTTON_PURCHASE_MODULE = "구매예약_모듈";
 
     protected Event() {
     }
@@ -160,7 +166,7 @@ public class FirebaseAnalyticsHelper extends Helper {
   }
 
   /**
-   * 콘텐츠 클릭 (콘텐츠 내 시리즈/함께 본)
+   * 콘텐츠 클릭 (콘텐츠 내 함께 본)
    *
    * @param screenStringId
    * @param typeId
@@ -174,7 +180,31 @@ public class FirebaseAnalyticsHelper extends Helper {
     params.putString(Param.TYPE, context.getString(typeId));
     params.putString(Param.PAGE, context.getString(pageId));
     params.putString(Param.ITEM_INDEX, String.valueOf(contentIndex));
-    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_contents_string, contentIndex, contentLabel));
+    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_item_id_string, contentIndex, contentLabel));
+
+    log(Event.SELECT_CONTENTS, params);
+  }
+
+  /**
+   * 콘텐츠 클릭 (시리즈, 콘텐츠 내 시리즈)
+   *
+   * @param screenStringId
+   * @param typeId
+   * @param pageId
+   * @param seriesUid
+   * @param seriesName
+   * @param contentIndex
+   * @param contentLabel
+   */
+  public void logContents(@StringRes int screenStringId, @StringRes int typeId, @StringRes int pageId, String seriesUid, String seriesName, int contentIndex, String contentLabel) {
+    Bundle params = new Bundle();
+    params.putString(Param.SCREEN, context.getString(screenStringId));
+    params.putString(Param.TYPE, context.getString(typeId));
+    params.putString(Param.PAGE, context.getString(pageId));
+    params.putString(Param.SERIES_UID, seriesUid);
+    params.putString(Param.SERIES_NAME, context.getString(R.string.fa_series_string, seriesUid, seriesName));
+    params.putString(Param.ITEM_INDEX, String.valueOf(contentIndex));
+    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_item_id_string, contentIndex, contentLabel));
 
     log(Event.SELECT_CONTENTS, params);
   }
@@ -217,7 +247,7 @@ public class FirebaseAnalyticsHelper extends Helper {
     params.putString(Param.CATEGORY_INDEX, String.valueOf(categoryIndex));
     params.putString(Param.CATEGORY_NAME, context.getString(R.string.fa_category_string, categoryIndex, categoryLabel));
     params.putString(Param.ITEM_INDEX, String.valueOf(contentIndex));
-    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_contents_string, contentIndex, contentLabel));
+    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_item_id_string, contentIndex, contentLabel));
 
     return params;
   }
@@ -250,7 +280,7 @@ public class FirebaseAnalyticsHelper extends Helper {
     params.putString(Param.CATEGORY_INDEX, String.valueOf(categoryIndex));
     params.putString(Param.CATEGORY_NAME, context.getString(R.string.fa_category_string, categoryIndex, categoryLabel));
     params.putString(Param.ITEM_INDEX, String.valueOf(contentIndex));
-    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_contents_string, contentIndex, contentLabel));
+    params.putString(Param.ITEM_NAME, context.getString(R.string.fa_item_id_string, contentIndex, contentLabel));
     log(Event.SELECT_MENU, params);
   }
 
@@ -290,4 +320,34 @@ public class FirebaseAnalyticsHelper extends Helper {
     log(Event.APPLY_FILTER, params);
   }
 
+  /**
+   * 구매/예약 버튼
+   *
+   * @param screen
+   * @param company
+   * @param product
+   */
+  public void logPurchase(String screen, String company, String product) {
+    Bundle params = new Bundle();
+    params.putString(Param.SCREEN, screen);
+    params.putString(Param.COMPANY_NAME, company);
+    params.putString(Param.PRODUCT_NAME, product);
+    log(Event.BUTTON_PURCHASE, params);
+  }
+
+  /**
+   * 구매/예약 모듈
+   *
+   * @param screen
+   * @param company
+   * @param product
+   */
+  public void logPurchaseModule(String screen, String company, String product) {
+    Bundle params = new Bundle();
+    params.putString(Param.SCREEN, screen);
+    params.putString(Param.COMPANY_NAME, company);
+    params.putString(Param.PRODUCT_NAME, product);
+    log(Event.BUTTON_PURCHASE_MODULE, params);
+  }
+
 }

+ 4 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsBasePresenter.java

@@ -86,10 +86,12 @@ public abstract class ContentsBasePresenter<M extends ContentsBaseModel, V exten
   }
 
   @Override
-  protected void startInternalOnce() {
-    firebaseAnalyticsHelper.logScreen(R.string.fa_screen_contents, model.getContentsTypeString());
+  protected final void startInternalOnce() {
+    startInternalOnceInternal();
   }
 
+  protected abstract void startInternalOnceInternal();
+
   @Override
   protected void stopInternal() {
 

+ 1 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsOverviewPresenter.java

@@ -4,7 +4,6 @@ import android.util.Log;
 
 import kr.co.zumo.app.lifeplus.bean.ContentsOverviewDeliveryBean;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
-import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
 
@@ -39,7 +38,7 @@ public class ContentsOverviewPresenter extends ContentsBasePresenter<ContentsOve
   }
 
   @Override
-  protected void startInternalOnce() {
+  protected void startInternalOnceInternal() {
     if (null == this.model.getContentsItemBeans()) {
       this.model.loadDetail();
     }

+ 25 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/ContentsPresenter.java

@@ -15,12 +15,14 @@ import kr.co.zumo.app.lifeplus.bean.ContentsWebDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.HtmlBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsItemBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
+import kr.co.zumo.app.lifeplus.bean.api.SeriesItemBean;
 import kr.co.zumo.app.lifeplus.bean.api.SpecialCodeBean;
 import kr.co.zumo.app.lifeplus.bean.api.WithShownItemBean;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
 import kr.co.zumo.app.lifeplus.helper.ScreenSizeHelper;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
 import kr.co.zumo.app.lifeplus.tool.GuestContentsShowCounter;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.DoubleChecker;
 import kr.co.zumo.app.lifeplus.view.Event;
@@ -199,7 +201,11 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
   }
 
   @Override
-  protected void startInternalOnce() {
+  protected void startInternalOnceInternal() {
+
+    LifeplusContentsBean bean = model.getContentsBean();
+    firebaseAnalyticsHelper.logScreen(R.string.fa_screen_contents, ResourceUtil.getString(R.string.fa_id_string, bean.getItemNo(), bean.getTitleWithTrim()));
+
     this.model.loadDetail();
   }
 
@@ -235,7 +241,16 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
         // 시리즈 클릭
         model.setSeriesSelectedIndex(event.getIndex());
         LifeplusContentsBean bean = model.getSelectedSeriesItemBean().getClone();
-        logContents(R.string.fa_page_series, event.getIndex(), bean);
+        SeriesItemBean seriesInfo = model.getContentsDetailListBean().getSeriesInfo();
+        firebaseAnalyticsHelper.logContents(
+          R.string.fa_screen_contents,
+          model.getContentsTypeString(),
+          R.string.fa_page_series,
+          seriesInfo.getItemNo(),
+          seriesInfo.getTitleWithTrim(),
+          event.getIndex() + 1,
+          bean.getTitleWithTrim()
+        );
 
         flushLogAndContinue(e -> {
 
@@ -299,10 +314,14 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
         });
         break;
       case Event.POINT:
+        // 구매/예약 점 클릭
+        String url = event.getString();
+        // fixme 로깅 관련 정보(컴퍼니/프로덕트)가 없어서 임시로 url
+        firebaseAnalyticsHelper.logPurchase(ResourceUtil.getString(R.string.fa_screen_contents), url, url);
         flushLogAndContinue(e -> {
           // todo tool tip 표시 필요
-          Log.e("APP#  ContentsPresenter | onEventInternal", "|" + event.getString());
-          shipToWeb(event.getString(), ScreenID.WEB_PURCHASE);
+          Log.e("APP#  ContentsPresenter | onEventInternal", "|" + url);
+          shipToWeb(url, ScreenID.WEB_PURCHASE);
           go(ScreenID.WEB_PURCHASE);
         });
         break;
@@ -329,8 +348,8 @@ public class ContentsPresenter extends ContentsBasePresenter<ContentsModel, ICon
     }
   }
 
-  private void logContents(@StringRes int pageId, int index,  LifeplusContentsBean bean) {
-    firebaseAnalyticsHelper.logContents(R.string.fa_screen_contents, model.getContentsTypeString(), pageId, index+1, bean.getTitleWithTrim());
+  private void logContents(@StringRes int pageId, int index, LifeplusContentsBean bean) {
+    firebaseAnalyticsHelper.logContents(R.string.fa_screen_contents, model.getContentsTypeString(), pageId, index + 1, bean.getTitleWithTrim());
   }
 
   private void flushLogAndContinue(IEventListener listener) {

+ 4 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/series/ContentsSeriesModel.java

@@ -97,6 +97,10 @@ public class ContentsSeriesModel extends ContentsBaseModel {
     return seriesInfo.getImageUrl();
   }
 
+  public String getSeriesItemNo() {
+    return seriesInfo.getItemNo();
+  }
+
   @Override
   protected void stopLoadingInternal() {
 

+ 14 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/contents/series/ContentsSeriesPresenter.java

@@ -1,9 +1,11 @@
 package kr.co.zumo.app.lifeplus.view.screen.contents.series;
 
+import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.ContentsDeliveryBean;
 import kr.co.zumo.app.lifeplus.bean.api.ContentsDetailListBean;
 import kr.co.zumo.app.lifeplus.bean.api.LifeplusContentsBean;
 import kr.co.zumo.app.lifeplus.supervisor.ScreenID;
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.presenter.Presenter;
 
@@ -54,7 +56,7 @@ public class ContentsSeriesPresenter extends Presenter<ContentsSeriesModel, ICon
 
   @Override
   protected void startInternalOnce() {
-
+    firebaseAnalyticsHelper.logScreen(R.string.fa_screen_series, ResourceUtil.getString(R.string.fa_id_string, model.getSeriesItemNo(), model.getSeriesTitle()));
   }
 
   @Override
@@ -82,6 +84,17 @@ public class ContentsSeriesPresenter extends Presenter<ContentsSeriesModel, ICon
         // 그대로 contentsView 에 전달하면 공유 등 문제가 있다.
         // 이를 clone()하여 새로운 bean 으로 전달한다.
         LifeplusContentsBean bean = model.getContentsBean().getClone();
+
+        firebaseAnalyticsHelper.logContents(
+          R.string.fa_screen_series,
+          R.string.fa_type_series,
+          R.string.fa_page_series,
+          model.getSeriesItemNo(),
+          model.getSeriesTitle(),
+          event.getIndex() + 1,
+          bean.getTitleWithTrim()
+        );
+
         ContentsDeliveryBean contentsDeliveryBean = new ContentsDeliveryBean.Builder(bean).build();
 
         model.setDeliveryPackaging(contentsDeliveryBean);

+ 5 - 1
app/src/main/res/values/strings.xml

@@ -792,10 +792,13 @@
   <string name="fa_screen_category_filter">카테고리필터</string>
   <string name="fa_screen_category_filter_detail">카테고리필터상세</string>
   <string name="fa_screen_contents">콘텐츠</string>
+  <string name="fa_screen_series">시리즈</string>
 
   <string name="fa_category_string">Category [%d] %s</string>
-  <string name="fa_contents_string">Item [%d] %s</string>
+  <string name="fa_item_id_string">Item [%d] %s</string>
   <string name="fa_item_string">Item %s</string>
+  <string name="fa_series_string">Series [%s] %s</string>
+  <string name="fa_id_string">[%s] %s</string>
 
   <string name="fa_button_bi">BI</string>
   <string name="fa_button_search">검색</string>
@@ -812,6 +815,7 @@
   <string name="fa_type_recommend">추천</string>
   <string name="fa_type_list">목록</string>
   <string name="fa_type_banner">배너</string>
+  <string name="fa_type_series">시리즈</string>
 
   <string name="fa_page_series">시리즈</string>
   <string name="fa_page_with">함께 본 콘텐츠</string>