Browse Source

[공통][New] Google Analytics - 날씨 버튼, 메인

hyodong.min 6 years ago
parent
commit
50ce479324

+ 60 - 7
app/src/main/java/kr/co/zumo/app/lifeplus/helper/FirebaseAnalyticsHelper.java

@@ -9,7 +9,7 @@ import android.support.annotation.StringRes;
 
 import com.google.firebase.analytics.FirebaseAnalytics;
 
-import kr.co.zumo.app.lifeplus.util.ResourceUtil;
+import kr.co.zumo.app.R;
 
 /**
  * FirebaseAnalyticsHelper
@@ -23,8 +23,30 @@ import kr.co.zumo.app.lifeplus.util.ResourceUtil;
  */
 public class FirebaseAnalyticsHelper extends Helper {
 
+  public static class Param {
+    public static final String SCREEN = "screen";
+    public static final String ITEM_NAME = "item_name";
+    public static final String CATEGORY_INDEX = "category_index";
+    public static final String CATEGORY_NAME = "category_name";
+    public static final String CONTENTS_INDEX = "contents_index";
+    public static final String CONTENTS_NAME = "contents_name";
+
+    protected Param() {
+    }
+  }
+
+  public static class Event {
+    public static final String MAIN = "main";
+    public static final String BUTTON = "button";
+
+    protected Event() {
+    }
+  }
+
   private FirebaseAnalytics firebaseAnalytics;
 
+  private Context context;
+
   @Override
   protected void onCleared() {
     firebaseAnalytics = null;
@@ -36,6 +58,7 @@ public class FirebaseAnalyticsHelper extends Helper {
    * @param context
    */
   public void init(Context context) {
+    this.context = context;
     firebaseAnalytics = FirebaseAnalytics.getInstance(context);
     firebaseAnalytics.setUserProperty("lifeplus", "android");
   }
@@ -53,20 +76,50 @@ public class FirebaseAnalyticsHelper extends Helper {
   /**
    * 버튼 클릭 로그
    *
+   * @param screen
    * @param name
    */
-  public void click(String name) {
+  public void click(String screen, String name) {
     Bundle params = new Bundle();
-    params.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
-    log(FirebaseAnalytics.Event.SELECT_CONTENT, params);
+    params.putString(Param.SCREEN, screen);
+    params.putString(Param.ITEM_NAME, name);
+    log(Event.BUTTON, params);
   }
 
   /**
    * 버튼 클릭 로그
    *
-   * @param stringId
+   * @param screenStringId
+   * @param nameStringId
    */
-  public void click(@StringRes int stringId) {
-    click(ResourceUtil.getString(stringId));
+  public void click(@StringRes int screenStringId, @StringRes int nameStringId) {
+    click(context.getString(screenStringId), context.getString(nameStringId));
+  }
+
+  /**
+   * 버튼 클릭 로그
+   *
+   * @param screen
+   * @param nameStringId
+   */
+  public void click(String screen, @StringRes int nameStringId) {
+    click(screen, context.getString(nameStringId));
+  }
+
+  /**
+   * 메인 컨텐츠 클릭 이벤트 로깅
+   *
+   * @param categoryIndex
+   * @param categoryLabel
+   * @param contentIndex
+   * @param contentLabel
+   */
+  public void logMain(int categoryIndex, String categoryLabel, int contentIndex, String contentLabel) {
+    Bundle params = new Bundle();
+    params.putString(Param.CATEGORY_INDEX, String.valueOf(categoryIndex));
+    params.putString(Param.CATEGORY_NAME, context.getString(R.string.fa_main_category_string, categoryIndex, categoryLabel));
+    params.putString(Param.CONTENTS_INDEX, String.valueOf(contentIndex));
+    params.putString(Param.CONTENTS_NAME, context.getString(R.string.fa_main_contents_string, contentIndex, contentLabel));
+    log(Event.MAIN, params);
   }
 }

+ 13 - 4
app/src/main/java/kr/co/zumo/app/lifeplus/helper/NavigationBar.java

@@ -621,6 +621,15 @@ public class NavigationBar {
     return isWhite;
   }
 
+  /**
+   * 타이틀 string id 반환
+   *
+   * @return
+   */
+  public String getTitleString() {
+    return builder.title;
+  }
+
   /**
    * dispose
    */
@@ -700,15 +709,15 @@ public class NavigationBar {
       return title(stringId, null);
     }
 
-    public Builder title(String stringId, INavigationBarListener titleListener) {
-      this.title = stringId;
+    public Builder title(String string, INavigationBarListener titleListener) {
+      this.title = string;
       isVisibleTitle = true;
       this.titleListener = titleListener;
       return this;
     }
 
-    public Builder title(String stringId) {
-      return title(stringId, null);
+    public Builder title(String string) {
+      return title(string, null);
     }
 
     /**

+ 13 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/presenter/Presenter.java

@@ -245,6 +245,17 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
     return true;
   }
 
+  /**
+   * GA 에 이용되는 현재 화면의 이름
+   * - 기본값: NavigationBar 의 title
+   *
+   * @param navigationBar
+   * @return
+   */
+  protected String getAnalyticsScreenName(NavigationBar navigationBar) {
+    return navigationBar.getTitleString();
+  }
+
   /***********************************
    * Toast
    ***********************************/
@@ -850,7 +861,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
    * @param navigationBar
    */
   public void onNavigationClickSearch(NavigationBar navigationBar) {
-    firebaseAnalyticsHelper.click(R.string.fa_search);
+    firebaseAnalyticsHelper.click(getAnalyticsScreenName(navigationBar), R.string.fa_search);
 
     go(ScreenID.SEARCH);
   }
@@ -861,7 +872,7 @@ public abstract class Presenter<M extends Model, V extends IView> implements ILi
    * @param navigationBar
    */
   public void onNavigationClickMenu(NavigationBar navigationBar) {
-    firebaseAnalyticsHelper.click(R.string.fa_all_menu);
+    firebaseAnalyticsHelper.click(getAnalyticsScreenName(navigationBar), R.string.fa_all_menu);
 
     model.setDeliveryPackaging(model.getScreenId());
     go(ScreenID.ALL_MENU);

+ 21 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/MainPresenter.java

@@ -20,6 +20,7 @@ import kr.co.zumo.app.lifeplus.bean.api.APIData;
 import kr.co.zumo.app.lifeplus.bean.api.EventDetailBean;
 import kr.co.zumo.app.lifeplus.bean.api.LinkBean;
 import kr.co.zumo.app.lifeplus.bean.api.LoginBean;
+import kr.co.zumo.app.lifeplus.bean.api.MainContentsBean;
 import kr.co.zumo.app.lifeplus.bean.api.MainContentsCategoryBean;
 import kr.co.zumo.app.lifeplus.bean.api.PromotionPopupBean;
 import kr.co.zumo.app.lifeplus.helper.NavigationBar;
@@ -278,7 +279,7 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
           // 권한이 없을 때만 실행
           requestPermissionsAndLoadWeather();
 
-          firebaseAnalyticsHelper.click(R.string.fa_weather);
+          firebaseAnalyticsHelper.click(R.string.fa_screen_main, R.string.fa_weather);
         }
 
         break;
@@ -289,7 +290,11 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
         int contentsIndex = event.getInteger();
         int id = getScreenId(categoryIndex, contentsIndex);
 
-        MainContentsCategoryBean bean = model.getContentsBeans().get(categoryIndex).getContentsList().get(contentsIndex);
+        MainContentsBean categoryBean = model.getContentsBeans().get(categoryIndex);
+        MainContentsCategoryBean bean = categoryBean.getContentsList().get(contentsIndex);
+
+        firebaseAnalyticsHelper.logMain(categoryIndex, categoryBean.getCategoryName(), contentsIndex + 1, bean.getTitleWithTrim());
+
         if (ScreenID.EVENT_DETAIL == id) {
           // 이벤트 상세 로딩 후 진행
           new EventDetailDelegate().loadEvent(bean.getItemNo(), new EventDetailDelegate.IEventDetailDelegateListener() {
@@ -533,7 +538,7 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
 
   @Override
   public void onNavigationClickLogo(NavigationBar navigationBar) {
-    firebaseAnalyticsHelper.click(R.string.fa_bi);
+    firebaseAnalyticsHelper.click(getAnalyticsScreenName(navigationBar), R.string.fa_bi);
 
     // reload
     home();
@@ -612,4 +617,17 @@ public class MainPresenter extends Presenter<MainModel, IMainView> {
   private void showNewbiePopup() {
     view.setNewbieLayoutVisible(true);
   }
+
+
+  /**
+   * GA 에 이용되는 현재 화면의 이름
+   * - 기본값: NavigationBar 의 title
+   *
+   * @param navigationBar
+   * @return
+   */
+  @Override
+  protected String getAnalyticsScreenName(NavigationBar navigationBar) {
+    return ResourceUtil.getString(R.string.fa_screen_main);
+  }
 }

+ 1 - 11
app/src/main/java/kr/co/zumo/app/lifeplus/view/screen/main/SystemPopupModelHelper.java

@@ -67,7 +67,7 @@ public class SystemPopupModelHelper {
   }
 
 
-/*
+  /*
 
   화면 진입 전 진입불가 화면을 체크
 
@@ -89,16 +89,6 @@ public class SystemPopupModelHelper {
     if (null != systemPopupBeans) {
       for (SystemPopupBean systemPopupBean : systemPopupBeans) {
         if (null != systemPopupBean.getMenuIdList()) {
-
-          // fixme debug 에서 카테고리 1, 2 를 점검할 경우에는 3으로 대치. 1,2 에는 필터 등 테스트 할 것이 많음.
-//          if (AppUtil.isDebug()) {
-//            for (MenuIDBean menuIDBean1 : systemPopupBean.getMenuIdList()) {
-//              if (menuIDBean1.getMenuId().equals(LinkInvoker.API_ID_CATEGORY_0) || menuIDBean1.getMenuId().equals(LinkInvoker.API_ID_CATEGORY_1)) {
-//                menuIDBean1.setMenuId(LinkInvoker.API_ID_CATEGORY_3);
-//              }
-//            }
-//          }
-
           for (MenuIDBean menuIDBean : systemPopupBean.getMenuIdList()) {
             // 해당 화면 확인
             int[] screenIds = LinkInvoker.getScreenIdByApiId(menuIDBean.getMenuId());

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

@@ -936,6 +936,11 @@
   <!-- 임의 추가 문자열 : 끝 -->
 
   <!-- firebase analytics -->
+  <string name="fa_screen_main">메인</string>
+
+  <string name="fa_main_category_string">Category [%d] %s</string>
+  <string name="fa_main_contents_string">Item [%d] %s</string>
+
   <string name="fa_bi">BI</string>
   <string name="fa_search">검색</string>
   <string name="fa_all_menu">전체메뉴</string>