react-native-daro 1.0.15 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/android/build.gradle +11 -1
  2. package/android/src/main/java/com/daro/reactnative/DaroMAdBannerViewManager.kt +34 -11
  3. package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +79 -48
  4. package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +80 -25
  5. package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +28 -4
  6. package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
  7. package/android/src/main/java/com/daro/reactnative/event/DaroMEvent.kt +18 -7
  8. package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +18 -5
  9. package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +301 -52
  10. package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
  11. package/android/src/newarch/java/com/daro/reactnative/DaroMModuleSpec.kt +6 -0
  12. package/android/src/oldarch/java/com/daro/reactnative/DaroMModuleSpec.kt +90 -0
  13. package/ios/DaroMModule+AppOpen.swift +13 -10
  14. package/ios/DaroMModule+Interstitial.swift +12 -9
  15. package/ios/DaroMModule+LightPopup.swift +16 -13
  16. package/ios/DaroMModule+Rewarded.swift +12 -9
  17. package/ios/DaroMModule.mm +45 -17
  18. package/ios/DaroMModule.swift +4 -4
  19. package/ios/Fabric/DaroMAdBannerComponentView.mm +207 -0
  20. package/ios/Fabric/DaroMFabricEventSink.mm +31 -0
  21. package/ios/Fabric/DaroMFabricPropApplier.mm +123 -0
  22. package/ios/Fabric/DaroMNativeAdComponentView.mm +294 -0
  23. package/ios/{DaroMAdBannerViewManager.m → Paper/DaroMAdBannerViewManager.m} +3 -1
  24. package/ios/Paper/DaroMAdBannerViewManager.swift +21 -0
  25. package/ios/{DaroMNativeAdViewManager.m → Paper/DaroMNativeAdViewManager.m} +2 -1
  26. package/ios/Paper/DaroMNativeAdViewManager.swift +22 -0
  27. package/ios/Shared/DaroMAdEventSink.swift +24 -0
  28. package/ios/Shared/DaroMBannerAdView.swift +188 -0
  29. package/ios/Shared/DaroMNativeAdLoadCoordinator.swift +49 -0
  30. package/ios/Shared/DaroMNativeAdView.swift +575 -0
  31. package/ios/Shared/DaroMNativeAssetResolver.swift +53 -0
  32. package/ios/mediation/admob/DaroMediationTypes.swift +1 -0
  33. package/lib/commonjs/AdBannerView.js +20 -39
  34. package/lib/commonjs/AdBannerView.js.map +1 -1
  35. package/lib/commonjs/AppOpenAd.js +43 -10
  36. package/lib/commonjs/AppOpenAd.js.map +1 -1
  37. package/lib/commonjs/DaroMAdBannerViewNativeComponent.ts +47 -0
  38. package/lib/commonjs/DaroMNativeAdViewNativeComponent.ts +62 -0
  39. package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
  40. package/lib/commonjs/EventEmitter.js +4 -5
  41. package/lib/commonjs/EventEmitter.js.map +1 -1
  42. package/lib/commonjs/InterstitialAd.js +9 -11
  43. package/lib/commonjs/InterstitialAd.js.map +1 -1
  44. package/lib/commonjs/LightPopupAd.js +11 -12
  45. package/lib/commonjs/LightPopupAd.js.map +1 -1
  46. package/lib/commonjs/NativeDaroModule.js +9 -0
  47. package/lib/commonjs/NativeDaroModule.js.map +1 -0
  48. package/lib/commonjs/RewardedAd.js +9 -11
  49. package/lib/commonjs/RewardedAd.js.map +1 -1
  50. package/lib/commonjs/codegen-env.d.js +2 -0
  51. package/lib/commonjs/codegen-env.d.js.map +1 -0
  52. package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
  53. package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
  54. package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
  55. package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
  56. package/lib/commonjs/hooks/useRewardedAd.js +113 -0
  57. package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
  58. package/lib/commonjs/index.js +29 -13
  59. package/lib/commonjs/index.js.map +1 -1
  60. package/lib/commonjs/nativeAd/NativeAdView.js +23 -22
  61. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
  62. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
  63. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
  64. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
  65. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
  66. package/lib/module/AdBannerView.js +19 -40
  67. package/lib/module/AdBannerView.js.map +1 -1
  68. package/lib/module/AppOpenAd.js +43 -11
  69. package/lib/module/AppOpenAd.js.map +1 -1
  70. package/lib/module/DaroMAdBannerViewNativeComponent.ts +47 -0
  71. package/lib/module/DaroMNativeAdViewNativeComponent.ts +62 -0
  72. package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
  73. package/lib/module/EventEmitter.js +4 -6
  74. package/lib/module/EventEmitter.js.map +1 -1
  75. package/lib/module/InterstitialAd.js +8 -11
  76. package/lib/module/InterstitialAd.js.map +1 -1
  77. package/lib/module/LightPopupAd.js +11 -13
  78. package/lib/module/LightPopupAd.js.map +1 -1
  79. package/lib/module/NativeDaroModule.js +5 -0
  80. package/lib/module/NativeDaroModule.js.map +1 -0
  81. package/lib/module/RewardedAd.js +8 -11
  82. package/lib/module/RewardedAd.js.map +1 -1
  83. package/lib/module/codegen-env.d.js +2 -0
  84. package/lib/module/codegen-env.d.js.map +1 -0
  85. package/lib/module/hooks/useInterstitialAd.js +106 -0
  86. package/lib/module/hooks/useInterstitialAd.js.map +1 -0
  87. package/lib/module/hooks/useLightPopupAd.js +110 -0
  88. package/lib/module/hooks/useLightPopupAd.js.map +1 -0
  89. package/lib/module/hooks/useRewardedAd.js +109 -0
  90. package/lib/module/hooks/useRewardedAd.js.map +1 -0
  91. package/lib/module/index.js +7 -13
  92. package/lib/module/index.js.map +1 -1
  93. package/lib/module/nativeAd/NativeAdView.js +22 -23
  94. package/lib/module/nativeAd/NativeAdView.js.map +1 -1
  95. package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
  96. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
  97. package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
  98. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
  99. package/lib/typescript/commonjs/plugin/src/index.d.ts +1 -1
  100. package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -1
  101. package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -1
  102. package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -1
  103. package/lib/typescript/commonjs/src/AdBannerView.d.ts +2 -2
  104. package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
  105. package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
  106. package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
  107. package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
  109. package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
  110. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
  111. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  112. package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
  113. package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +61 -0
  116. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
  119. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
  121. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
  123. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/src/index.d.ts +7 -1
  125. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +1 -0
  127. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  130. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
  132. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
  133. package/lib/typescript/module/plugin/src/index.d.ts +1 -1
  134. package/lib/typescript/module/plugin/src/index.d.ts.map +1 -1
  135. package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -1
  136. package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -1
  137. package/lib/typescript/module/src/AdBannerView.d.ts +2 -2
  138. package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
  139. package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
  140. package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
  141. package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
  142. package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
  143. package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
  144. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
  145. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  146. package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
  147. package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
  148. package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
  149. package/lib/typescript/module/src/NativeDaroModule.d.ts +61 -0
  150. package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
  151. package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
  152. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
  153. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
  154. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
  155. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
  156. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
  157. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
  158. package/lib/typescript/module/src/index.d.ts +7 -1
  159. package/lib/typescript/module/src/index.d.ts.map +1 -1
  160. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +1 -0
  161. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
  162. package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  163. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  164. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  165. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
  166. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
  167. package/package.json +12 -5
  168. package/plugin/build/index.d.ts +1 -1
  169. package/plugin/build/withAndroid.js +99 -17
  170. package/plugin/build/withIos.js +4 -5
  171. package/react-native-daro.podspec +3 -0
  172. package/src/AdBannerView.tsx +24 -61
  173. package/src/AppOpenAd.ts +46 -9
  174. package/src/DaroMAdBannerViewNativeComponent.ts +47 -0
  175. package/src/DaroMNativeAdViewNativeComponent.ts +62 -0
  176. package/src/DaroMediaViewNativeComponent.ts +9 -0
  177. package/src/EventEmitter.ts +4 -5
  178. package/src/InterstitialAd.ts +8 -10
  179. package/src/LightPopupAd.ts +11 -12
  180. package/src/NativeDaroModule.ts +91 -0
  181. package/src/RewardedAd.ts +8 -10
  182. package/src/codegen-env.d.ts +45 -0
  183. package/src/hooks/useInterstitialAd.ts +117 -0
  184. package/src/hooks/useLightPopupAd.ts +132 -0
  185. package/src/hooks/useRewardedAd.ts +122 -0
  186. package/src/index.tsx +21 -22
  187. package/src/nativeAd/NativeAdView.tsx +41 -54
  188. package/src/nativeAd/NativeAdViewComponents.tsx +80 -42
  189. package/src/nativeAd/NativeAdViewProvider.tsx +75 -17
  190. package/src/types/NativeAdViewProps.ts +7 -0
  191. package/ios/DaroMAdBannerViewManager.swift +0 -91
  192. package/ios/DaroMNativeAdViewManager.swift +0 -291
