From 9478565a04cb91cf2fb541da3e45e7d2a76d25bc Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Tue, 13 Oct 2026 16:01:00 +0900 Subject: [PATCH] =?UTF-8?q?refactor(ads):=20Yandex=20=EA=B4=91=EA=B3=A0=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=99=80=20SDK=20=EC=9D=98=EC=A1=B4=EC=84=B1?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EA=B1=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 2 - Podfile.lock | 158 +-------- SodaLive.xcodeproj/project.pbxproj | 98 ++---- SodaLive/Sources/App/AppDelegate.swift | 4 - .../Chat/Character/CharacterView.swift | 5 - .../Chat/Original/OriginalTabView.swift | 4 - .../Chat/Talk/Room/ChatRoomViewModel.swift | 24 -- .../Room/Quota/ChatQuotaPurchaseRequest.swift | 1 - SodaLive/Sources/Chat/Talk/TalkView.swift | 4 - SodaLive/Sources/Common/YandexAdSupport.swift | 316 ------------------ .../Main/ByGenre/SeriesMainByGenreView.swift | 3 - .../DayOfWeek/SeriesMainDayOfWeekView.swift | 1 - .../Series/Main/Home/SeriesMainHomeView.swift | 1 - SodaLive/Sources/Debug/Utils/Constants.swift | 16 - .../All/CreatorCommunityAllView.swift | 1 - SodaLive/Sources/I18n/I18n.swift | 16 - SodaLive/Sources/Live/LiveView.swift | 2 - .../Live/Room/Detail/LiveDetailView.swift | 3 - .../List/PushNotificationListView.swift | 1 - .../NotificationSettingsView.swift | 2 - SodaLive/Sources/Utils/Constants.swift | 16 - 21 files changed, 27 insertions(+), 651 deletions(-) delete mode 100644 SodaLive/Sources/Common/YandexAdSupport.swift diff --git a/Podfile b/Podfile index dbceb413..4e637946 100644 --- a/Podfile +++ b/Podfile @@ -10,7 +10,6 @@ target 'SodaLive' do pod 'AgoraRtm', '2.2.4' pod 'GoogleSignIn' pod 'GoogleSignInSwiftSupport' - pod 'YandexMobileAds', '8.0.0' end @@ -23,7 +22,6 @@ target 'SodaLive-dev' do pod 'AgoraRtm', '2.2.4' pod 'GoogleSignIn' pod 'GoogleSignInSwiftSupport' - pod 'YandexMobileAds', '8.0.0' end diff --git a/Podfile.lock b/Podfile.lock index c1ca2999..3e57a70a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -15,74 +15,6 @@ PODS: - GoogleUtilities/Environment (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - PromisesObjC (~> 2.4) - - AppMetricaAdSupport (6.0.0): - - AppMetricaCore (= 6.0.0) - - AppMetricaCoreExtension (= 6.0.0) - - AppMetricaCore (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaEncodingUtils (= 6.0.0) - - AppMetricaFMDB (= 6.0.0) - - AppMetricaHostState (= 6.0.0) - - AppMetricaIdentifiers (= 6.0.0) - - AppMetricaKeychain (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaNetwork (= 6.0.0) - - AppMetricaPlatform (= 6.0.0) - - AppMetricaProtobuf (= 6.0.0) - - AppMetricaProtobufUtils (= 6.0.0) - - AppMetricaStorageUtils (= 6.0.0) - - AppMetricaCoreExtension (6.0.0): - - AppMetricaCore (= 6.0.0) - - AppMetricaStorageUtils (= 6.0.0) - - AppMetricaCoreUtils (6.0.0): - - AppMetricaLog (= 6.0.0) - - AppMetricaEncodingUtils (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaPlatform (= 6.0.0) - - AppMetricaFMDB (6.0.0) - - AppMetricaHostState (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaIdentifiers (6.0.0): - - AppMetricaKeychain (= 6.0.0) - - AppMetricaLogSwift (= 6.0.0) - - AppMetricaPlatform (= 6.0.0) - - AppMetricaStorageUtils (= 6.0.0) - - AppMetricaSynchronization (= 6.0.0) - - AppMetricaIDSync (6.0.0): - - AppMetricaCore (= 6.0.0) - - AppMetricaCoreExtension (= 6.0.0) - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaNetwork (= 6.0.0) - - AppMetricaPlatform (= 6.0.0) - - AppMetricaStorageUtils (= 6.0.0) - - AppMetricaKeychain (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaStorageUtils (= 6.0.0) - - AppMetricaLibraryAdapter (6.0.0): - - AppMetricaCore (= 6.0.0) - - AppMetricaCoreExtension (= 6.0.0) - - AppMetricaLog (6.0.0) - - AppMetricaLogSwift (6.0.0): - - AppMetricaLog (= 6.0.0) - - AppMetricaNetwork (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaPlatform (= 6.0.0) - - AppMetricaPlatform (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaProtobuf (6.0.0) - - AppMetricaProtobufUtils (6.0.0): - - AppMetricaProtobuf (= 6.0.0) - - AppMetricaStorageUtils (6.0.0): - - AppMetricaCoreUtils (= 6.0.0) - - AppMetricaLog (= 6.0.0) - - AppMetricaSynchronization (6.0.0): - - AppMetricaLogSwift (= 6.0.0) - Bootpay (4.4.6): - CryptoSwift - NVActivityIndicatorView @@ -95,19 +27,6 @@ PODS: - SnapKit - SwiftyJSON - CryptoSwift (1.8.4) - - DivKit (32.46.0): - - DivKit_LayoutKit (= 32.46.0) - - DivKit_Serialization (= 32.46.0) - - VGSL (~> 7.21) - - DivKit_LayoutKit (32.46.0): - - DivKit_LayoutKitInterface (= 32.46.0) - - VGSL (~> 7.21) - - DivKit_LayoutKitInterface (32.46.0): - - VGSL (~> 7.21) - - DivKit_Serialization (32.46.0): - - VGSL (~> 7.21) - - DivKitBinaryCompatibilityFacade (5.3.0): - - DivKit (~> 32.14) - GoogleSignIn (9.1.0): - AppAuth (~> 2.0) - AppCheckCore (~> 11.0) @@ -135,29 +54,12 @@ PODS: - PromisesObjC (2.4.0) - SnapKit (5.7.1) - SwiftyJSON (5.0.2) - - VGSL (7.21.0): - - VGSLFundamentals (= 7.21.0) - - VGSLNetworking (= 7.21.0) - - VGSLUI (= 7.21.0) - - VGSLFundamentals (7.21.0) - - VGSLNetworking (7.21.0): - - VGSLFundamentals (= 7.21.0) - - VGSLUI (= 7.21.0) - - VGSLUI (7.21.0): - - VGSLFundamentals (= 7.21.0) - - YandexMobileAds (8.0.0): - - AppMetricaAdSupport (~> 6.0.0) - - AppMetricaCore (~> 6.0.0) - - AppMetricaIDSync (~> 6.0.0) - - AppMetricaLibraryAdapter (~> 6.0.0) - - DivKitBinaryCompatibilityFacade (~> 5.3.0) DEPENDENCIES: - AgoraRtm (= 2.2.4) - BootpayUI (= 4.4.10) - GoogleSignIn - GoogleSignInSwiftSupport - - YandexMobileAds (= 8.0.0) SPEC REPOS: trunk: @@ -165,33 +67,9 @@ SPEC REPOS: - Alamofire - AppAuth - AppCheckCore - - AppMetricaAdSupport - - AppMetricaCore - - AppMetricaCoreExtension - - AppMetricaCoreUtils - - AppMetricaEncodingUtils - - AppMetricaFMDB - - AppMetricaHostState - - AppMetricaIdentifiers - - AppMetricaIDSync - - AppMetricaKeychain - - AppMetricaLibraryAdapter - - AppMetricaLog - - AppMetricaLogSwift - - AppMetricaNetwork - - AppMetricaPlatform - - AppMetricaProtobuf - - AppMetricaProtobufUtils - - AppMetricaStorageUtils - - AppMetricaSynchronization - Bootpay - BootpayUI - CryptoSwift - - DivKit - - DivKit_LayoutKit - - DivKit_LayoutKitInterface - - DivKit_Serialization - - DivKitBinaryCompatibilityFacade - GoogleSignIn - GoogleSignInSwiftSupport - GoogleUtilities @@ -202,44 +80,15 @@ SPEC REPOS: - PromisesObjC - SnapKit - SwiftyJSON - - VGSL - - VGSLFundamentals - - VGSLNetworking - - VGSLUI - - YandexMobileAds SPEC CHECKSUMS: AgoraRtm: 534144434383d41b3b0ebfae2a961ef0f51b0645 Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496 AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f - AppMetricaAdSupport: 43a4d1509cdbfe712fb3f009fe60d3a6481816a0 - AppMetricaCore: dae62fe7f95cd665b142218f3d94cf63262c195b - AppMetricaCoreExtension: 72da13ba849d4676f276ab86ff429bdf700eadc3 - AppMetricaCoreUtils: 5e7c91cbafe0225dec2ded2bb3a806256e2ef791 - AppMetricaEncodingUtils: a67df57f752dbbb174beea18f1de52d24853d834 - AppMetricaFMDB: a3d8e45a5a85bec23a997be4469b92ab355a4df5 - AppMetricaHostState: 1ac2ab5880aa30a358f55a044e57354dd8f9062f - AppMetricaIdentifiers: 00061e0cdcb371b74343a5491f54adfc1d470b25 - AppMetricaIDSync: 91b403172ad78da3574c691ed34c25f69c2296ee - AppMetricaKeychain: 9ec64d877b8a3f6e823f3bbeef5e4086aa456686 - AppMetricaLibraryAdapter: 56fa0f988850051d10f9ac3b6b9ace7bb6aa8fd7 - AppMetricaLog: edd74df81c7557439c36c566989982f4c735e4d6 - AppMetricaLogSwift: 3d2d4a3cbc33a680389b416a1c6a82ef4134da10 - AppMetricaNetwork: 3dc6d768d4e932c3697c9c2c9a768de54e62059b - AppMetricaPlatform: 041a7b251ea1689e26626d9db8f331af1afe5bad - AppMetricaProtobuf: 01b141a164fa7277f641a29f30d5e571ea3d471a - AppMetricaProtobufUtils: dc48c7b84f3a1ef86ea218bbd97480ea9da4d3bc - AppMetricaStorageUtils: 78071115b9f5468d9e3b8184c456428cd9ee1dbd - AppMetricaSynchronization: 909bab97c61c0c147a435ce1620e4c8069e2d6b3 Bootpay: cd7f0542b096ab0af0b09a6e12a6b87f2cbbb531 BootpayUI: beec5b0bba002b4dbced8c0ecace571ed6a017bc CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 - DivKit: c66e0fa88b4671f832fb9ca3f142d6f56a56919d - DivKit_LayoutKit: e30d4d345034c2dfb356e5a891dd359ac79a5aff - DivKit_LayoutKitInterface: 320f0ef8c4f95bb8212b13400502adf0259c0b21 - DivKit_Serialization: c5ba4f12034eca16960e80f369b689fd8cda95b0 - DivKitBinaryCompatibilityFacade: fc2284a2edea4d65aa0966006ea63274eb9f721b GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d GoogleSignInSwiftSupport: aca902e4e15b234611ecac74ef5c8f61278f774e GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 @@ -250,12 +99,7 @@ SPEC CHECKSUMS: PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a - VGSL: 0573c2b82b05aadcba4836398ce3778d271bfd13 - VGSLFundamentals: 3a081684c1a5df5800bf88aca8a9bdff2c10cfd9 - VGSLNetworking: 0ea8a335bc4f4eba3f6123ffe441cf1c08f267f2 - VGSLUI: 249a16cccdb75f1a5a1733894d013bca76e27c5e - YandexMobileAds: ca6c63c4148ae87fefc1821d0b466ea567069d5b -PODFILE CHECKSUM: 525ba559e93875de1314bb1a7894791eee442151 +PODFILE CHECKSUM: 70c5639090824ff26cfad959985347579609e1e6 COCOAPODS: 1.16.2 diff --git a/SodaLive.xcodeproj/project.pbxproj b/SodaLive.xcodeproj/project.pbxproj index ab17f0f4..7bc729f9 100644 --- a/SodaLive.xcodeproj/project.pbxproj +++ b/SodaLive.xcodeproj/project.pbxproj @@ -3,16 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 77; objects = { /* Begin PBXBuildFile section */ - AC5200013012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; }; - AC5200023012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; }; - AC5200043012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; }; - AC5200053012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; }; - AC5100013012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; }; - AC5100023012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; }; 00C796627A6758D271215EC5 /* CreatorProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26881ED30292E28D2E5F84CD /* CreatorProfileItem.swift */; }; 042BEE0C973700FB5F4540CD /* I18n.swift in Sources */ = {isa = PBXBuildFile; fileRef = 826D626B7714E5C28ED31074 /* I18n.swift */; }; 0470E68C6F302A131264E3AF /* ChannelDonationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF2BFD2E09F509C44C92214 /* ChannelDonationViewModel.swift */; }; @@ -1679,7 +1673,6 @@ 843C3C5366C9D9DEE37878BF /* ChannelDonationItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7650B281CE20A6F29F6253 /* ChannelDonationItemView.swift */; }; 85934EA071477BC71BFCDF5E /* Pods_SodaLive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19E2FD56B42EBD353B9D2016 /* Pods_SodaLive.framework */; }; 895286621DBE8EC8C825A9B5 /* GetPushNotificationCategoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54EBFBCC66E5AC79197E1FC /* GetPushNotificationCategoryResponse.swift */; }; - 89AF41E6A46CD84BA469F272 /* YandexAdSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */; }; 89BA3654EB2D35AC48F99472 /* LanguageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7132AA3D131A8DF7B8D783BE /* LanguageService.swift */; }; 8A3E98E8F5E3862EAED3B5F9 /* FontModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D89184D67BD63E46E90281 /* FontModifier.swift */; }; 8D359DA75B6E24D9FF0A0865 /* V2vModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4AF495E30F2DB00C2FCB36 /* V2vModels.swift */; }; @@ -1711,6 +1704,12 @@ A4F100000000000000000003 /* LottieRefreshableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F100000000000000000006 /* LottieRefreshableScrollView.swift */; }; A4F100000000000000000004 /* LottieRefreshableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F100000000000000000006 /* LottieRefreshableScrollView.swift */; }; A840136779D6CC95F94CB681 /* HomeTitleBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA81E8424A575A0F8546D31 /* HomeTitleBar.swift */; }; + AC5100013012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; }; + AC5100023012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; }; + AC5200013012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; }; + AC5200023012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; }; + AC5200043012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; }; + AC5200053012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; }; ACD71056E97E13E48941ABBB /* MainPlaceholderTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7900EA9FD1150BABE64CF1B3 /* MainPlaceholderTabView.swift */; }; AD6424211AA898794BBE8470 /* SectionTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C12DFB83FE164B38CC066 /* SectionTitle.swift */; }; AEFFD4DC842837ACF98BE697 /* PostChannelDonationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */; }; @@ -1880,7 +1879,6 @@ C0A743000000000000000011 /* UserCreatorChatSessionNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A740000000000000000011 /* UserCreatorChatSessionNotification.swift */; }; C0D6E325AEFEEF476E7044AB /* CommunityPostCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE82912F2F111593BE42E33C /* CommunityPostCard.swift */; }; C3CFF5936F1BAC5BC12E9DDB /* UpdateContentPreferenceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDFAA64C2CA4FCBBF00A024 /* UpdateContentPreferenceRequest.swift */; }; - C45F071870A4DB48ABAE8BC5 /* YandexAdSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */; }; C4A7064704896D68ACBA135F /* PushNotificationListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FA7A276BF4A47206ED702A7 /* PushNotificationListItemView.swift */; }; C74811010000000000000001 /* GiftBoxListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000001 /* GiftBoxListViewModel.swift */; }; C74811010000000000000002 /* GiftBoxCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000002 /* GiftBoxCardView.swift */; }; @@ -2208,9 +2206,6 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - AC5200003012000000A5BBA3 /* AuthVerificationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationView.swift; sourceTree = ""; }; - AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = ""; }; - AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = ""; }; 002435A7145D59CCCA8F76D1 /* CreatorChannelFanTalkApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkApi.swift; sourceTree = ""; }; 0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PostChannelDonationRequest.swift; sourceTree = ""; }; 0EC05859619BDC03056911E7 /* MainTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = ""; }; @@ -3039,6 +3034,9 @@ A4F100000000000000000006 /* LottieRefreshableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LottieRefreshableScrollView.swift; sourceTree = ""; }; A575789542808C0C87AC6D82 /* AiCharacterCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AiCharacterCard.swift; sourceTree = ""; }; AB63E7E31B75FF2E6F1C9073 /* LanguageSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageSettingsView.swift; sourceTree = ""; }; + AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = ""; }; + AC5200003012000000A5BBA3 /* AuthVerificationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationView.swift; sourceTree = ""; }; + AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = ""; }; B108032F3DC7110CBFD04130 /* Pods-SodaLive-dev.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SodaLive-dev.release.xcconfig"; path = "Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev.release.xcconfig"; sourceTree = ""; }; B54EBFBCC66E5AC79197E1FC /* GetPushNotificationCategoryResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationCategoryResponse.swift; sourceTree = ""; }; B7406AE69F7667FAA2E6DD23 /* CreatorDetailDialogView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorDetailDialogView.swift; sourceTree = ""; }; @@ -3221,7 +3219,6 @@ E92246F5C1254CBED72AD9AD /* AudioContentCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioContentCard.swift; sourceTree = ""; }; EDB71B1A61924B10599005FE /* CreatorChannelFanTalkCountBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkCountBar.swift; sourceTree = ""; }; EF47BCA4DC51200D63D1E2D7 /* CreatorChannelFanTalkRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkRepository.swift; sourceTree = ""; }; - F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YandexAdSupport.swift; sourceTree = ""; }; F23D0834690CFE9FBDC10510 /* GetPushNotificationListResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationListResponse.swift; sourceTree = ""; }; F26CB443DA0ED4C45A18B258 /* PushNotificationApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PushNotificationApi.swift; sourceTree = ""; }; F6966E927CDB1DE31F936757 /* CreatorProfileGrid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorProfileGrid.swift; sourceTree = ""; }; @@ -3229,7 +3226,11 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 401A3B942FEE61E000A5BBA3 /* docs */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = docs; sourceTree = ""; }; + 401A3B942FEE61E000A5BBA3 /* docs */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = docs; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -4688,7 +4689,6 @@ 4091446A2A86228E00EEBFB1 /* ActivityViewController.swift */, 375C41DF9D62AF5B9C3C1FAC /* DateParser.swift */, 6DC033E531A9420363D017CE /* FollowButtonImageAsset.swift */, - F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */, ); path = Common; sourceTree = ""; @@ -5900,6 +5900,14 @@ path = FanTalk; sourceTree = ""; }; + AC5200063012000000A5BBA3 /* Auth */ = { + isa = PBXGroup; + children = ( + AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */, + ); + path = Auth; + sourceTree = ""; + }; B068C16B9D7F3F80901622E8 /* Button */ = { isa = PBXGroup; children = ( @@ -6651,14 +6659,6 @@ path = V2; sourceTree = ""; }; - AC5200063012000000A5BBA3 /* Auth */ = { - isa = PBXGroup; - children = ( - AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */, - ); - path = Auth; - sourceTree = ""; - }; F4F9FC33C494BBFD8CE96749 /* Models */ = { isa = PBXGroup; children = ( @@ -6680,7 +6680,6 @@ 40FE0E822A8361DF00252293 /* Resources */, 4055B6312CB4194C006F3D2F /* ShellScript */, 3B82B11E22594A438A9B51EF /* [CP] Embed Pods Frameworks */, - 4A01C38173CBB0A3DAC22027 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -6724,7 +6723,6 @@ 40FE0EA22A8362A200252293 /* Frameworks */, 40FE0EA32A8362A200252293 /* Resources */, 28183D46159D813CE54C976C /* [CP] Embed Pods Frameworks */, - A693F0C20976651410F54E89 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -6775,7 +6773,6 @@ }; }; buildConfigurationList = 40FE0E7F2A8361DF00252293 /* Build configuration list for PBXProject "SodaLive" */; - compatibilityVersion = "Xcode 14.0"; developmentRegion = ko; hasScannedForEncodings = 0; knownRegions = ( @@ -6804,6 +6801,7 @@ 7D0E5FAF7AD538D1C2FED682 /* XCRemoteSwiftPackageReference "line-sdk-ios-swift" */, 405EC8B9303D97F30037B269 /* XCRemoteSwiftPackageReference "lottie-spm" */, ); + preferredProjectObjectVersion = 77; productRefGroup = 40FE0E852A8361DF00252293 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -6952,48 +6950,6 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\n"; }; - 4A01C38173CBB0A3DAC22027 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - A693F0C20976651410F54E89 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; FAC97E5C197D279B3EE15B05 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -7940,7 +7896,6 @@ 70E2CE7366BDBAC59BB39B41 /* AppDeepLinkHandler.swift in Sources */, 2B35B93B2F7253CADBC12A82 /* DateParser.swift in Sources */, A3BDD0D3E14CD72B022AF6A7 /* FollowButtonImageAsset.swift in Sources */, - C45F071870A4DB48ABAE8BC5 /* YandexAdSupport.swift in Sources */, FE3244627FFAD8667541CE01 /* ChannelDonationAllView.swift in Sources */, 843C3C5366C9D9DEE37878BF /* ChannelDonationItemView.swift in Sources */, 53E20A90F5D084820C7166E2 /* ChannelDonationViewModel.swift in Sources */, @@ -8881,7 +8836,6 @@ 560889894E241FA549958716 /* AppDeepLinkHandler.swift in Sources */, 4A951EA6E07524A0B650F4BF /* DateParser.swift in Sources */, F8DB0226F6F44A7DBEF8B4CF /* FollowButtonImageAsset.swift in Sources */, - 89AF41E6A46CD84BA469F272 /* YandexAdSupport.swift in Sources */, E2C133B589E2DA7596B3BAEF /* ChannelDonationAllView.swift in Sources */, F0F1F71CCA586A0CF5194FAB /* ChannelDonationItemView.swift in Sources */, 0470E68C6F302A131264E3AF /* ChannelDonationViewModel.swift in Sources */, @@ -9366,7 +9320,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 959B90DBB4BB5911AB10C442 /* Pods-SodaLive-dev.debug.xcconfig */; buildSettings = { - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "SodaLive-dev.entitlements"; @@ -9397,6 +9350,7 @@ PRODUCT_BUNDLE_IDENTIFIER = kr.co.vividnext.sodalive.debug2; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -9407,7 +9361,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = B108032F3DC7110CBFD04130 /* Pods-SodaLive-dev.release.xcconfig */; buildSettings = { - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "SodaLive-dev.entitlements"; @@ -9438,6 +9391,7 @@ PRODUCT_BUNDLE_IDENTIFIER = kr.co.vividnext.sodalive.debug2; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; diff --git a/SodaLive/Sources/App/AppDelegate.swift b/SodaLive/Sources/App/AppDelegate.swift index 48fc0df4..48a3bb88 100644 --- a/SodaLive/Sources/App/AppDelegate.swift +++ b/SodaLive/Sources/App/AppDelegate.swift @@ -15,7 +15,6 @@ import FirebaseCore import FirebaseAnalytics import FirebaseMessaging import LineSDK -import YandexMobileAds class AppDelegate: UIResponder, UIApplicationDelegate { @@ -33,9 +32,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { Messaging.messaging().delegate = self setupAppsFlyer() - // YandexAds 초기화 - YandexAds.initializeSDK(completionHandler: nil) - // For iOS 10 display notification (sent via APNS) UNUserNotificationCenter.current().delegate = self diff --git a/SodaLive/Sources/Chat/Character/CharacterView.swift b/SodaLive/Sources/Chat/Character/CharacterView.swift index 6caafc6c..61717b73 100644 --- a/SodaLive/Sources/Chat/Character/CharacterView.swift +++ b/SodaLive/Sources/Chat/Character/CharacterView.swift @@ -36,11 +36,6 @@ struct CharacterView: View { } } - YandexInlineBannerView( - placement: .chatCharacterList, - horizontalPadding: 24 - ) - .padding(.vertical, -24) // 인기 캐릭터 섹션 if !viewModel.popularCharacters.isEmpty { diff --git a/SodaLive/Sources/Chat/Original/OriginalTabView.swift b/SodaLive/Sources/Chat/Original/OriginalTabView.swift index 91a79687..f953ff1c 100644 --- a/SodaLive/Sources/Chat/Original/OriginalTabView.swift +++ b/SodaLive/Sources/Chat/Original/OriginalTabView.swift @@ -22,10 +22,6 @@ struct OriginalTabView: View { ScrollView(.vertical, showsIndicators: false) { VStack(spacing: 12) { - YandexInlineBannerView( - placement: .chatOriginalTabTop, - horizontalPadding: horizontalPadding - ) LazyVGrid( columns: Array( diff --git a/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift b/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift index 53d4324b..2c47ec2e 100644 --- a/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift +++ b/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift @@ -277,21 +277,6 @@ final class ChatRoomViewModel: ObservableObject { purchaseChatQuota(chargeType: .can, canOption: canOption) } - func showRewardedAdForChatQuota() { - _Concurrency.Task { - let isShown = await YandexRewardedAdManager.shared.showAdIfAvailable(for: .chatRoomQuota) { [weak self] in - self?.purchaseChatQuota(chargeType: .ad, canOption: nil) - } - - if !isShown { - await MainActor.run { - errorMessage = I18n.Chat.Room.rewardedAdLoadFailed - isShowPopup = true - } - } - } - } - private func purchaseChatQuota( chargeType: ChatRoomQuotaChargeType, canOption: ChatRoomQuotaCanOption? @@ -467,15 +452,6 @@ final class ChatRoomViewModel: ObservableObject { private func updateQuota(totalRemaining: Int) { self.totalRemaining = totalRemaining showQuotaNoticeView = totalRemaining <= 0 - prepareRewardedAdIfNeeded(totalRemaining: totalRemaining) - } - - private func prepareRewardedAdIfNeeded(totalRemaining: Int) { - guard totalRemaining <= 1 else { return } - - _Concurrency.Task { - await YandexRewardedAdManager.shared.preloadAd(for: .chatRoomQuota) - } } private func getSavedBackgroundImageId() -> Int? { diff --git a/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift index a7f31c85..ff3957b3 100644 --- a/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift +++ b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift @@ -21,7 +21,6 @@ struct ChatQuotaPurchaseRequest: Encodable { enum ChatRoomQuotaChargeType: String, Encodable { case can = "CAN" - case ad = "AD" } enum ChatRoomQuotaCanOption: String, Encodable { diff --git a/SodaLive/Sources/Chat/Talk/TalkView.swift b/SodaLive/Sources/Chat/Talk/TalkView.swift index b7928400..ffb75bd9 100644 --- a/SodaLive/Sources/Chat/Talk/TalkView.swift +++ b/SodaLive/Sources/Chat/Talk/TalkView.swift @@ -15,10 +15,6 @@ struct TalkView: View { BaseView(isLoading: $viewModel.isLoading) { ScrollView(.vertical, showsIndicators: false) { LazyVStack(spacing: 24) { - YandexInlineBannerView( - placement: .chatTalkTabTop, - horizontalPadding: 24 - ) if viewModel.talkRooms.isEmpty { Text(I18n.Chat.Talk.emptyMessage) diff --git a/SodaLive/Sources/Common/YandexAdSupport.swift b/SodaLive/Sources/Common/YandexAdSupport.swift deleted file mode 100644 index d5ccfbab..00000000 --- a/SodaLive/Sources/Common/YandexAdSupport.swift +++ /dev/null @@ -1,316 +0,0 @@ -// -// YandexAdSupport.swift -// SodaLive -// -// Created by OpenCode on 2026/04/28. -// - -import SwiftUI -import YandexMobileAds - -enum YandexBannerPlacement { - case liveTab - case liveDetail - case creatorCommunityAll - case seriesMainHome - case seriesMainDayOfWeek - case seriesMainByGenre - case pushNotificationList - case notificationReceiveSettings - case chatCharacterList - case chatOriginalTabTop - case chatTalkTabTop -} - -enum YandexRewardedPlacement { - case chatRoomQuota -} - -enum YandexAdUnitIdProvider { - - static func banner(for placement: YandexBannerPlacement) -> String { - switch placement { - case .liveTab: - YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID - case .liveDetail: - YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID - case .creatorCommunityAll: - YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID - case .seriesMainHome: - YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID - case .seriesMainDayOfWeek: - YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID - case .seriesMainByGenre: - YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID - case .pushNotificationList: - YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID - case .notificationReceiveSettings: - YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID - case .chatCharacterList: - YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID - case .chatOriginalTabTop: - YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID - case .chatTalkTabTop: - YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID - } - } - - static func rewarded(for placement: YandexRewardedPlacement) -> String { - switch placement { - case .chatRoomQuota: - YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID - } - } -} - -struct YandexInlineBannerView: View { - - let placement: YandexBannerPlacement - - var maxHeight: CGFloat = 90 - var horizontalPadding: CGFloat = 13.3 - - @State private var bannerHeight: CGFloat = 0 - @State private var isLoadFailed = true - - var body: some View { - GeometryReader { proxy in - let width = max(proxy.size.width - (horizontalPadding * 2), 1) - let resolvedHeight = isLoadFailed ? 0 : (bannerHeight > 0 ? bannerHeight : maxHeight) - - YandexInlineBannerContainer( - placement: placement, - width: width, - maxHeight: maxHeight, - bannerHeight: $bannerHeight, - isLoadFailed: $isLoadFailed - ) - .frame(width: width, height: resolvedHeight) - .padding(.horizontal, horizontalPadding) - } - .frame(height: isLoadFailed ? 0 : (bannerHeight > 0 ? bannerHeight : maxHeight)) - } -} - -private struct YandexInlineBannerContainer: UIViewRepresentable { - - let placement: YandexBannerPlacement - - let width: CGFloat - let maxHeight: CGFloat - - @Binding var bannerHeight: CGFloat - @Binding var isLoadFailed: Bool - - func makeCoordinator() -> Coordinator { - Coordinator(parent: self) - } - - func makeUIView(context: Context) -> UIView { - let view = UIView() - view.backgroundColor = .clear - return view - } - - func updateUIView(_ uiView: UIView, context: Context) { - context.coordinator.parent = self - context.coordinator.configureIfNeeded(containerView: uiView) - } - - final class Coordinator: NSObject, BannerAdViewDelegate { - - var parent: YandexInlineBannerContainer - private weak var containerView: UIView? - private var bannerAdView: BannerAdView? - private var currentWidth: CGFloat = 0 - - init(parent: YandexInlineBannerContainer) { - self.parent = parent - } - - func configureIfNeeded(containerView: UIView) { - self.containerView = containerView - - let roundedWidth = parent.width.rounded(.down) - - guard bannerAdView == nil || abs(currentWidth - roundedWidth) > 0.5 else { - return - } - - currentWidth = roundedWidth - - DispatchQueue.main.async { - self.parent.bannerHeight = 0 - self.parent.isLoadFailed = false - } - - bannerAdView?.removeFromSuperview() - - let adSize = BannerAdSize.inline(width: roundedWidth, maxHeight: parent.maxHeight) - let bannerAdView = BannerAdView(adSize: adSize) - bannerAdView.translatesAutoresizingMaskIntoConstraints = false - bannerAdView.delegate = self - - containerView.addSubview(bannerAdView) - - NSLayoutConstraint.activate([ - bannerAdView.topAnchor.constraint(equalTo: containerView.topAnchor), - bannerAdView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor), - bannerAdView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), - bannerAdView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) - ]) - - self.bannerAdView = bannerAdView - bannerAdView.loadAd(with: AdRequest(adUnitID: YandexAdUnitIdProvider.banner(for: parent.placement))) - } - - func bannerAdViewDidLoad(_ adView: BannerAdView) { - adView.layoutIfNeeded() - - let measuredHeight = adView.bounds.height > 0 ? adView.bounds.height : parent.maxHeight - - DispatchQueue.main.async { - self.parent.bannerHeight = measuredHeight - self.parent.isLoadFailed = false - } - } - - func bannerAdViewDidFailLoading(_ adView: BannerAdView, error: Error) { - DispatchQueue.main.async { - self.parent.bannerHeight = 0 - self.parent.isLoadFailed = true - } - } - - func bannerAdViewDidClick(_ adView: BannerAdView) { - } - - func bannerAdView(_ adView: BannerAdView, didTrackImpression impressionData: ImpressionData?) { - } - } -} - -@MainActor -final class YandexRewardedAdManager: NSObject { - - static let shared = YandexRewardedAdManager() - - private var rewardedAd: RewardedAd? - private var rewardedAdLoader: RewardedAdLoader? - private var currentPlacement: YandexRewardedPlacement? - private var pendingRewardAction: (@MainActor () -> Void)? - private var rewardedPlacement: YandexRewardedPlacement? - private var isLoading = false - - func preloadAd(for placement: YandexRewardedPlacement) { - guard !isLoading else { - return - } - - if currentPlacement == placement, rewardedAd != nil { - return - } - - let loader = RewardedAdLoader() - rewardedAdLoader = loader - rewardedAd = nil - currentPlacement = placement - isLoading = true - - Task { - do { - let loadedAd = try await loader.loadAd(with: AdRequest(adUnitID: YandexAdUnitIdProvider.rewarded(for: placement))) - guard currentPlacement == placement else { - isLoading = false - return - } - - loadedAd.delegate = self - rewardedAd = loadedAd - } catch { - if currentPlacement == placement { - rewardedAd = nil - } - } - - if currentPlacement == placement { - isLoading = false - } - } - } - - func showAdIfAvailable(for placement: YandexRewardedPlacement, onReward: @escaping @MainActor () -> Void) -> Bool { - guard let presenter = presentingViewController(), let rewardedAd, currentPlacement == placement else { - preloadAd(for: placement) - return false - } - - pendingRewardAction = onReward - rewardedPlacement = placement - rewardedAd.show(from: presenter) - return true - } - - private func completeRewardIfNeeded() { - let action = pendingRewardAction - pendingRewardAction = nil - action?() - } - - private func resetAndPreload() { - pendingRewardAction = nil - rewardedAd = nil - - if let rewardedPlacement { - self.rewardedPlacement = nil - preloadAd(for: rewardedPlacement) - } - } - - private func presentingViewController() -> UIViewController? { - guard - let rootViewController = UIApplication.shared.connectedScenes - .compactMap({ $0 as? UIWindowScene }) - .flatMap({ $0.windows }) - .first(where: { $0.isKeyWindow })? - .rootViewController - else { - return nil - } - - var topViewController = rootViewController - - while let presentedViewController = topViewController.presentedViewController { - topViewController = presentedViewController - } - - return topViewController - } -} - -extension YandexRewardedAdManager: RewardedAdDelegate { - - func rewardedAd(_ rewardedAd: RewardedAd, didReward reward: Reward) { - DEBUG_LOG("리워드 광고 보상 받기 성공") - completeRewardIfNeeded() - } - - func rewardedAd(_ rewardedAd: RewardedAd, didFailToShow error: Error) { - DEBUG_LOG("리워드 광고 에러") - resetAndPreload() - } - - func rewardedAdDidShow(_ rewardedAd: RewardedAd) { - } - - func rewardedAdDidDismiss(_ rewardedAd: RewardedAd) { - DEBUG_LOG("리워드 광고 닫기") - resetAndPreload() - } - - func rewardedAdDidClick(_ rewardedAd: RewardedAd) { - } - - func rewardedAd(_ rewardedAd: RewardedAd, didTrackImpression impressionData: ImpressionData?) { - } -} diff --git a/SodaLive/Sources/Content/Series/Main/ByGenre/SeriesMainByGenreView.swift b/SodaLive/Sources/Content/Series/Main/ByGenre/SeriesMainByGenreView.swift index d858c284..29551dbb 100644 --- a/SodaLive/Sources/Content/Series/Main/ByGenre/SeriesMainByGenreView.swift +++ b/SodaLive/Sources/Content/Series/Main/ByGenre/SeriesMainByGenreView.swift @@ -29,9 +29,6 @@ struct SeriesMainByGenreView: View { let width = (screenSize().width - (horizontalPadding * 2) - gridSpacing) / 2 VStack(spacing: 16) { - if !viewModel.genreList.isEmpty { - YandexInlineBannerView(placement: .seriesMainByGenre, horizontalPadding: 24) - } LazyVGrid( columns: Array( diff --git a/SodaLive/Sources/Content/Series/Main/DayOfWeek/SeriesMainDayOfWeekView.swift b/SodaLive/Sources/Content/Series/Main/DayOfWeek/SeriesMainDayOfWeekView.swift index 499b6cb7..27c72f4c 100644 --- a/SodaLive/Sources/Content/Series/Main/DayOfWeek/SeriesMainDayOfWeekView.swift +++ b/SodaLive/Sources/Content/Series/Main/DayOfWeek/SeriesMainDayOfWeekView.swift @@ -62,7 +62,6 @@ struct SeriesMainDayOfWeekView: View { let width = (screenSize().width - (horizontalPadding * 2) - gridSpacing) / 2 VStack(spacing: 16) { - YandexInlineBannerView(placement: .seriesMainDayOfWeek, horizontalPadding: 24) LazyVGrid( columns: Array( diff --git a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift index f506ef4e..c21d528c 100644 --- a/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift +++ b/SodaLive/Sources/Content/Series/Main/Home/SeriesMainHomeView.swift @@ -55,7 +55,6 @@ struct SeriesMainHomeView: View { } } - YandexInlineBannerView(placement: .seriesMainHome, horizontalPadding: 24) if !viewModel.recommendSeriesList.isEmpty { VStack(alignment: .leading, spacing: 16) { diff --git a/SodaLive/Sources/Debug/Utils/Constants.swift b/SodaLive/Sources/Debug/Utils/Constants.swift index ee316271..5ef87a71 100644 --- a/SodaLive/Sources/Debug/Utils/Constants.swift +++ b/SodaLive/Sources/Debug/Utils/Constants.swift @@ -11,7 +11,6 @@ let BASE_URL = "https://test-api.sodalive.net" let APPLY_SODALIVE_CREATOR = "https://forms.gle/mmhJKmijjVRnwtdZ7" let AGORA_APP_ID = "b96574e191a9430fa54c605528aa3ef7" -let AGORA_APP_CERTIFICATE = "ae18ade3afcf4086bd4397726eb0654c" let BOOTPAY_APP_ID = "6242a7772701800023f68b2f" let BOOTPAY_APP_HECTO_ID = "667fca5d3bab7404f831c3e5" @@ -32,18 +31,3 @@ let LINE_CHANNEL_ID = "2008995582" let AGORA_CUSTOMER_ID = "de5dd9ea151f4a43ba1ad8411817b169" let AGORA_CUSTOMER_SECRET = "3855da8bc5ae4743af8bf4f87408b515" - -let YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID = "R-M-19140297-3" -let YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID = "R-M-19140297-4" -let YANDEX_CONTENT_DETAIL_BANNER_AD_UNIT_ID = "R-M-19140297-5" -let YANDEX_CONTENT_DETAIL_INTERSTITIAL_AD_UNIT_ID = "R-M-19140297-6" -let YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID = "R-M-19140297-7" -let YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID = "R-M-19140297-8" -let YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID = "R-M-19140297-9" -let YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID = "R-M-19140297-10" -let YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID = "R-M-19140297-11" -let YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID = "R-M-19140297-12" -let YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID = "R-M-19140297-13" -let YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19140297-14" -let YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19140297-15" -let YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID = "R-M-19140297-16" diff --git a/SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift b/SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift index 515ed60a..0a8a3027 100644 --- a/SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift +++ b/SodaLive/Sources/Explorer/Profile/CreatorCommunity/All/CreatorCommunityAllView.swift @@ -47,7 +47,6 @@ struct CreatorCommunityAllView: View { communityViewTypeTabView - YandexInlineBannerView(placement: .creatorCommunityAll) if isGridMode { gridContentView diff --git a/SodaLive/Sources/I18n/I18n.swift b/SodaLive/Sources/I18n/I18n.swift index 1ffb5009..79c87707 100644 --- a/SodaLive/Sources/I18n/I18n.swift +++ b/SodaLive/Sources/I18n/I18n.swift @@ -326,14 +326,6 @@ enum I18n { pick(ko: "입력 중", en: "Typing", ja: "入力中") } - static func quotaAdAction(chatCount: Int) -> String { - pick( - ko: "광고 / \(chatCount)채팅", - en: "Ad / \(chatCount) chats", - ja: "広告 / \(chatCount)チャット" - ) - } - static func quotaChatCount(_ chatCount: Int) -> String { pick( ko: "\(chatCount)채팅", @@ -342,14 +334,6 @@ enum I18n { ) } - static var rewardedAdLoadFailed: String { - pick( - ko: "광고를 불러오지 못했어요\n잠시 후 다시 시도해 주세요.", - en: "Could not load the ad.\nPlease try again later.", - ja: "広告を読み込めませんでした。\nしばらくしてからもう一度お試しください。" - ) - } - static var backgroundSelectionTitle: String { pick(ko: "배경 이미지 선택", en: "Select background image", ja: "背景画像を選択") } diff --git a/SodaLive/Sources/Live/LiveView.swift b/SodaLive/Sources/Live/LiveView.swift index 890a01d8..079de1d0 100644 --- a/SodaLive/Sources/Live/LiveView.swift +++ b/SodaLive/Sources/Live/LiveView.swift @@ -91,8 +91,6 @@ struct LiveView: View { SectionLatestFinishedLiveView(items: viewModel.latestFinishedLiveItems) } - YandexInlineBannerView(placement: .liveTab) - .padding(.vertical, -24) if viewModel.replayLiveItems.count > 0 { LiveReplayListView(contentList: viewModel.replayLiveItems) diff --git a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift index 275d8f11..6dfb7b5d 100644 --- a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift +++ b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift @@ -129,9 +129,6 @@ struct LiveDetailView: View { .frame(width: proxy.size.width - 26.7) } - YandexInlineBannerView(placement: .liveDetail, horizontalPadding: 0) - .frame(width: proxy.size.width - 26.7) - .padding(.top, 13.3) Rectangle() .frame(height: 1) diff --git a/SodaLive/Sources/Notification/List/PushNotificationListView.swift b/SodaLive/Sources/Notification/List/PushNotificationListView.swift index 80b2e3a4..91105b39 100644 --- a/SodaLive/Sources/Notification/List/PushNotificationListView.swift +++ b/SodaLive/Sources/Notification/List/PushNotificationListView.swift @@ -17,7 +17,6 @@ struct PushNotificationListView: View { selectedTheme: $viewModel.selectedCategory ) - YandexInlineBannerView(placement: .pushNotificationList) ScrollView(.vertical, showsIndicators: false) { LazyVStack(spacing: 0) { diff --git a/SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift b/SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift index bce52cb6..5dab3ba5 100644 --- a/SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift +++ b/SodaLive/Sources/Settings/Notification/NotificationSettingsView.swift @@ -158,8 +158,6 @@ struct NotificationReceiveSettingsView: View { .padding(.top, 13.3) .padding(.horizontal, 13.3) - YandexInlineBannerView(placement: .notificationReceiveSettings) - .padding(.top, 26.7) Text(I18n.Settings.Notification.followingChannels) .appFont(size: 16.7, weight: .bold) diff --git a/SodaLive/Sources/Utils/Constants.swift b/SodaLive/Sources/Utils/Constants.swift index 5fe5d5be..cd14ec48 100644 --- a/SodaLive/Sources/Utils/Constants.swift +++ b/SodaLive/Sources/Utils/Constants.swift @@ -11,7 +11,6 @@ let BASE_URL = "https://api.sodalive.net" let APPLY_SODALIVE_CREATOR = "https://forms.gle/mmhJKmijjVRnwtdZ7" let AGORA_APP_ID = "e34e40046e9847baba3adfe2b8ffb4f6" -let AGORA_APP_CERTIFICATE = "15cadeea4ba94ff7b091c9a10f4bf4a6" let BOOTPAY_APP_ID = "64c35be1d25985001dc50c88" let BOOTPAY_APP_HECTO_ID = "664c1707b18b225deca4b42a" @@ -32,18 +31,3 @@ let LINE_CHANNEL_ID = "2008995539" let AGORA_CUSTOMER_ID = "de5dd9ea151f4a43ba1ad8411817b169" let AGORA_CUSTOMER_SECRET = "3855da8bc5ae4743af8bf4f87408b515" - -let YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID = "R-M-19157621-1" -let YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID = "R-M-19157621-2" -let YANDEX_CONTENT_DETAIL_BANNER_AD_UNIT_ID = "R-M-19157621-3" -let YANDEX_CONTENT_DETAIL_INTERSTITIAL_AD_UNIT_ID = "R-M-19157621-4" -let YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID = "R-M-19157621-5" -let YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID = "R-M-19157621-6" -let YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID = "R-M-19157621-7" -let YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID = "R-M-19157621-8" -let YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID = "R-M-19157621-9" -let YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID = "R-M-19157621-10" -let YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID = "R-M-19157621-11" -let YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19157621-12" -let YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19157621-13" -let YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID = "R-M-19157621-14"