Skip to content

Commit 32a9f89

Browse files
authored
Merge pull request #45 from SWYP-mingling/chore/ga4-basic-setting
2 parents 306aac2 + babf8e4 commit 32a9f89

4 files changed

Lines changed: 46 additions & 1 deletion

File tree

app/create/page.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useCreateMeeting } from '@/hooks/api/mutation/useCreateMeeting';
77
import type { MeetingCreateRequest } from '@/types/api';
88
import { useToast } from '@/hooks/useToast';
99
import Toast from '@/components/ui/toast';
10+
import { sendGAEvent } from '@next/third-parties/google';
1011

1112
export default function Page() {
1213
const [meetingName, setMeetingName] = useState('');
@@ -123,7 +124,7 @@ export default function Page() {
123124

124125
const purposes = getPurposes();
125126

126-
// capacity 처리: "아직 안정해졌어요" 체크 시 30으로 설정
127+
// capacity 처리: "아직 안정해졌어요" 체크 시 10으로 설정
127128
const capacity = isParticipantUndecided ? 10 : participantCount || 1;
128129

129130
const requestData: MeetingCreateRequest = {
@@ -142,6 +143,27 @@ export default function Page() {
142143
const { meetingId } = result.data;
143144
console.log('생성된 ID:', meetingId);
144145

146+
// --- [GA4 이벤트 전송 로직 추가] ---
147+
if (typeof window !== 'undefined') {
148+
// 1. 브라우저 식별자(browser_id) 확인 및 생성 (Get or Create)
149+
let browserId = localStorage.getItem('browser_id');
150+
if (!browserId) {
151+
// 없으면 새로 발급해서 브라우저에 각인!
152+
const randomStr = Math.random().toString(36).substring(2, 15);
153+
browserId = `bid_${randomStr}${Date.now().toString(36)}`;
154+
localStorage.setItem('browser_id', browserId);
155+
}
156+
157+
// 2. 방 만든 브라우저가 누구인지 식별자를 담아서 이벤트 전송
158+
sendGAEvent('event', 'url_created', {
159+
meeting_url_id: meetingId,
160+
participant_count_expected: capacity,
161+
browser_id: browserId,
162+
entry_method: 'url_direct',
163+
});
164+
}
165+
// -----------------------------------
166+
145167
// purposes를 localStorage에 저장 (장소 추천 카테고리로 사용)
146168
const purposes = getPurposes();
147169
if (purposes.length > 0) {

app/layout.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Header from '../components/header';
66
import Footer from '../components/footer';
77
import GlobalModal from '@/components/modal/globalModal';
88
import QueryProvider from '@/components/providers/queryProvider';
9+
import { GoogleAnalytics } from '@next/third-parties/google';
910

1011
const pretendard = localFont({
1112
src: [
@@ -49,6 +50,7 @@ export default function RootLayout({
4950
strategy="beforeInteractive"
5051
/>
5152
</body>
53+
<GoogleAnalytics gaId="G-3FN93H79SZ" />
5254
</html>
5355
);
5456
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"lint": "eslint"
1010
},
1111
"dependencies": {
12+
"@next/third-parties": "^16.1.6",
1213
"@radix-ui/react-dialog": "^1.1.15",
1314
"@radix-ui/react-tooltip": "^1.1.3",
1415
"@tanstack/react-query": "^5.90.16",

pnpm-lock.yaml

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)