@@ -1,91 +0,0 @@
1
- import React
2
-
3
- @objc(DaroMAdBannerViewManager)
4
- class DaroMAdBannerViewManager: RCTViewManager {
5
- override func view() -> DaroMAdBannerView {
6
- DaroMAdBannerView()
7
- }
8
-
9
- @objc override static func requiresMainQueueSetup() -> Bool {
10
- false
11
- }
12
- }
13
-
14
- final class DaroMAdBannerView: UIView {
15
-
16
- var adBannerView: DaroAdBannerView?
17
-
18
- @objc var adUnitId: String?
19
- @objc var adFormat: String = DaroMModule.Constants.bannerAdFormatLabel.value
20
-
21
- // MARK: - Events
22
- @objc var onAdLoadedEvent: RCTDirectEventBlock?
23
- @objc var onAdLoadFailedEvent: RCTDirectEventBlock?
24
- @objc var onAdClickedEvent: RCTDirectEventBlock?
25
- @objc var onAdImpressionRecordedEvent: RCTDirectEventBlock?
26
-
27
- init() {
28
- super.init(frame: CGRect.zero)
29
- }
30
-
31
- required init?(coder: NSCoder) {
32
- fatalError("init(coder:) has not been implemented")
33
- }
34
-
35
- /// Invoked after all the JavaScript properties are set when mounting AdView
36
- override func didSetProps(_ changedProps: [String]!) {
37
- initialize()
38
- adBannerView?.loadAd()
39
- }
40
-
41
- @objc
42
- func loadAd() {
43
- adBannerView?.loadAd()
44
- }
45
-
46
- @objc(initialize)
47
- func initialize() {
48
- guard adBannerView == nil else {
49
- DaroMModule.logger.warning("AdView is already initialized")
50
- return
51
- }
52
- guard let adUnitId else {
53
- DaroMModule.logger.warning("AdUnitId is required")
54
- return
55
- }
56
-
57
- let bannerSize = adFormat == DaroMModule.Constants.bannerAdFormatLabel.value ? DaroAdBannerSize.banner : DaroAdBannerSize.MREC
58
- let adUnit = DaroAdUnit(unitId: adUnitId)
59
- let adBannerView = DaroAdBannerView(unit: adUnit, bannerSize: bannerSize)
60
- setupBannerListener(for: adBannerView)
61
-
62
- adBannerView.translatesAutoresizingMaskIntoConstraints = false
63
- addSubview(adBannerView)
64
- self.adBannerView = adBannerView
65
-
66
- NSLayoutConstraint.activate([
67
- adBannerView.widthAnchor.constraint(equalToConstant: bannerSize.width),
68
- adBannerView.heightAnchor.constraint(equalToConstant: bannerSize.height),
69
- adBannerView.centerXAnchor.constraint(equalTo: self.centerXAnchor),
70
- adBannerView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
71
- ])
72
- }
73
-
74
- private func setupBannerListener(for bannerView: DaroAdBannerView) {
75
- bannerView.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
76
- self?.onAdLoadedEvent?(adInfo?.toBody)
77
- }
78
-
79
- bannerView.listener.onAdLoadFail = { [weak self] error in
80
- self?.onAdLoadFailedEvent?(error.toBody)
81
- }
82
-
83
- bannerView.listener.onAdImpression = { [weak self] adInfo in
84
- self?.onAdImpressionRecordedEvent?(adInfo?.toBody)
85
- }
86
-
87
- bannerView.listener.onAdClicked = { [weak self] adInfo in
88
- self?.onAdClickedEvent?(adInfo?.toBody)
89
- }
90
- }
91
- }
@@ -1,291 +0,0 @@
1
- import React
2
- import Combine
3
- import UIKit
4
-
5
- @objc(DaroMNativeAdViewManager)
6
- class DaroMNativeAdViewManager: RCTViewManager {
7
- override func view() -> RNDaroMNativeAdView {
8
- RNDaroMNativeAdView(bridge: bridge)
9
- }
10
-
11
- @objc override static func requiresMainQueueSetup() -> Bool {
12
- false
13
- }
14
-
15
- @objc(loadAd:)
16
- func loadAd(viewTag: NSNumber) {
17
- bridge?.uiManager.addUIBlock({ uiManager, viewRegistry in
18
- if let view = viewRegistry?[viewTag] as? RNDaroMNativeAdView {
19
- view._internalAdView?.loadAd()
20
- }
21
- })
22
- }
23
- }
24
-
25
- final class RNDaroMNativeAdView: UIView, RenderDelegate {
26
-
27
- var _internalAdView: BridgeNativeAdView?
28
- var adUnit: DaroAdUnit
29
-
30
- @objc var adUnitId: String?
31
- @objc var titleViewStyleProps: NSDictionary? {
32
- didSet {
33
- _internalTitleLabel.applyStyle(titleViewStyleProps)
34
- }
35
- }
36
- @objc var titleView: NSNumber?
37
- @objc var bodyViewStyleProps: NSDictionary? {
38
- didSet {
39
- _internalBodyLabel.applyStyle(bodyViewStyleProps)
40
- }
41
- }
42
- @objc var bodyView: NSNumber?
43
- @objc var callToActionViewStyleProps: NSDictionary? {
44
- didSet {
45
- _internalFakeCTAButton.applyStyle(callToActionViewStyleProps)
46
- }
47
- }
48
- @objc var callToActionView: NSNumber?
49
- @objc var iconViewStyleProps: NSDictionary? {
50
- didSet {
51
- _internalIconImageView.applyStyle(iconViewStyleProps)
52
- }
53
- }
54
- @objc var iconView: NSNumber?
55
- @objc var mediaViewStyleProps: NSDictionary? {
56
- didSet {
57
- _internalMediaView.baseApplyStyle(mediaViewStyleProps)
58
- }
59
- }
60
- @objc var mediaView: NSNumber?
61
-
62
- var _internalTitleLabel: UILabel = {
63
- let label = UILabel()
64
- label.isUserInteractionEnabled = false
65
- label.clipsToBounds = true
66
- label.font = .systemFont(ofSize: 15, weight: .bold)
67
- label.textColor = UIColor.black
68
- return label
69
- }()
70
-
71
- var _internalBodyLabel: UILabel = {
72
- let label = UILabel()
73
- label.isUserInteractionEnabled = false
74
- label.clipsToBounds = true
75
- label.font = .systemFont(ofSize: 15, weight: .regular)
76
- label.textColor = UIColor.black
77
- return label
78
- }()
79
-
80
- let _internalMediaView: UIView = UIView()
81
-
82
- var _internalIconImageView: UIImageView = {
83
- let view = UIImageView()
84
- view.contentMode = .scaleAspectFill
85
- return view
86
- }()
87
-
88
- /// Call to Action
89
- var _internalCallToActionButton: UIButton = {
90
- let button = UIButton()
91
- button.translatesAutoresizingMaskIntoConstraints = false
92
- button.titleLabel?.font = .systemFont(ofSize: 20, weight: .bold)
93
- button.setTitleColor(.white, for: .normal)
94
- return button
95
- }()
96
-
97
- var _internalFakeCTAButton: UIButton = {
98
- let button = UIButton()
99
- button.translatesAutoresizingMaskIntoConstraints = false
100
- button.setTitleColor(.white, for: .normal)
101
- return button
102
- }()
103
-
104
- @objc var onAdLoadedEvent: RCTDirectEventBlock?
105
- @objc var onAdLoadFailedEvent: RCTDirectEventBlock?
106
- @objc var onAdClickedEvent: RCTDirectEventBlock?
107
- @objc var onAdImpressionRecordedEvent: RCTDirectEventBlock?
108
-
109
- @Atomic private var isAdUnitIdSet: Bool = false
110
- @Atomic private var isBindBridge: Bool = false
111
-
112
-
113
- var bridge: RCTBridge?
114
-
115
- convenience init(bridge: RCTBridge?) {
116
- self.init()
117
- self.bridge = bridge
118
- }
119
-
120
- required init() {
121
- self.adUnit = DaroAdUnit(unitId: "")
122
- super.init(frame: .zero)
123
- }
124
-
125
- required init?(coder: NSCoder) {
126
- fatalError("init(coder:) has not been implemented")
127
- }
128
-
129
- /// Invoked after all the JavaScript properties are set when mounting AdView
130
- /// after all the user's asset views are mounted, following the 1st event
131
- /// 두 번 호출됨. 첫번째는 adUnitId가 설정된 후, 두번째는 모든 subview들이 마운트된 후
132
- override func didSetProps(_ changedProps: [String]) {
133
- guard let adUnitId else {
134
- DaroMModule.logger.warning("[native-ad] AdUnitId is required")
135
- return
136
- }
137
- guard changedProps.isEmpty == false else { return }
138
- DaroMModule.logger.info("[native-ad] \(#function): \(changedProps)")
139
- guard !isAdUnitIdSet else { return }
140
- isAdUnitIdSet = true
141
- makeAdViews(unitId: adUnitId)
142
- self._internalAdView?.loadAd()
143
- }
144
-
145
- override func didMoveToWindow() {
146
- super.didMoveToWindow()
147
-
148
- guard window != nil else { return }
149
-
150
- DispatchQueue.main.async { [weak self] in
151
- self?.bindBridgeViews()
152
- }
153
- }
154
-
155
- private func makeAdViews(unitId: String) {
156
- self.adUnit = DaroAdUnit(unitId: unitId)
157
- let native = BridgeNativeAdView(unit: adUnit)
158
- native.delegate = self
159
- self._internalAdView = native
160
- super.addSubview(native)
161
- native.pinToEdges(to: self)
162
-
163
- self._internalAdView?.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
164
- // print("[QWER] onSuccess \(ad) \(adInfo)")
165
- self?.onAdLoadedEvent?(adInfo?.toBody)
166
- }
167
- self._internalAdView?.listener.onAdLoadFail = { [weak self] error in
168
- // print("[QWER] onFailure \(error)")
169
- self?.onAdLoadFailedEvent?(error.toBody)
170
- }
171
- self._internalAdView?.listener.onAdImpression = { [weak self] adInfo in
172
- // print("[QWER] adImpression\(adInfo)")
173
- self?.onAdImpressionRecordedEvent?(adInfo?.toBody)
174
- }
175
- self._internalAdView?.listener.onAdClicked = { [weak self] adInfo in
176
- // print("[QWER] adClicked \(adInfo)")
177
- self?.onAdClickedEvent?(adInfo?.toBody)
178
- }
179
- }
180
-
181
- private func getBridgeView(tag: NSNumber?) -> UIView? {
182
- guard let tag, let bridgeView = bridge?.uiManager.view(forReactTag: tag) else {
183
- return nil
184
- }
185
- return bridgeView
186
- }
187
-
188
- private func bindBridgeViews() {
189
- guard !isBindBridge else { return }
190
- isBindBridge = true
191
- var bindTitleLabel: UILabel?
192
- if let bridgeTitleView = getBridgeView(tag: titleView) {
193
- _internalTitleLabel.pinToEdges(to: bridgeTitleView)
194
- bindTitleLabel = _internalTitleLabel
195
- }
196
-
197
- var bindBodyLabel: UILabel?
198
- if let bridgeBodyView = getBridgeView(tag: bodyView) {
199
- _internalBodyLabel.pinToEdges(to: bridgeBodyView)
200
- bindBodyLabel = _internalBodyLabel
201
- }
202
-
203
- if let bridgeCallToActionView = getBridgeView(tag: callToActionView) {
204
- _internalFakeCTAButton.pinToEdges(to: bridgeCallToActionView)
205
- }
206
-
207
- var bindIconImageView: UIImageView?
208
- if let bridgeIconView = getBridgeView(tag: iconView) {
209
- _internalIconImageView.pinToEdges(to: bridgeIconView)
210
- bindIconImageView = _internalIconImageView
211
- }
212
-
213
- var bindMediaView: UIView?
214
- if let bridgeMediaView = getBridgeView(tag: mediaView) {
215
- _internalMediaView.pinToEdges(to: bridgeMediaView)
216
- bindMediaView = _internalMediaView
217
- }
218
-
219
- _internalCallToActionButton.pinToEdges(to: self)
220
-
221
- _internalAdView?.bindViews(
222
- titleLabel: bindTitleLabel,
223
- bodyLabel: bindBodyLabel,
224
- iconImageView: bindIconImageView,
225
- mediaContentView: bindMediaView,
226
- callToActionButton: _internalCallToActionButton
227
- )
228
- }
229
-
230
- func renderAd(for nativeAd: DaroAdNative) {
231
- self._internalFakeCTAButton.setTitle(_internalCallToActionButton.titleLabel?.text, for: .normal)
232
- self._internalCallToActionButton.setTitle("", for: .normal)
233
- self._internalCallToActionButton.alpha = 1
234
- }
235
-
236
- override func addSubview(_ view: UIView) {
237
- self._internalAdView?.addSubview(view)
238
- }
239
- }
240
-
241
- protocol RenderDelegate: AnyObject {
242
- func renderAd(for nativeAd: DaroAdNative)
243
- }
244
-
245
- class BridgeNativeAdView: DaroAdNativeView {
246
- weak var delegate: RenderDelegate?
247
-
248
- override func renderAd(for nativeAd: DaroAdNative, loader: any AdNativeLoadable) {
249
- super.renderAd(for: nativeAd, loader: loader)
250
- self.delegate?.renderAd(for: nativeAd)
251
- }
252
- }
253
-
254
- @propertyWrapper
255
- private struct Atomic<Value> {
256
- private var value: Value
257
- private let lock = NSLock()
258
-
259
- init(wrappedValue value: Value) {
260
- self.value = value
261
- }
262
-
263
- var wrappedValue: Value {
264
- get {
265
- lock.lock()
266
- defer { lock.unlock() }
267
- return value
268
- }
269
- set {
270
- lock.lock()
271
- value = newValue
272
- lock.unlock()
273
- }
274
- }
275
- }
276
-
277
- private extension UIView {
278
- func pinToEdges(to: UIView) {
279
- translatesAutoresizingMaskIntoConstraints = false
280
- if self.superview != to {
281
- removeFromSuperview()
282
- to.addSubview(self)
283
- }
284
- NSLayoutConstraint.activate([
285
- topAnchor.constraint(equalTo: to.topAnchor),
286
- bottomAnchor.constraint(equalTo: to.bottomAnchor),
287
- leftAnchor.constraint(equalTo: to.leftAnchor),
288
- rightAnchor.constraint(equalTo: to.rightAnchor),
289
- ])
290
- }
291
- }