From 9da2a58cb789d6786a486206ee176303ea1e8713 Mon Sep 17 00:00:00 2001 From: kimkyuchul Date: Sun, 1 Dec 2024 14:36:40 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=EB=A7=81=ED=81=AC=20=EC=9A=94=EC=95=BD?= =?UTF-8?q?=20=EC=8B=9C=20=EA=B4=91=EA=B3=A0=20=EC=8B=9C=EC=B2=AD=20?= =?UTF-8?q?=EC=9D=B4=ED=9B=84=20=EC=9A=94=EC=95=BD=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=AC=20=EB=9C=A8=EB=8F=84=EB=A1=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95=20(#150)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaveLink/{View => }/SaveLinkFeature.swift | 71 +++++++++++++------ .../SaveLink/{View => }/SaveLinkView.swift | 9 +++ 2 files changed, 60 insertions(+), 20 deletions(-) rename Projects/Feature/Scene/SaveLink/{View => }/SaveLinkFeature.swift (67%) rename Projects/Feature/Scene/SaveLink/{View => }/SaveLinkView.swift (92%) diff --git a/Projects/Feature/Scene/SaveLink/View/SaveLinkFeature.swift b/Projects/Feature/Scene/SaveLink/SaveLinkFeature.swift similarity index 67% rename from Projects/Feature/Scene/SaveLink/View/SaveLinkFeature.swift rename to Projects/Feature/Scene/SaveLink/SaveLinkFeature.swift index 357c2114..25f02a75 100644 --- a/Projects/Feature/Scene/SaveLink/View/SaveLinkFeature.swift +++ b/Projects/Feature/Scene/SaveLink/SaveLinkFeature.swift @@ -22,22 +22,30 @@ public struct SaveLinkFeature { var isValidationURL = true var validationReasonText = "URL 형식이 올바르지 않아요. 다시 입력해주세요." var isLoading: Bool = false + + var ad: GoogleAd? + var isAdPresented: Bool = false } public enum Action: BindableAction { case binding(BindingAction) //MARK: UserAction + case onAppear case onTapNextButton + case adDismissButtonTapped case onTapBackButton // MARK: Inner Business Action case postLinkSummary + case loadAd case sendAnalyticsLog // MARK: Inner SetState Action + case setAd(GoogleAd) + case setAdPresented(Bool) case setLoading(Bool) - + // MARK: Present Action case linkSummaryLoadingAlertPresented case linkSummaryFailAlertPresented @@ -47,6 +55,7 @@ public struct SaveLinkFeature { @Dependency(\.alertClient) private var alertClient @Dependency(\.linkClient) private var linkClient @Dependency(AnalyticsClient.self) private var analyticsClient + @Dependency(GoogleMobileAdsClient.self) private var googleMobileAdsClient public var body: some ReducerOf { BindingReducer() @@ -66,6 +75,9 @@ public struct SaveLinkFeature { return .none + case .onAppear: + return .send(.loadAd) + case .onTapBackButton: return .run { _ in await self.dismiss() } @@ -75,6 +87,18 @@ public struct SaveLinkFeature { await send(.sendAnalyticsLog) } + case .adDismissButtonTapped: + return .run { send in + await send(.setLoading(false)) + await send(.linkSummaryLoadingAlertPresented) + + // 요약 성공 시 LodingAlert 닫힌 후 2초 뒤 메인으로 이동 + try? await Task.sleep(for: .seconds(2)) + + await alertClient.dismiss() + await send(.onTapBackButton) + } + case .postLinkSummary: return .run( operation: { [state] send in @@ -82,14 +106,7 @@ public struct SaveLinkFeature { _ = try await linkClient.postLinkSummary(state.urlText.trimmingCharacters(in: .whitespaces)) - await send(.setLoading(false)) - await send(.linkSummaryLoadingAlertPresented) - - // 요약 성공 시 LodingAlert 닫힌 후 2초 뒤 메인으로 이동 - try? await Task.sleep(for: .seconds(2)) - - await alertClient.dismiss() - await send(.onTapBackButton) + await send(.setAdPresented(true)) }, catch: { error, send in await send(.setLoading(false)) @@ -97,15 +114,29 @@ public struct SaveLinkFeature { } ) + case .loadAd: + return .run { send in + let ad = try await googleMobileAdsClient.load() + await send(.setAd(ad)) + } + case .sendAnalyticsLog: feedSummaryButtonTappedLog() return .none + case let .setAd(ad): + state.ad = ad + return .none + + case let .setAdPresented(isPresented): + state.isAdPresented = isPresented + return .none + case let .setLoading(isLoading): state.isLoading = isLoading return .none - case .linkSummaryLoadingAlertPresented: + case .linkSummaryLoadingAlertPresented: return .run { send in await alertClient.present(.init( isLoadingType: true, @@ -117,16 +148,16 @@ public struct SaveLinkFeature { } case .linkSummaryFailAlertPresented: - return .run { send in - await alertClient.present(.init( - title: "요약 불가", - imageType: .link, - description: "링크 요약에 실패했습니다", - buttonType: .singleButton("메인으로"), - rightButtonAction: { await send(.onTapBackButton) } - )) - } - + return .run { send in + await alertClient.present(.init( + title: "요약 불가", + imageType: .link, + description: "링크 요약에 실패했습니다", + buttonType: .singleButton("메인으로"), + rightButtonAction: { await send(.onTapBackButton) } + )) + } + default: return .none } diff --git a/Projects/Feature/Scene/SaveLink/View/SaveLinkView.swift b/Projects/Feature/Scene/SaveLink/SaveLinkView.swift similarity index 92% rename from Projects/Feature/Scene/SaveLink/View/SaveLinkView.swift rename to Projects/Feature/Scene/SaveLink/SaveLinkView.swift index b9fab6f5..7f3c33b0 100644 --- a/Projects/Feature/Scene/SaveLink/View/SaveLinkView.swift +++ b/Projects/Feature/Scene/SaveLink/SaveLinkView.swift @@ -82,6 +82,15 @@ public struct SaveLinkView: View { .if(store.isLoading) { view in view.progressBackground() } + .onAppear { store.send(.onAppear) } + .fullScreenCover(isPresented: $store.isAdPresented) { + BKGoogleAdView( + isPresented: $store.isAdPresented, + interstitialAd: $store.ad, + dismissAdScreen: { store.send(.adDismissButtonTapped) } + ) + .presentationClearBackground() + } } } }