Pārlūkot izejas kodu

[공통][New] Google Analytics - 카테고리: 필터, 필터 상세

hyodong.min 6 gadi atpakaļ
vecāks
revīzija
dac06612fa

+ 22 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/helper/FirebaseAnalyticsHelper.java

@@ -30,6 +30,8 @@ public class FirebaseAnalyticsHelper extends Helper {
     static final String CATEGORY_NAME = "category_name";
     static final String ITEM_INDEX = "item_index";
     static final String ITEM_NAME = "item_name";
+    static final String FILTER_GROUP = "filter_group";
+    static final String FILTER_ITEM = "filter_item";
 
     public static final String TYPE = "type";
     public static final String TYPE_RECOMMEND = "추천";
@@ -44,6 +46,7 @@ public class FirebaseAnalyticsHelper extends Helper {
     static final String SELECT_CONTENTS = "콘텐츠_선택";
     static final String SELECT_MENU = "메뉴_선택";
     static final String SELECT_SORT = "정렬_선택";
+    static final String APPLY_FILTER = "필터_적용";
     static final String SCREEN_VIEW = "스크린";
     static final String BUTTON = "버튼";
 
@@ -241,4 +244,23 @@ public class FirebaseAnalyticsHelper extends Helper {
     log(Event.SELECT_SORT, params);
   }
 
+  /**
+   * 카테고리 필터
+   *
+   * @param screen
+   * @param categoryIndex
+   * @param categoryLabel
+   * @param filterGroup
+   * @param filterItem
+   */
+  public void logCategoryFilter(String screen, int categoryIndex, String categoryLabel, String filterGroup, String filterItem) {
+    Bundle params = new Bundle();
+    params.putString(Param.SCREEN, screen);
+    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.FILTER_GROUP, filterGroup);
+    params.putString(Param.FILTER_ITEM, filterItem);
+    log(Event.APPLY_FILTER, params);
+  }
+
 }

+ 86 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/util/FilterUtil.java

@@ -0,0 +1,86 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import kr.co.zumo.app.lifeplus.bean.FilterSectionBean;
+import kr.co.zumo.app.lifeplus.bean.api.FilterBean;
+import kr.co.zumo.app.lifeplus.bean.api.FilterTagBean;
+
+/**
+ * FilterUtil
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2019. 3. 6.]   [최초 작성]
+ * @since 2019. 3. 6.
+ */
+public class FilterUtil {
+
+  /**
+   * GA 를 위한 필터링 맵
+   *
+   * @return
+   */
+  public static Map<String, List<String>> getFilterMap(List<FilterSectionBean> filterSectionBeans) {
+    Map<String, List<String>> map = new HashMap<>();
+    if (null != filterSectionBeans) {
+      String key;
+      List<String> list;
+      for (FilterSectionBean filterSectionBean : filterSectionBeans) {
+        for (FilterBean filterBean : filterSectionBean.getFilterBeans()) {
+          if (filterBean.isSelected()) {
+            key = filterSectionBean.getSectionTitle();
+            list = map.get(key);
+            if (null == list) {
+              list = new ArrayList<>();
+              map.put(key, list);
+            }
+            list.add(filterBean.getFilterName());
+          }
+        }
+      }
+    }
+
+    return map;
+  }
+
+  /**
+   * GA 를 위한 필터링 상세 맵
+   *
+   * @return
+   */
+  public static Map<String, List<String>> getFilterDetailMap(List<FilterSectionBean> filterSectionBeans) {
+    Map<String, List<String>> map = new HashMap<>();
+    if (null != filterSectionBeans) {
+      String key;
+      List<String> list;
+      for (FilterSectionBean filterSectionBean : filterSectionBeans) {
+        for (FilterBean filterBean : filterSectionBean.getFilterBeans()) {
+          if (FilterBean.hasChildValue(filterBean)) {
+            for (FilterTagBean tagBean : filterBean.getTagBeans()) {
+              if (tagBean.isSelected()) {
+                key = filterBean.getFilterName();
+                list = map.get(key);
+                if (null == list) {
+                  list = new ArrayList<>();
+                  map.put(key, list);
+                }
+                list.add(tagBean.getTagName());
+              }
+            }
+          }
+        }
+      }
+    }
+
+    return map;
+  }
+}

