Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions EATSSU/App/Sources/Data/Firebase/ReviewAnalyticsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
])
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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
}
}
Expand Down
12 changes: 9 additions & 3 deletions EATSSU/App/Sources/Data/Firebase/WidgetAnalyticsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}

Expand All @@ -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)
}
}

/// (위젯에서 호출) 사용자가 위젯의 식당을 변경했을 때, 이전/이후 정보를 기록합니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ final class LoginViewController: BaseViewController {
departmentId: info.departmentId,
departmentName: info.departmentName
)

}
changeIntoHomeViewController()
} else {
Expand All @@ -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
Expand Down Expand Up @@ -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()
}
}
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import Combine

import Moya

import FirebaseAnalytics

import EATSSUDesign

enum SetNickNameSource {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import UIKit
import Combine

import FirebaseAnalytics
import Moya
import SnapKit

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import SnapKit

import Moya
import FirebaseAnalytics

final class RestaurantInfoViewController: BaseViewController {
// MARK: - UI Components
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import CoreLocation

import NMapsMap
import Moya
import FirebaseAnalytics


import EATSSUDesign

Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import UIKit

import SnapKit
import FirebaseAnalytics

import EATSSUDesign

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import UIKit

import SnapKit
import FirebaseAnalytics

import EATSSUDesign

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import UIKit

// External Module
import SnapKit
import FirebaseAnalytics

import EATSSUDesign

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import UIKit
import WebKit

import FirebaseAnalytics
import KakaoSDKCommon
import KakaoSDKTalk
import Moya
Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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)") {
Expand All @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import UIKit

import Moya
import SnapKit
import FirebaseAnalytics

final class MyReviewViewController: BaseViewController {
override var shouldHideTabBar: Bool { true }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import UIKit
import Moya
import Realm
import SnapKit
import FirebaseAnalytics

final class UserWithdrawViewController: BaseViewController {
override var shouldHideTabBar: Bool { true }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import UIKit

import FirebaseAnalytics
import SnapKit

/// 홈 화면 진입 시 노출되는 프로모션 팝업
Expand Down Expand Up @@ -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)
}
Expand All @@ -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)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import UIKit

import Moya
import SnapKit
import FirebaseAnalytics

import EATSSUDesign

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import UIKit
import SnapKit
import FirebaseAnalytics

import Moya

import EATSSUDesign
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -343,11 +345,6 @@ final class ReviewViewController: BaseViewController {
/// Firebase 작업 설정
private func setFirebaseTask() {
FirebaseRemoteConfig.shared.fetchRestaurantInfo()

#if DEBUG
#else
Analytics.logEvent("ReviewViewControllerLoad", parameters: nil)
#endif
}

/// 작성 후의 새로고침 함수
Expand Down
Loading