refactor(ads): Yandex 광고 코드와 SDK 의존성을 제거한다
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
+1
-157
@@ -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
|
||||
|
||||
@@ -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 = "<group>"; };
|
||||
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = "<group>"; };
|
||||
AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = "<group>"; };
|
||||
002435A7145D59CCCA8F76D1 /* CreatorChannelFanTalkApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkApi.swift; sourceTree = "<group>"; };
|
||||
0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PostChannelDonationRequest.swift; sourceTree = "<group>"; };
|
||||
0EC05859619BDC03056911E7 /* MainTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = "<group>"; };
|
||||
@@ -3039,6 +3034,9 @@
|
||||
A4F100000000000000000006 /* LottieRefreshableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LottieRefreshableScrollView.swift; sourceTree = "<group>"; };
|
||||
A575789542808C0C87AC6D82 /* AiCharacterCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AiCharacterCard.swift; sourceTree = "<group>"; };
|
||||
AB63E7E31B75FF2E6F1C9073 /* LanguageSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageSettingsView.swift; sourceTree = "<group>"; };
|
||||
AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = "<group>"; };
|
||||
AC5200003012000000A5BBA3 /* AuthVerificationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationView.swift; sourceTree = "<group>"; };
|
||||
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
B54EBFBCC66E5AC79197E1FC /* GetPushNotificationCategoryResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationCategoryResponse.swift; sourceTree = "<group>"; };
|
||||
B7406AE69F7667FAA2E6DD23 /* CreatorDetailDialogView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorDetailDialogView.swift; sourceTree = "<group>"; };
|
||||
@@ -3221,7 +3219,6 @@
|
||||
E92246F5C1254CBED72AD9AD /* AudioContentCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioContentCard.swift; sourceTree = "<group>"; };
|
||||
EDB71B1A61924B10599005FE /* CreatorChannelFanTalkCountBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkCountBar.swift; sourceTree = "<group>"; };
|
||||
EF47BCA4DC51200D63D1E2D7 /* CreatorChannelFanTalkRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkRepository.swift; sourceTree = "<group>"; };
|
||||
F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YandexAdSupport.swift; sourceTree = "<group>"; };
|
||||
F23D0834690CFE9FBDC10510 /* GetPushNotificationListResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationListResponse.swift; sourceTree = "<group>"; };
|
||||
F26CB443DA0ED4C45A18B258 /* PushNotificationApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PushNotificationApi.swift; sourceTree = "<group>"; };
|
||||
F6966E927CDB1DE31F936757 /* CreatorProfileGrid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorProfileGrid.swift; sourceTree = "<group>"; };
|
||||
@@ -3229,7 +3226,11 @@
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
||||
401A3B942FEE61E000A5BBA3 /* docs */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = docs; sourceTree = "<group>"; };
|
||||
401A3B942FEE61E000A5BBA3 /* docs */ = {
|
||||
isa = PBXFileSystemSynchronizedRootGroup;
|
||||
path = docs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* 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 = "<group>";
|
||||
@@ -5900,6 +5900,14 @@
|
||||
path = FanTalk;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AC5200063012000000A5BBA3 /* Auth */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */,
|
||||
);
|
||||
path = Auth;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B068C16B9D7F3F80901622E8 /* Button */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -6651,14 +6659,6 @@
|
||||
path = V2;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AC5200063012000000A5BBA3 /* Auth */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */,
|
||||
);
|
||||
path = Auth;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -36,11 +36,6 @@ struct CharacterView: View {
|
||||
}
|
||||
}
|
||||
|
||||
YandexInlineBannerView(
|
||||
placement: .chatCharacterList,
|
||||
horizontalPadding: 24
|
||||
)
|
||||
.padding(.vertical, -24)
|
||||
|
||||
// 인기 캐릭터 섹션
|
||||
if !viewModel.popularCharacters.isEmpty {
|
||||
|
||||
@@ -22,10 +22,6 @@ struct OriginalTabView: View {
|
||||
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
VStack(spacing: 12) {
|
||||
YandexInlineBannerView(
|
||||
placement: .chatOriginalTabTop,
|
||||
horizontalPadding: horizontalPadding
|
||||
)
|
||||
|
||||
LazyVGrid(
|
||||
columns: Array(
|
||||
|
||||
@@ -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? {
|
||||
|
||||
@@ -21,7 +21,6 @@ struct ChatQuotaPurchaseRequest: Encodable {
|
||||
|
||||
enum ChatRoomQuotaChargeType: String, Encodable {
|
||||
case can = "CAN"
|
||||
case ad = "AD"
|
||||
}
|
||||
|
||||
enum ChatRoomQuotaCanOption: String, Encodable {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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?) {
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -55,7 +55,6 @@ struct SeriesMainHomeView: View {
|
||||
}
|
||||
}
|
||||
|
||||
YandexInlineBannerView(placement: .seriesMainHome, horizontalPadding: 24)
|
||||
|
||||
if !viewModel.recommendSeriesList.isEmpty {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -47,7 +47,6 @@ struct CreatorCommunityAllView: View {
|
||||
|
||||
communityViewTypeTabView
|
||||
|
||||
YandexInlineBannerView(placement: .creatorCommunityAll)
|
||||
|
||||
if isGridMode {
|
||||
gridContentView
|
||||
|
||||
@@ -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: "背景画像を選択")
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -17,7 +17,6 @@ struct PushNotificationListView: View {
|
||||
selectedTheme: $viewModel.selectedCategory
|
||||
)
|
||||
|
||||
YandexInlineBannerView(placement: .pushNotificationList)
|
||||
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
LazyVStack(spacing: 0) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user