+ 20 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryFilterModel.java

@@ -8,6 +8,7 @@ import android.util.Log;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import io.reactivex.disposables.Disposable;
 import kr.co.zumo.app.lifeplus.bean.FilterSectionBean;
@@ -28,6 +29,7 @@ import kr.co.zumo.app.lifeplus.model.module.APICategoryFilterModule;
 import kr.co.zumo.app.lifeplus.model.module.APIError;
 import kr.co.zumo.app.lifeplus.model.module.APIModuleListener;
 import kr.co.zumo.app.lifeplus.model.module.FilterDetailParser;
+import kr.co.zumo.app.lifeplus.util.FilterUtil;
 import kr.co.zumo.app.lifeplus.util.StringUtil;
 import kr.co.zumo.app.lifeplus.view.Event;
 import kr.co.zumo.app.lifeplus.view.IEventListener;
@@ -484,8 +486,25 @@ public abstract class CategoryFilterModel extends CategoryMainModel {
         // 자식들 초기화
         FilterBean.setSelectChild(filterBean, false);
       }
-
     }
   }
 
+
+  /**
+   * GA 를 위한 필터링 맵
+   *
+   * @return
+   */
+  public Map<String, List<String>> getFilterMap() {
+    return FilterUtil.getFilterMap(filterSectionBeans);
+  }
+
+  /**
+   * GA 를 위한 필터링 상세 맵
+   *
+   * @return
+   */
+  public Map<String, List<String>> getFilterDetailMap() {
+    return FilterUtil.getFilterDetailMap(filterSectionBeans);
+  }
 }

+ 23 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/category/CategoryFilterPresenter.java

@@ -3,6 +3,9 @@ package kr.co.zumo.app.lifeplus.view.screen.category;
 import android.support.annotation.CallSuper;
 import android.util.Log;
 
+import java.util.List;
+import java.util.Map;
+
 import kr.co.zumo.app.R;
 import kr.co.zumo.app.lifeplus.bean.api.FilterBean;
 import kr.co.zumo.app.lifeplus.util.ResourceUtil;
@@ -80,6 +83,10 @@ public abstract class CategoryFilterPresenter<M extends CategoryFilterModel, V e
           public void onFilterChanged(FilterDialog dialog, FilterBean filterBean) {
             // 변경 된 필터를 적용한 컨텐츠의 수를 다이얼로그로 전달한다.
             loadFilteringContents();
+
+            // 선택된 상세 필터 로깅
+            Map<String, List<String>> map = model.getFilterDetailMap();
+            logCategoryFilter(R.string.fa_screen_category_filter_detail, map);
           }
 
           @Override
@@ -88,6 +95,10 @@ public abstract class CategoryFilterPresenter<M extends CategoryFilterModel, V e
             dialog.dispose();
 
             model.commitFilter();
+
+            // 선택된 수만큼 로깅
+            Map<String, List<String>> map = model.getFilterMap();
+            logCategoryFilter(R.string.fa_screen_category_filter, map);
           }
 
           @Override
@@ -130,6 +141,18 @@ public abstract class CategoryFilterPresenter<M extends CategoryFilterModel, V e
     }
   }
 
+  private void logCategoryFilter(int screen, Map<String, List<String>> map) {
+    for (String key : map.keySet()) {
+      for (String filter : map.get(key)) {
+        firebaseAnalyticsHelper.logCategoryFilter(
+          ResourceUtil.getString(screen),
+          model.getCategoryIndex() + 1,
+          getAnalyticsScreenName(),
+          key, filter);
+      }
+    }
+  }
+
   private void loadFilteringContents() {
     model.loadFilteringContents(filterDialog, event -> {
       filterDialog.setContentsCount(event.getInteger());

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -938,6 +938,8 @@
   <!-- firebase analytics -->
   <string name="fa_screen_main">메인</string>
   <string name="fa_screen_category">카테고리</string>
+  <string name="fa_screen_category_filter">카테고리필터</string>
+  <string name="fa_screen_category_filter_detail">카테고리필터상세</string>
 
   <string name="fa_category_string">Category [%d] %s</string>
   <string name="fa_contents_string">Item [%d] %s</string>