diff --git a/EATSSU/App/Sources/Data/Firebase/ReviewAnalyticsManager.swift b/EATSSU/App/Sources/Data/Firebase/ReviewAnalyticsManager.swift index d9e3bcce..03ab8635 100644 --- a/EATSSU/App/Sources/Data/Firebase/ReviewAnalyticsManager.swift +++ b/EATSSU/App/Sources/Data/Firebase/ReviewAnalyticsManager.swift @@ -16,14 +16,14 @@ final class ReviewAnalyticsManager { // MARK: - Event & Parameter Keys private enum Event { - static let writeReview = "write_review_v1" - static let completeReview = "complete_review_v1" + static let writeReview = "write_review_v2" + static let completeReview = "complete_review_v2" } private enum Parameter { static let photoAttached = "photo_attached" static let rating = "rating" - static let selection = "selection" + static let likes = "likes" } // MARK: - Logging Methods @@ -41,11 +41,11 @@ final class ReviewAnalyticsManager { - Parameter rating: 사용자가 부여한 메인 별점 (1~5) - Parameter selection: 사용자가 한 번에 리뷰를 작성하는 메뉴의 총 개수 */ - func logCompleteReviewV1(photoAttached: Int, rating: Int, selection: Int) { + func logCompleteReviewV1(photoAttached: Int, rating: Int, likes: Int) { AnalyticsService.logEvent(Event.completeReview, parameters: [ Parameter.photoAttached: photoAttached, Parameter.rating: rating, - Parameter.selection: selection + Parameter.likes: likes ]) } } diff --git a/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager+SendEvents.swift b/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager+SendEvents.swift index 60cb4189..a2fc92ba 100644 --- a/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager+SendEvents.swift +++ b/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager+SendEvents.swift @@ -11,10 +11,15 @@ extension WidgetAnalyticsManager { func sendPendingEvents() { // 1. 위젯 추가 이벤트 전송 if userDefaults?.bool(forKey: UserDefaultsKey.widgetAdded) == true { - AnalyticsService.logEvent(Event.addWidget) + var parameters: [String: Any] = [:] + if let restaurant = userDefaults?.string(forKey: UserDefaultsKey.widgetAddedRestaurant) { + parameters["restaurants"] = restaurant + } + AnalyticsService.logEvent(Event.addWidget, parameters: parameters) userDefaults?.removeObject(forKey: UserDefaultsKey.widgetAdded) + userDefaults?.removeObject(forKey: UserDefaultsKey.widgetAddedRestaurant) #if DEBUG - print("Analytics: Logged add_widget_ios") + print("Analytics: Logged add_widget with params \(parameters)") #endif } @@ -23,7 +28,7 @@ extension WidgetAnalyticsManager { AnalyticsService.logEvent(Event.changeWidget, parameters: changeInfo) userDefaults?.removeObject(forKey: UserDefaultsKey.widgetChanged) #if DEBUG - print("Analytics: Logged change_widget_ios with params \(changeInfo)") + print("Analytics: Logged change_widget with params \(changeInfo)") #endif } } diff --git a/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager.swift b/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager.swift index 8484f8b4..793c01e6 100644 --- a/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager.swift +++ b/EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager.swift @@ -31,17 +31,19 @@ final class WidgetAnalyticsManager { // MARK: - Event & Parameter Keys enum Event { - static let addWidget = "add_widget_ios" - static let changeWidget = "change_widget_ios" + static let addWidget = "add_widget" + static let changeWidget = "change_widget" } private enum Parameter { + static let restaurants = "restaurants" static let restaurantBefore = "restaurant_before" static let restaurantAfter = "restaurant_after" } enum UserDefaultsKey { static let widgetAdded = "pendingWidgetAddedEvent" + static let widgetAddedRestaurant = "pendingWidgetAddedRestaurant" static let widgetChanged = "pendingWidgetChangedEvent" } @@ -58,8 +60,12 @@ final class WidgetAnalyticsManager { // MARK: - Methods to be Called from Widget Extension /// (위젯에서 호출) 사용자가 위젯을 추가했을 때, 이벤트를 기록합니다. - func recordWidgetAdded() { + /// - Parameter restaurant: 위젯에 설정된 식당 이름 (한글) + func recordWidgetAdded(restaurant: String) { userDefaults?.set(true, forKey: UserDefaultsKey.widgetAdded) + if let paramValue = restaurantNameMap[restaurant] { + userDefaults?.set(paramValue, forKey: UserDefaultsKey.widgetAddedRestaurant) + } } /// (위젯에서 호출) 사용자가 위젯의 식당을 변경했을 때, 이전/이후 정보를 기록합니다. diff --git a/EATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swift b/EATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swift index 6ab48ca4..e4ca029b 100644 --- a/EATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swift +++ b/EATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swift @@ -128,6 +128,7 @@ final class LoginViewController: BaseViewController { departmentId: info.departmentId, departmentName: info.departmentName ) + } changeIntoHomeViewController() } else { @@ -150,6 +151,8 @@ final class LoginViewController: BaseViewController { @objc private func kakaoLoginButtonDidTapped() { + AnalyticsService.logEvent("click_login", parameters: ["method": "kakao"]) + // 카카오톡이 설치되어 있으면 앱을 통해 로그인 시도 if UserApi.isKakaoTalkLoginAvailable() { UserApi.shared.loginWithKakaoTalk { [weak self] _, error in @@ -180,11 +183,13 @@ final class LoginViewController: BaseViewController { @objc private func appleLoginButtonDidTapped() { + AnalyticsService.logEvent("click_login", parameters: ["method": "apple"]) appleLoginRequest() } @objc private func lookingWithNoSignInButtonDidTapped() { + AnalyticsService.logEvent("click_login", parameters: ["method": "guest"]) changeIntoHomeViewController() } } @@ -246,6 +251,7 @@ extension LoginViewController { refreshToken: signData.refreshToken) _ = UserInfoManager.shared.createUserInfo(accountType: .kakao) UserDefaults.standard.set(UserInfo.AccountType.kakao.rawValue, forKey: TextLiteral.Auth.lastLoginProviderKey) + AnalyticsService.logEvent("complete_login", parameters: ["method": "kakao"]) getMyInfo() case .failure(let error): @@ -275,6 +281,7 @@ extension LoginViewController { refreshToken: signData.refreshToken) _ = UserInfoManager.shared.createUserInfo(accountType: .apple) UserDefaults.standard.set(UserInfo.AccountType.apple.rawValue, forKey: TextLiteral.Auth.lastLoginProviderKey) + AnalyticsService.logEvent("complete_login", parameters: ["method": "apple"]) getMyInfo() case .failure(let error): diff --git a/EATSSU/App/Sources/Presentation/Auth/ViewController/SetNickNameViewController.swift b/EATSSU/App/Sources/Presentation/Auth/ViewController/SetNickNameViewController.swift index f9c5ede4..75743d01 100644 --- a/EATSSU/App/Sources/Presentation/Auth/ViewController/SetNickNameViewController.swift +++ b/EATSSU/App/Sources/Presentation/Auth/ViewController/SetNickNameViewController.swift @@ -10,8 +10,6 @@ import Combine import Moya -import FirebaseAnalytics - import EATSSUDesign enum SetNickNameSource { diff --git a/EATSSU/App/Sources/Presentation/Home/ViewController/HomeViewController.swift b/EATSSU/App/Sources/Presentation/Home/ViewController/HomeViewController.swift index b1da5f78..cc6b3610 100644 --- a/EATSSU/App/Sources/Presentation/Home/ViewController/HomeViewController.swift +++ b/EATSSU/App/Sources/Presentation/Home/ViewController/HomeViewController.swift @@ -8,7 +8,6 @@ import UIKit import Combine -import FirebaseAnalytics import Moya import SnapKit diff --git a/EATSSU/App/Sources/Presentation/Home/ViewController/RestaurantInfoViewController.swift b/EATSSU/App/Sources/Presentation/Home/ViewController/RestaurantInfoViewController.swift index 6d60c68e..ac02b3b3 100644 --- a/EATSSU/App/Sources/Presentation/Home/ViewController/RestaurantInfoViewController.swift +++ b/EATSSU/App/Sources/Presentation/Home/ViewController/RestaurantInfoViewController.swift @@ -8,7 +8,6 @@ import SnapKit import Moya -import FirebaseAnalytics final class RestaurantInfoViewController: BaseViewController { // MARK: - UI Components diff --git a/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController+Marker.swift b/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController+Marker.swift index b943aa9d..2d602462 100644 --- a/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController+Marker.swift +++ b/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController+Marker.swift @@ -147,6 +147,12 @@ extension MainMapViewController { /// 제휴점 상세 바텀시트 표시 func showPartnershipDetail(for partnership: PartnershipDTO) { + MapAnalyticsManager.shared.logClickPartnerRestaurant( + collegeId: currentCollegeId, + majorId: currentDepartmentId, + partnerId: partnership.partnershipInfos.first?.id ?? -1 + ) + let detailVC = PartnershipDetailSheetViewController( storeName: partnership.storeName, restaurantType: partnership.restaurantType, diff --git a/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController.swift b/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController.swift index efa05b88..0c1a4489 100644 --- a/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController.swift +++ b/EATSSU/App/Sources/Presentation/Map/ViewController/MainMapViewController.swift @@ -10,7 +10,7 @@ import CoreLocation import NMapsMap import Moya -import FirebaseAnalytics + import EATSSUDesign @@ -112,7 +112,7 @@ final class MainMapViewController: BaseViewController { @objc private func didTapWhole() { guard currentMapMode != .all else { return } - + currentMapMode = .all setInitialCameraPosition(animated: true) root.selectWhole(true) diff --git a/EATSSU/App/Sources/Presentation/Map/ViewController/NoDepartmentSheetViewController.swift b/EATSSU/App/Sources/Presentation/Map/ViewController/NoDepartmentSheetViewController.swift index 09b0eff0..4c7bc763 100644 --- a/EATSSU/App/Sources/Presentation/Map/ViewController/NoDepartmentSheetViewController.swift +++ b/EATSSU/App/Sources/Presentation/Map/ViewController/NoDepartmentSheetViewController.swift @@ -8,7 +8,6 @@ import UIKit import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/Map/ViewController/PartnershipDetailSheetViewController.swift b/EATSSU/App/Sources/Presentation/Map/ViewController/PartnershipDetailSheetViewController.swift index 65ec0ee7..1ecf307c 100644 --- a/EATSSU/App/Sources/Presentation/Map/ViewController/PartnershipDetailSheetViewController.swift +++ b/EATSSU/App/Sources/Presentation/Map/ViewController/PartnershipDetailSheetViewController.swift @@ -8,7 +8,6 @@ import UIKit import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/MyPage/ViewController/CreatorViewController.swift b/EATSSU/App/Sources/Presentation/MyPage/ViewController/CreatorViewController.swift index 6b1677d9..92aef502 100644 --- a/EATSSU/App/Sources/Presentation/MyPage/ViewController/CreatorViewController.swift +++ b/EATSSU/App/Sources/Presentation/MyPage/ViewController/CreatorViewController.swift @@ -10,7 +10,6 @@ import UIKit // External Module import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyPageViewController.swift b/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyPageViewController.swift index db7aca2e..d93632d2 100644 --- a/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyPageViewController.swift +++ b/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyPageViewController.swift @@ -8,7 +8,6 @@ import UIKit import WebKit -import FirebaseAnalytics import KakaoSDKCommon import KakaoSDKTalk import Moya @@ -76,6 +75,7 @@ final class MyPageViewController: BaseViewController { @objc private func userWithdrawButtonTapped() { + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "withdraw"]) let userWithdrawViewController = UserWithdrawViewController(nickName: nickName) navigationController?.pushViewController(userWithdrawViewController, animated: true) } @@ -185,21 +185,25 @@ extension MyPageViewController: UITableViewDelegate { switch indexPath.row { // "푸시 알림 설정" 스위치 토글 case MyPageLabels.NotificationSetting.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "notification_setting"]) handleNotificationSettingToggle(at: indexPath) - + // "내 정보" 스크린으로 이동 case MyPageLabels.MyInfo.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "my_info"]) let setNickNameVC = SetNickNameViewController() setNickNameVC.source = .signup navigationController?.pushViewController(setNickNameVC, animated: true) // "내 리뷰" 스크린으로 이동 case MyPageLabels.MyReview.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "my_review"]) let myReviewViewController = MyReviewViewController(nickname: nickName) navigationController?.pushViewController(myReviewViewController, animated: true) // "문의하기" 스크린으로 이동 case MyPageLabels.Inquiry.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "inquiry"]) TalkApi.shared.chatChannel(channelPublicId: TextLiteral.KakaoChannel.id) { [weak self] error in if error != nil { if let kakaoChannelLink = URL(string: "http://pf.kakao.com/\(TextLiteral.KakaoChannel.id)") { @@ -218,18 +222,21 @@ extension MyPageViewController: UITableViewDelegate { // "서비스 이용약관" 스크린으로 이동 case MyPageLabels.TermsOfUse.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "terms_of_use"]) let provisionViewController = ProvisionViewController(agreementType: .termsOfService) provisionViewController.navigationTitle = TextLiteral.MyPage.termsOfUse navigationController?.pushViewController(provisionViewController, animated: true) // "개인정보 이용약관" 스크린으로 이동 case MyPageLabels.PrivacyTermsOfUse.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "privacy_policy"]) let provisionViewController = ProvisionViewController(agreementType: .privacyPolicy) provisionViewController.navigationTitle = TextLiteral.MyPage.privacyTermsOfUse navigationController?.pushViewController(provisionViewController, animated: true) // "만든사람들" 스크린으로 이동 case MyPageLabels.Creator.rawValue: + AnalyticsService.logEvent("click_mypage_menu", parameters: ["menu": "creator"]) let creatorViewController = CreatorViewController() navigationController?.pushViewController(creatorViewController, animated: true) diff --git a/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyReviewViewController.swift b/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyReviewViewController.swift index f258496b..c1034647 100644 --- a/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyReviewViewController.swift +++ b/EATSSU/App/Sources/Presentation/MyPage/ViewController/MyReviewViewController.swift @@ -9,7 +9,6 @@ import UIKit import Moya import SnapKit -import FirebaseAnalytics final class MyReviewViewController: BaseViewController { override var shouldHideTabBar: Bool { true } diff --git a/EATSSU/App/Sources/Presentation/MyPage/ViewController/UserWithdrawViewController.swift b/EATSSU/App/Sources/Presentation/MyPage/ViewController/UserWithdrawViewController.swift index 34c865d9..05c4b392 100644 --- a/EATSSU/App/Sources/Presentation/MyPage/ViewController/UserWithdrawViewController.swift +++ b/EATSSU/App/Sources/Presentation/MyPage/ViewController/UserWithdrawViewController.swift @@ -10,7 +10,6 @@ import UIKit import Moya import Realm import SnapKit -import FirebaseAnalytics final class UserWithdrawViewController: BaseViewController { override var shouldHideTabBar: Bool { true } diff --git a/EATSSU/App/Sources/Presentation/Popup/ViewController/PromotionPopupViewController.swift b/EATSSU/App/Sources/Presentation/Popup/ViewController/PromotionPopupViewController.swift index 4b489a53..f220bc0f 100644 --- a/EATSSU/App/Sources/Presentation/Popup/ViewController/PromotionPopupViewController.swift +++ b/EATSSU/App/Sources/Presentation/Popup/ViewController/PromotionPopupViewController.swift @@ -7,7 +7,6 @@ import UIKit -import FirebaseAnalytics import SnapKit /// 홈 화면 진입 시 노출되는 프로모션 팝업 @@ -79,13 +78,20 @@ final class PromotionPopupViewController: BaseViewController { /// 잇슈 인스타그램 바로가기 버튼 클릭 -> 나받돼 게시물로 이동 @objc private func didTapInstagramLinkButton() { - print("클릭됨") + AnalyticsService.logEvent("popup_event", parameters: [ + "popup_name": "plz_not_me", + "popup_action": "go_insta" + ]) UIApplication.shared.open(nabatdaePostURL) } /// 팝업의 그 외 영역 클릭 -> 나아돼 탭으로 이동 @objc private func didTapPopupContent() { + AnalyticsService.logEvent("popup_event", parameters: [ + "popup_name": "plz_not_me", + "popup_action": "click_popup_image" + ]) dismiss(animated: true) { [weak self] in self?.tabBarContainer?.setTab(index: 2) } @@ -94,12 +100,20 @@ final class PromotionPopupViewController: BaseViewController { /// 다시 보지 않기 -> 평생 안 뜸 @objc private func didTapNeverShowAgainButton() { + AnalyticsService.logEvent("popup_event", parameters: [ + "popup_name": "plz_not_me", + "popup_action": "not_show_again" + ]) HomePromotionPopupDisplayData.hideForever() dismiss(animated: true) } @objc private func didTapCloseButton() { + AnalyticsService.logEvent("popup_event", parameters: [ + "popup_name": "plz_not_me", + "popup_action": "close" + ]) dismiss(animated: true) } } diff --git a/EATSSU/App/Sources/Presentation/Review/ViewController/ReportViewController.swift b/EATSSU/App/Sources/Presentation/Review/ViewController/ReportViewController.swift index ce575203..c13a6bda 100644 --- a/EATSSU/App/Sources/Presentation/Review/ViewController/ReportViewController.swift +++ b/EATSSU/App/Sources/Presentation/Review/ViewController/ReportViewController.swift @@ -9,7 +9,6 @@ import UIKit import Moya import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/Review/ViewController/ReviewViewController.swift b/EATSSU/App/Sources/Presentation/Review/ViewController/ReviewViewController.swift index 691dd9c4..b8caff6f 100644 --- a/EATSSU/App/Sources/Presentation/Review/ViewController/ReviewViewController.swift +++ b/EATSSU/App/Sources/Presentation/Review/ViewController/ReviewViewController.swift @@ -7,7 +7,7 @@ import UIKit import SnapKit -import FirebaseAnalytics + import Moya import EATSSUDesign @@ -201,6 +201,8 @@ final class ReviewViewController: BaseViewController { /// 리뷰 작성 버튼 탭 처리 @objc private func handleAddReviewButtonTap() { + ReviewAnalyticsManager.shared.logWriteReviewV1() + if type == "VARIABLE" { let reviewVC = SetRateViewController(mealId: menuID) reviewVC.dataBind( @@ -343,11 +345,6 @@ final class ReviewViewController: BaseViewController { /// Firebase 작업 설정 private func setFirebaseTask() { FirebaseRemoteConfig.shared.fetchRestaurantInfo() - -#if DEBUG -#else - Analytics.logEvent("ReviewViewControllerLoad", parameters: nil) -#endif } /// 작성 후의 새로고침 함수 diff --git a/EATSSU/App/Sources/Presentation/Review/ViewController/SetRateViewController.swift b/EATSSU/App/Sources/Presentation/Review/ViewController/SetRateViewController.swift index c5ffe8b8..306d8325 100644 --- a/EATSSU/App/Sources/Presentation/Review/ViewController/SetRateViewController.swift +++ b/EATSSU/App/Sources/Presentation/Review/ViewController/SetRateViewController.swift @@ -421,9 +421,15 @@ extension SetRateViewController { ) try await postFixReview(reviewId: reviewId, request: request) - + await MainActor.run { self.isReviewSubmitted = true + let hasPhoto = self.userPickedImage != nil || self.setRateView.userReviewImageView.image != nil + ReviewAnalyticsManager.shared.logCompleteReviewV1( + photoAttached: hasPhoto ? 1 : 0, + rating: self.setRateView.rateView.currentStar, + likes: self.likedStates.filter { $0 }.count + ) self.showToast(message: TextLiteral.Review.fixReviewSuccess) self.moveToReviewVC() } @@ -470,6 +476,11 @@ extension SetRateViewController { await MainActor.run { self.isReviewSubmitted = true + ReviewAnalyticsManager.shared.logCompleteReviewV1( + photoAttached: imageUrl != nil ? 1 : 0, + rating: self.setRateView.rateView.currentStar, + likes: self.likedStates.filter { $0 }.count + ) self.moveToReviewVC() } @@ -517,6 +528,11 @@ extension SetRateViewController { await MainActor.run { self.isReviewSubmitted = true + ReviewAnalyticsManager.shared.logCompleteReviewV1( + photoAttached: imageUrl != nil ? 1 : 0, + rating: self.setRateView.rateView.currentStar, + likes: self.likedStates.filter { $0 }.count + ) self.moveToReviewVC() } diff --git a/EATSSU/App/Sources/Presentation/Splash/NoticeSplashViewController.swift b/EATSSU/App/Sources/Presentation/Splash/NoticeSplashViewController.swift index 420490e9..8527c41d 100644 --- a/EATSSU/App/Sources/Presentation/Splash/NoticeSplashViewController.swift +++ b/EATSSU/App/Sources/Presentation/Splash/NoticeSplashViewController.swift @@ -8,7 +8,6 @@ import UIKit import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/Splash/SplashViewController.swift b/EATSSU/App/Sources/Presentation/Splash/SplashViewController.swift index aeff8ad5..a38e63da 100644 --- a/EATSSU/App/Sources/Presentation/Splash/SplashViewController.swift +++ b/EATSSU/App/Sources/Presentation/Splash/SplashViewController.swift @@ -8,7 +8,6 @@ import UIKit import SnapKit -import FirebaseAnalytics import EATSSUDesign diff --git a/EATSSU/App/Sources/Presentation/TabBar/CustomTabBarContainerController.swift b/EATSSU/App/Sources/Presentation/TabBar/CustomTabBarContainerController.swift index 0516df90..eb55dc7f 100644 --- a/EATSSU/App/Sources/Presentation/TabBar/CustomTabBarContainerController.swift +++ b/EATSSU/App/Sources/Presentation/TabBar/CustomTabBarContainerController.swift @@ -255,6 +255,11 @@ extension CustomTabBarContainerController: UITabBarControllerDelegate { // 커피 탭: 전체화면 모달로 웹뷰 표시 if selectedTab == .coffee { + let userInfo = UserInfoManager.shared.getCurrentUserInfo() + var params: [String: Any] = [:] + if let collegeId = userInfo?.collegeId { params["college"] = collegeId } + if let majorId = userInfo?.departmentId { params["major"] = majorId } + AnalyticsService.logEvent("click_plz_not_me", parameters: params) presentCoffeeWebView() return false } diff --git a/EATSSU/App/Sources/Utility/Application/AppDelegate.swift b/EATSSU/App/Sources/Utility/Application/AppDelegate.swift index 217a0673..f9bb17bc 100644 --- a/EATSSU/App/Sources/Utility/Application/AppDelegate.swift +++ b/EATSSU/App/Sources/Utility/Application/AppDelegate.swift @@ -97,7 +97,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD let config = PostHogConfig(apiKey: apiKey, host: "https://us.i.posthog.com") config.captureApplicationLifecycleEvents = true - config.captureScreenViews = false + config.captureScreenViews = true PostHogSDK.shared.setup(config) #endif diff --git a/EATSSU/App/Sources/Utility/Application/SceneDelegate.swift b/EATSSU/App/Sources/Utility/Application/SceneDelegate.swift index ecd0dec6..cf75bd77 100644 --- a/EATSSU/App/Sources/Utility/Application/SceneDelegate.swift +++ b/EATSSU/App/Sources/Utility/Application/SceneDelegate.swift @@ -50,6 +50,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } else { LaunchSourceManager.shared.setSource(.icon) } + + // PostHog Deep Link 이벤트 + AnalyticsService.logEvent("Deep Link Opened", parameters: ["url": url.absoluteString]) } } diff --git a/EATSSU/Widget/Sources/Data/Timeline/ESTimelineProvider.swift b/EATSSU/Widget/Sources/Data/Timeline/ESTimelineProvider.swift index 5bb14697..23d38337 100644 --- a/EATSSU/Widget/Sources/Data/Timeline/ESTimelineProvider.swift +++ b/EATSSU/Widget/Sources/Data/Timeline/ESTimelineProvider.swift @@ -105,7 +105,7 @@ struct ESTimelineProvider: AppIntentTimelineProvider { WidgetAnalyticsManager.shared.recordWidgetChanged(before: oldRestaurant, after: newRestaurant) } } else { - WidgetAnalyticsManager.shared.recordWidgetAdded() + WidgetAnalyticsManager.shared.recordWidgetAdded(restaurant: newRestaurant) } userDefaults?.set(newRestaurant, forKey: lastRestaurantKey) }