window.dataLayer = window.dataLayer || []; var ga4 = { isApp: function(){ if (window.AnalyticsWebInterface || (window.webkit && window.webkit.messageHandlers && window.webkit.messgeHandlers.firebase)) { return true; } return false; }, setUserProperty: function(name, value) { //앱user정보 변경 if (!name || !value) { return; } if (window.AnalyticsWebInterface) { // Call Android interface window.AnalyticsWebInterface.setUserProperty(name, value); } else if (this.isApp()) { // Call iOS interface var message = { command: 'setUserProperty', name: name, value: value }; window.webkit.messageHandlers.firebase.postMessage(message); } else { // No Android or iOS interface found console.log("No native APIs found."); } }, commonParam: function(params){ if (!params) params = {}; params.dev_yn = 'Y'; // 개발 if(_ACTIVE_ && _ACTIVE_ == 'prd') { params.dev_yn = 'N'; // 운영 } if (!params.dimension16) params.dimension16 = location.pathname; //페이지 URL파라메터 if (!params.dimension8) params.dimension8 = 'U'; // 개인화여부 if (!params.dimension9) params.dimension9 = 'U'; // 상세행사명 if (!params.dimension20) params.dimension20 = 'U'; // 컨텐츠코드 if (!params.dimension10) params.dimension10 = 'U'; // 브랜드 코드 if (!params.dimension14) params.dimension14 = 'U'; // 브랜드 코드명 if (!params.dimension11) params.dimension11 = 'U'; // 카테고리 코드 if (!params.dimension15) params.dimension15 = 'U'; // 카테고리 코드명 if (this.isApp()) { params.dimension7 = 'W'; // APP Webview } else { params.userId = '' // 고객 userId params.dimension1 = ''; // 고객 MBR_NO params.dimension2 = 'N'; // 고객 로그인유무 params.dimension3 = 'U'; // 고객 성별 params.dimension4 = 'U'; // 고객 등급코드 params.dimension12 = 'U'; // 고객 등급명 params.dimension5 ='U'; // 고객 생년 params.dimension7 = 'P'; // 고객 채널유형 - PC Web params.dimension22 = ''; // 고객 기기ID -WEB 수집불가A if (!params.user_eid) { //Normalize Email Sha256 Hash값 params.user_eid = ''; } var value = document.cookie.match('(^|;) ?cstrInfo=([^;]*)(;|$)'); var dimension6 = '0001' // 기본 본점 설정 , dimension13 = '본점_서울점'; // 점정보 설정 if(value){ var cstrInfos = decodeURIComponent(value[2]).split('_'); if(cstrInfos && cstrInfos.length > 4){ dimension6 = cstrInfos[0]; dimension13 = cstrInfos[3]+'_'+cstrInfos[4]; } } params.dimension6 = dimension6; //고객 APP 자주가는점 코드 params.dimension13 = dimension13; //고객 APP 자주가는점 코드명 EX)본점_서울점 - 자점명_중분류명 // 사용자 속성 if($('#userGaJson').length && $('#userGaJson').val().length != 0){ var userGaJson = JSON.parse($('#userGaJson').val()) params.userId = userGaJson.userId ? userGaJson.userId : '', // 고객 userId params.user_eid = userGaJson.userEid ? userGaJson.userEid : '', // 고객 userEid params.dimension1 = userGaJson.mbrNo ? userGaJson.mbrNo : '', // 고객 MBR_NO params.dimension2 = userGaJson.loginYn, // 고객 로그인유무 params.dimension3 = userGaJson.sexClCd ? userGaJson.sexClCd : 'U', // 고객 성별 params.dimension4 = userGaJson.mvgGrdeCd ? userGaJson.mvgGrdeCd : 'U', // 고객 등급코드 params.dimension12 = userGaJson.mvgGrdeNm ? userGaJson.mvgGrdeNm : 'U', // 고객 등급명 params.dimension5 = userGaJson.bday ? userGaJson.bday : 'U', // 고객 생년 params.dimension7 = 'P', // 고객 채널유형 - PC Web params.dimension22 = ''; // 고객 기기ID -WEB 수집불가 } } return params; }, logEvent: function(name, params) { //앱 이벤트 태깅 if (!name) { return; } try { if (this.isANDROID) { // Call Android interface window.AnalyticsWebInterface.logEvent(name, JSON.stringify(params)); } else if (this.isIPAD || this.isIPHONE) { // Call iOS interface var message = { command: 'logEvent', name: name, parameters: params }; window.webkit.messageHandlers.firebase.postMessage(message); } else { // No Android or iOS interface found console.log("No native APIs found."); } } catch (e) { console.error("GA logEvent Error") console.error("name : ", name) console.error("params : ", params) console.error(e) } }, appPageView: function(json_custom_params) { //APP 화면태깅 var event_params = { "screen_name" : document.title, // view name(window.title) "screen_class" : document.location.href // path }; if (json_custom_params != null) { for (key in json_custom_params) { event_params[key] = json_custom_params[key]; } } // APP 웹뷰 내에서 호출할 경우 APP-Javascript Handler logEvent호출하여 데이터 전송 this.logEvent("screen_view", event_params); }, webPageView: function(json_custom_params) {//WEB 화면태깅 dataLayer = window.dataLayer || []; //dataLayer 초기화 dataLayer.push(json_custom_params); (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-K8J2ZKT'); }, pageView: function(json_custom_params) { // 화면 태깅(APP/WEB) try { json_custom_params = this.commonParam(json_custom_params); if (this.isApp()) { this.appPageView(json_custom_params); } else { this.webPageView(json_custom_params); } } catch (e) { console.error("GA pageView Error") console.error("data : ", event_data) console.error(e) } }, event: function (event_name, event_category, event_action, event_label, event_addInfo, json_custom_params, dept_mall_yn) {// 이벤트 태깅(APP/WEB) var event_data = { 'event': 'ga_event', //트리거설정 'event_name': event_name, //이벤트명 'event_params': { // 카테고리,액션,라벨은 쌍으로 하나라도 누락되면 NOT SET으로 표시됨. 'event_category': event_category, //이벤트카테고리 'event_action': event_action, // 이벤트 액션 'event_label': event_label, //이벤트 라벨 'event_addInfo': event_addInfo || '' // 이벤트 부가정보 } } try { if (json_custom_params != null) { // 추가적으로 보내야할 공통 맞춤정의 값이 있으면 event_data.event_params에 같이 넣어서 전달하여 전송 필요 for (let key in json_custom_params) { event_data.event_params[key] = json_custom_params[key]; } } // (신규추가) 백화점몰 콘텐츠여부(백화점몰 송객 시 "Y", 아닐 경우 ""(빈 값) or "N"세팅 if(dept_mall_yn != null) { event_data.event_params['dept_mall_yn'] = dept_mall_yn } event_data.event_params.dev_yn = 'N'; // 운영 if (_ACTIVE_ && _ACTIVE_ !== 'prd') { event_data.event_params.dev_yn = 'Y'; // 개발 } //Normalize Email Sha256 Hash값 if (!event_data.event_params.user_eid) event_data.event_params.user_eid = ''; if (this.isApp()) { event_data.event_params['event_category'] = event_category.startsWith('MO_') ? event_category.replace('MO_', 'APP_') : event_category; // APP 웹뷰 내에서 호출할 경우 APP-Javascript Handler logEvent호출하여 데이터 전송 this.logEvent(event_data.event_name, event_data.event_params); } else { // 웹브라우저에서 호출할 경우 dataLayer로 넣어 GTM에서 데이터 전송(공통 맞춤정의는 자동전송) event_data.event_params['event_category'] = event_category.startsWith('APP_') ? event_category.replace('APP_', 'MO_') : event_category; dataLayer.push(event_data); } } catch(e) { console.error("GA sending Error") console.error("data : ", event_data) console.error(e) } } };