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.
- package/android/build.gradle +11 -1
- package/android/src/main/java/com/daro/reactnative/DaroMAdBannerViewManager.kt +34 -11
- package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +79 -48
- package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +80 -25
- package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +28 -4
- package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
- package/android/src/main/java/com/daro/reactnative/event/DaroMEvent.kt +18 -7
- package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +18 -5
- package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +301 -52
- package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
- package/android/src/newarch/java/com/daro/reactnative/DaroMModuleSpec.kt +6 -0
- package/android/src/oldarch/java/com/daro/reactnative/DaroMModuleSpec.kt +90 -0
- package/ios/DaroMModule+AppOpen.swift +13 -10
- package/ios/DaroMModule+Interstitial.swift +12 -9
- package/ios/DaroMModule+LightPopup.swift +16 -13
- package/ios/DaroMModule+Rewarded.swift +12 -9
- package/ios/DaroMModule.mm +45 -17
- package/ios/DaroMModule.swift +4 -4
- package/ios/Fabric/DaroMAdBannerComponentView.mm +207 -0
- package/ios/Fabric/DaroMFabricEventSink.mm +31 -0
- package/ios/Fabric/DaroMFabricPropApplier.mm +123 -0
- package/ios/Fabric/DaroMNativeAdComponentView.mm +294 -0
- package/ios/{DaroMAdBannerViewManager.m → Paper/DaroMAdBannerViewManager.m} +3 -1
- package/ios/Paper/DaroMAdBannerViewManager.swift +21 -0
- package/ios/{DaroMNativeAdViewManager.m → Paper/DaroMNativeAdViewManager.m} +2 -1
- package/ios/Paper/DaroMNativeAdViewManager.swift +22 -0
- package/ios/Shared/DaroMAdEventSink.swift +24 -0
- package/ios/Shared/DaroMBannerAdView.swift +188 -0
- package/ios/Shared/DaroMNativeAdLoadCoordinator.swift +49 -0
- package/ios/Shared/DaroMNativeAdView.swift +575 -0
- package/ios/Shared/DaroMNativeAssetResolver.swift +53 -0
- package/ios/mediation/admob/DaroMediationTypes.swift +1 -0
- package/lib/commonjs/AdBannerView.js +20 -39
- package/lib/commonjs/AdBannerView.js.map +1 -1
- package/lib/commonjs/AppOpenAd.js +43 -10
- package/lib/commonjs/AppOpenAd.js.map +1 -1
- package/lib/commonjs/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/lib/commonjs/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/commonjs/EventEmitter.js +4 -5
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/InterstitialAd.js +9 -11
- package/lib/commonjs/InterstitialAd.js.map +1 -1
- package/lib/commonjs/LightPopupAd.js +11 -12
- package/lib/commonjs/LightPopupAd.js.map +1 -1
- package/lib/commonjs/NativeDaroModule.js +9 -0
- package/lib/commonjs/NativeDaroModule.js.map +1 -0
- package/lib/commonjs/RewardedAd.js +9 -11
- package/lib/commonjs/RewardedAd.js.map +1 -1
- package/lib/commonjs/codegen-env.d.js +2 -0
- package/lib/commonjs/codegen-env.d.js.map +1 -0
- package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
- package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
- package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
- package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
- package/lib/commonjs/hooks/useRewardedAd.js +113 -0
- package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
- package/lib/commonjs/index.js +29 -13
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdView.js +23 -22
- package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/module/AdBannerView.js +19 -40
- package/lib/module/AdBannerView.js.map +1 -1
- package/lib/module/AppOpenAd.js +43 -11
- package/lib/module/AppOpenAd.js.map +1 -1
- package/lib/module/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/lib/module/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/module/EventEmitter.js +4 -6
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/InterstitialAd.js +8 -11
- package/lib/module/InterstitialAd.js.map +1 -1
- package/lib/module/LightPopupAd.js +11 -13
- package/lib/module/LightPopupAd.js.map +1 -1
- package/lib/module/NativeDaroModule.js +5 -0
- package/lib/module/NativeDaroModule.js.map +1 -0
- package/lib/module/RewardedAd.js +8 -11
- package/lib/module/RewardedAd.js.map +1 -1
- package/lib/module/codegen-env.d.js +2 -0
- package/lib/module/codegen-env.d.js.map +1 -0
- package/lib/module/hooks/useInterstitialAd.js +106 -0
- package/lib/module/hooks/useInterstitialAd.js.map +1 -0
- package/lib/module/hooks/useLightPopupAd.js +110 -0
- package/lib/module/hooks/useLightPopupAd.js.map +1 -0
- package/lib/module/hooks/useRewardedAd.js +109 -0
- package/lib/module/hooks/useRewardedAd.js.map +1 -0
- package/lib/module/index.js +7 -13
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeAd/NativeAdView.js +22 -23
- package/lib/module/nativeAd/NativeAdView.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
- package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
- package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/typescript/commonjs/plugin/src/index.d.ts +1 -1
- package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -1
- package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/AdBannerView.d.ts +2 -2
- package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
- package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
- package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +61 -0
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +7 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +1 -0
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/index.d.ts +1 -1
- package/lib/typescript/module/plugin/src/index.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -1
- package/lib/typescript/module/src/AdBannerView.d.ts +2 -2
- package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
- package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
- package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeDaroModule.d.ts +61 -0
- package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +7 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +1 -0
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/package.json +12 -5
- package/plugin/build/index.d.ts +1 -1
- package/plugin/build/withAndroid.js +99 -17
- package/plugin/build/withIos.js +4 -5
- package/react-native-daro.podspec +3 -0
- package/src/AdBannerView.tsx +24 -61
- package/src/AppOpenAd.ts +46 -9
- package/src/DaroMAdBannerViewNativeComponent.ts +47 -0
- package/src/DaroMNativeAdViewNativeComponent.ts +62 -0
- package/src/DaroMediaViewNativeComponent.ts +9 -0
- package/src/EventEmitter.ts +4 -5
- package/src/InterstitialAd.ts +8 -10
- package/src/LightPopupAd.ts +11 -12
- package/src/NativeDaroModule.ts +91 -0
- package/src/RewardedAd.ts +8 -10
- package/src/codegen-env.d.ts +45 -0
- package/src/hooks/useInterstitialAd.ts +117 -0
- package/src/hooks/useLightPopupAd.ts +132 -0
- package/src/hooks/useRewardedAd.ts +122 -0
- package/src/index.tsx +21 -22
- package/src/nativeAd/NativeAdView.tsx +41 -54
- package/src/nativeAd/NativeAdViewComponents.tsx +80 -42
- package/src/nativeAd/NativeAdViewProvider.tsx +75 -17
- package/src/types/NativeAdViewProps.ts +7 -0
- package/ios/DaroMAdBannerViewManager.swift +0 -91
- 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
|
-
}
|