react-native-applovin-max 8.2.0 → 9.0.0

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 (151) hide show
  1. package/android/build.gradle +13 -2
  2. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdView.java +33 -26
  3. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManagerImpl.java +110 -0
  4. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewUiComponent.java +15 -13
  5. package/android/src/main/java/com/applovin/reactnative/{AppLovinMAXModule.java → AppLovinMAXModuleImpl.java} +107 -168
  6. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdView.java +84 -56
  7. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManagerImpl.java +101 -0
  8. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXPackage.java +44 -11
  9. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXUtils.java +56 -0
  10. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +151 -0
  11. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
  12. package/android/src/newarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +130 -0
  13. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +128 -0
  14. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
  15. package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +93 -0
  16. package/ios/AppLovinMAX.h +8 -3
  17. package/ios/{AppLovinMAX.m → AppLovinMAX.mm} +66 -53
  18. package/ios/AppLovinMAXAdView.h +7 -2
  19. package/ios/AppLovinMAXAdView.mm +747 -0
  20. package/ios/{AppLovinMAXAdViewManager.m → AppLovinMAXAdViewManager.mm} +3 -2
  21. package/ios/{AppLovinMAXAdViewUIComponent.m → AppLovinMAXAdViewUIComponent.mm} +2 -1
  22. package/ios/AppLovinMAXNativeAdView.h +15 -4
  23. package/ios/AppLovinMAXNativeAdView.mm +745 -0
  24. package/ios/AppLovinMAXNativeAdViewManager.mm +116 -0
  25. package/lib/commonjs/AdView.js +61 -85
  26. package/lib/commonjs/AdView.js.map +1 -1
  27. package/lib/commonjs/AppLovinMAX.js +11 -10
  28. package/lib/commonjs/AppLovinMAX.js.map +1 -1
  29. package/lib/commonjs/AppOpenAd.js +8 -10
  30. package/lib/commonjs/AppOpenAd.js.map +1 -1
  31. package/lib/commonjs/BannerAd.js +19 -21
  32. package/lib/commonjs/BannerAd.js.map +1 -1
  33. package/lib/commonjs/ErrorCode.js +3 -5
  34. package/lib/commonjs/ErrorCode.js.map +1 -1
  35. package/lib/commonjs/EventEmitter.js +3 -5
  36. package/lib/commonjs/EventEmitter.js.map +1 -1
  37. package/lib/commonjs/InterstitialAd.js +8 -10
  38. package/lib/commonjs/InterstitialAd.js.map +1 -1
  39. package/lib/commonjs/MRecAd.js +14 -16
  40. package/lib/commonjs/MRecAd.js.map +1 -1
  41. package/lib/commonjs/Privacy.js +3 -5
  42. package/lib/commonjs/Privacy.js.map +1 -1
  43. package/lib/commonjs/RewardedAd.js +8 -10
  44. package/lib/commonjs/RewardedAd.js.map +1 -1
  45. package/lib/commonjs/Utils.js +25 -0
  46. package/lib/commonjs/Utils.js.map +1 -0
  47. package/lib/commonjs/nativeAd/NativeAdView.js +65 -42
  48. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
  49. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +51 -47
  50. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
  51. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +38 -8
  52. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
  53. package/lib/commonjs/nativeAd/img/blank_icon.png +0 -0
  54. package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js +14 -0
  55. package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
  56. package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js +14 -0
  57. package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
  58. package/lib/commonjs/specs/NativeAppLovinMAXModule.js +9 -0
  59. package/lib/commonjs/specs/NativeAppLovinMAXModule.js.map +1 -0
  60. package/lib/module/AdView.js +56 -81
  61. package/lib/module/AdView.js.map +1 -1
  62. package/lib/module/AppLovinMAX.js +7 -7
  63. package/lib/module/AppLovinMAX.js.map +1 -1
  64. package/lib/module/AppOpenAd.js +1 -4
  65. package/lib/module/AppOpenAd.js.map +1 -1
  66. package/lib/module/BannerAd.js +1 -4
  67. package/lib/module/BannerAd.js.map +1 -1
  68. package/lib/module/ErrorCode.js +1 -4
  69. package/lib/module/ErrorCode.js.map +1 -1
  70. package/lib/module/EventEmitter.js +2 -4
  71. package/lib/module/EventEmitter.js.map +1 -1
  72. package/lib/module/InterstitialAd.js +2 -5
  73. package/lib/module/InterstitialAd.js.map +1 -1
  74. package/lib/module/MRecAd.js +1 -4
  75. package/lib/module/MRecAd.js.map +1 -1
  76. package/lib/module/Privacy.js +1 -4
  77. package/lib/module/Privacy.js.map +1 -1
  78. package/lib/module/RewardedAd.js +2 -5
  79. package/lib/module/RewardedAd.js.map +1 -1
  80. package/lib/module/Utils.js +17 -0
  81. package/lib/module/Utils.js.map +1 -0
  82. package/lib/module/nativeAd/NativeAdView.js +63 -40
  83. package/lib/module/nativeAd/NativeAdView.js.map +1 -1
  84. package/lib/module/nativeAd/NativeAdViewComponents.js +53 -49
  85. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
  86. package/lib/module/nativeAd/NativeAdViewProvider.js +39 -9
  87. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
  88. package/lib/module/nativeAd/img/blank_icon.png +0 -0
  89. package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js +7 -0
  90. package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
  91. package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js +7 -0
  92. package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
  93. package/lib/module/specs/NativeAppLovinMAXModule.js +3 -0
  94. package/lib/module/specs/NativeAppLovinMAXModule.js.map +1 -0
  95. package/lib/typescript/src/AdView.d.ts +11 -11
  96. package/lib/typescript/src/AdView.d.ts.map +1 -1
  97. package/lib/typescript/src/AppLovinMAX.d.ts.map +1 -1
  98. package/lib/typescript/src/AppOpenAd.d.ts.map +1 -1
  99. package/lib/typescript/src/BannerAd.d.ts.map +1 -1
  100. package/lib/typescript/src/ErrorCode.d.ts.map +1 -1
  101. package/lib/typescript/src/EventEmitter.d.ts.map +1 -1
  102. package/lib/typescript/src/InterstitialAd.d.ts.map +1 -1
  103. package/lib/typescript/src/MRecAd.d.ts.map +1 -1
  104. package/lib/typescript/src/Privacy.d.ts.map +1 -1
  105. package/lib/typescript/src/RewardedAd.d.ts.map +1 -1
  106. package/lib/typescript/src/Utils.d.ts +16 -0
  107. package/lib/typescript/src/Utils.d.ts.map +1 -0
  108. package/lib/typescript/src/nativeAd/NativeAdView.d.ts.map +1 -1
  109. package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  110. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts +14 -5
  111. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  112. package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts +86 -0
  113. package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts.map +1 -0
  114. package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts +80 -0
  115. package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts.map +1 -0
  116. package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts +132 -0
  117. package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts.map +1 -0
  118. package/lib/typescript/src/types/AdInfo.d.ts +1 -1
  119. package/lib/typescript/src/types/AdInfo.d.ts.map +1 -1
  120. package/lib/typescript/src/types/AdProps.d.ts +2 -2
  121. package/lib/typescript/src/types/AdProps.d.ts.map +1 -1
  122. package/lib/typescript/src/types/NativeAd.d.ts +4 -0
  123. package/lib/typescript/src/types/NativeAd.d.ts.map +1 -1
  124. package/package.json +9 -1
  125. package/react-native-applovin-max.podspec +2 -2
  126. package/src/AdView.tsx +56 -121
  127. package/src/AppLovinMAX.ts +7 -8
  128. package/src/AppOpenAd.ts +1 -3
  129. package/src/BannerAd.ts +1 -3
  130. package/src/ErrorCode.ts +1 -3
  131. package/src/EventEmitter.ts +2 -3
  132. package/src/InterstitialAd.ts +2 -4
  133. package/src/MRecAd.ts +1 -3
  134. package/src/Privacy.ts +1 -3
  135. package/src/RewardedAd.ts +2 -4
  136. package/src/Utils.ts +26 -0
  137. package/src/nativeAd/NativeAdView.tsx +65 -65
  138. package/src/nativeAd/NativeAdViewComponents.tsx +32 -60
  139. package/src/nativeAd/NativeAdViewProvider.tsx +37 -12
  140. package/src/nativeAd/img/blank_icon.png +0 -0
  141. package/src/specs/AppLovinMAXAdViewNativeComponent.ts +96 -0
  142. package/src/specs/AppLovinMAXNativeAdViewNativeComponent.ts +89 -0
  143. package/src/specs/NativeAppLovinMAXModule.ts +208 -0
  144. package/src/types/AdInfo.ts +1 -1
  145. package/src/types/AdProps.ts +2 -2
  146. package/src/types/NativeAd.ts +5 -0
  147. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManager.java +0 -149
  148. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +0 -163
  149. package/ios/AppLovinMAXAdView.m +0 -325
  150. package/ios/AppLovinMAXNativeAdView.m +0 -432
  151. package/ios/AppLovinMAXNativeAdViewManager.m +0 -64
@@ -1,432 +0,0 @@
1
- //
2
- // AppLovinMAXNativeAdView.m
3
- // AppLovin MAX React Native Module
4
- //
5
- // Copyright © 2022 AppLovin. All rights reserved.
6
- //
7
-
8
- #import <React/RCTUIManagerUtils.h>
9
- #import <React/RCTImageView.h>
10
- #import <AppLovinSDK/AppLovinSDK.h>
11
- #import "AppLovinMAX.h"
12
- #import "AppLovinMAXNativeAdView.h"
13
-
14
- #define TITLE_LABEL_TAG 1
15
- #define MEDIA_VIEW_CONTAINER_TAG 2
16
- #define ICON_VIEW_TAG 3
17
- #define BODY_VIEW_TAG 4
18
- #define CALL_TO_ACTION_VIEW_TAG 5
19
- #define ADVERTISER_VIEW_TAG 8
20
-
21
- @interface MANativeAdLoader()
22
- - (void)registerClickableViews:(NSArray<UIView *> *)clickableViews
23
- withContainer:(UIView *)container
24
- forAd:(MAAd *)ad;
25
- - (void)handleNativeAdViewRenderedForAd:(MAAd *)ad;
26
- @end
27
-
28
- @interface AppLovinMAXNativeAdView()<MANativeAdDelegate, MAAdRevenueDelegate>
29
-
30
- @property (nonatomic, weak) RCTBridge *bridge;
31
- @property (nonatomic, strong, nullable) MANativeAdLoader *adLoader;
32
- @property (nonatomic, strong, nullable) MAAd *nativeAd;
33
- @property (nonatomic, strong) ALAtomicBoolean *isLoading; // Guard against repeated ad loads
34
- @property (nonatomic, strong) ALAtomicBoolean *isAdUnitIdSet;
35
-
36
- // JavaScript properties
37
- @property (nonatomic, copy) NSString *adUnitId;
38
- @property (nonatomic, copy, nullable) NSString *placement;
39
- @property (nonatomic, copy, nullable) NSString *customData;
40
- @property (nonatomic, copy, nullable) NSDictionary *extraParameters;
41
- @property (nonatomic, copy, nullable) NSDictionary *localExtraParameters;
42
-
43
- // Callback to `AppLovinNativeAdView.js`
44
- @property (nonatomic, copy) RCTDirectEventBlock onAdLoadedEvent;
45
- @property (nonatomic, copy) RCTDirectEventBlock onAdLoadFailedEvent;
46
- @property (nonatomic, copy) RCTDirectEventBlock onAdClickedEvent;
47
- @property (nonatomic, copy) RCTDirectEventBlock onAdRevenuePaidEvent;
48
-
49
- // TODO: Allow publisher to select which views are clickable and which isn't via prop
50
- @property (nonatomic, strong) NSMutableArray<UIView *> *clickableViews;
51
-
52
- @end
53
-
54
- @implementation AppLovinMAXNativeAdView
55
-
56
- - (instancetype)initWithBridge:(RCTBridge *)bridge
57
- {
58
- self = [super init];
59
- if ( self )
60
- {
61
- self.bridge = bridge;
62
- self.isLoading = [[ALAtomicBoolean alloc] init];
63
- self.isAdUnitIdSet = [[ALAtomicBoolean alloc] init];
64
- self.clickableViews = [NSMutableArray array];
65
- }
66
- return self;
67
- }
68
-
69
- // Lazily loaded for when Ad Unit ID is available
70
- - (nullable MANativeAdLoader *)adLoader
71
- {
72
- if ( ![self.adUnitId al_isValidString] ) return nil;
73
-
74
- if ( ![self.adUnitId isEqualToString: _adLoader.adUnitIdentifier] )
75
- {
76
- _adLoader = [[MANativeAdLoader alloc] initWithAdUnitIdentifier: self.adUnitId sdk: [AppLovinMAX shared].sdk];
77
- _adLoader.nativeAdDelegate = self;
78
- _adLoader.revenueDelegate = self;
79
- }
80
-
81
- return _adLoader;
82
- }
83
-
84
- - (void)didMoveToWindow
85
- {
86
- [super didMoveToWindow];
87
-
88
- if ( !self.window )
89
- {
90
- [self destroyCurrentAdIfNeeded];
91
- }
92
- }
93
-
94
- - (void)setAdUnitId:(NSString *)adUnitId
95
- {
96
- if ( ![adUnitId al_isValidString] ) return;
97
-
98
- _adUnitId = adUnitId;
99
-
100
- [self.isAdUnitIdSet set: YES];
101
- }
102
-
103
- // Called when Ad Unit ID is set, and via RN layer
104
- - (void)loadAd
105
- {
106
- if ( ![AppLovinMAX shared].sdk )
107
- {
108
- [[AppLovinMAX shared] logUninitializedAccessError: @"AppLovinMAXNativeAdView.loadAd"];
109
- return;
110
- }
111
-
112
- if ( [self.isLoading compareAndSet: NO update: YES] )
113
- {
114
- [[AppLovinMAX shared] log: @"Loading a native ad for Ad Unit ID: %@...", self.adUnitId];
115
-
116
- self.adLoader.placement = self.placement;
117
- self.adLoader.customData = self.customData;
118
-
119
- for ( NSString *key in self.extraParameters )
120
- {
121
- [self.adLoader setExtraParameterForKey: key value: [self.extraParameters al_stringForKey: key]];
122
- }
123
-
124
- for ( NSString *key in self.localExtraParameters )
125
- {
126
- id value = self.localExtraParameters[key];
127
- [self.adLoader setLocalExtraParameterForKey: key value: (value != [NSNull null] ? value : nil)];
128
- }
129
-
130
- [self.adLoader loadAd];
131
- }
132
- else
133
- {
134
- [[AppLovinMAX shared] log: @"Ignoring request to load native ad for Ad Unit ID %@, another ad load in progress", self.adUnitId];
135
- }
136
- }
137
-
138
- #pragma mark - Views to Replace
139
-
140
- - (void)setTitleView:(NSNumber *)tag
141
- {
142
- if ( !self.nativeAd.nativeAd.title ) return;
143
-
144
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
145
- if ( !view )
146
- {
147
- [[AppLovinMAX shared] log: @"Cannot find a title view with tag \"%@\" for %@", tag, self.adUnitId];
148
- return;
149
- }
150
-
151
- view.tag = TITLE_LABEL_TAG;
152
-
153
- [self.clickableViews addObject: view];
154
- }
155
-
156
- - (void)setAdvertiserView:(NSNumber *)tag
157
- {
158
- if ( !self.nativeAd.nativeAd.advertiser ) return;
159
-
160
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
161
- if ( !view )
162
- {
163
- [[AppLovinMAX shared] log: @"Cannot find an advertiser view with tag \"%@\" for %@", tag, self.adUnitId];
164
- return;
165
- }
166
-
167
- view.tag = ADVERTISER_VIEW_TAG;
168
-
169
- [self.clickableViews addObject: view];
170
- }
171
-
172
- - (void)setBodyView:(NSNumber *)tag
173
- {
174
- if ( !self.nativeAd.nativeAd.body ) return;
175
-
176
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
177
- if ( !view )
178
- {
179
- [[AppLovinMAX shared] log: @"Cannot find a body view with tag \"%@\" for %@", tag, self.adUnitId];
180
- return;
181
- }
182
-
183
- view.tag = BODY_VIEW_TAG;
184
-
185
- [self.clickableViews addObject: view];
186
- }
187
-
188
- - (void)setCallToActionView:(NSNumber *)tag
189
- {
190
- if ( !self.nativeAd.nativeAd.callToAction ) return;
191
-
192
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
193
- if ( !view )
194
- {
195
- [[AppLovinMAX shared] log: @"Cannot find a callToAction view with tag \"%@\" for %@", tag, self.adUnitId];
196
- return;
197
- }
198
-
199
- view.tag = CALL_TO_ACTION_VIEW_TAG;
200
-
201
- [self.clickableViews addObject: view];
202
- }
203
-
204
- - (void)setIconView:(NSNumber *)tag
205
- {
206
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
207
- if ( ![view isKindOfClass: [RCTImageView class]] )
208
- {
209
- [[AppLovinMAX shared] log: @"Cannot find an icon image view with tag \"%@\" for %@", tag, self.adUnitId];
210
- return;
211
- }
212
-
213
- view.tag = ICON_VIEW_TAG;
214
-
215
- [self.clickableViews addObject: view];
216
-
217
- MANativeAdImage *icon = self.nativeAd.nativeAd.icon;
218
- if ( icon )
219
- {
220
- // Check if "URL" was missing and therefore need to set the image data
221
- if ( !icon.URL && icon.image )
222
- {
223
- RCTImageView *iconImageView = (RCTImageView *) view;
224
- if ( [iconImageView respondsToSelector: @selector(setImage:)] )
225
- {
226
- [iconImageView performSelector: @selector(setImage:) withObject: icon.image];
227
- }
228
- else
229
- {
230
- [[AppLovinMAX shared] log: @"Unable to set native ad IconView image"];
231
- }
232
- }
233
- }
234
- else
235
- {
236
- UIView *iconView = self.nativeAd.nativeAd.iconView;
237
- if ( iconView )
238
- {
239
- [view addSubview: iconView];
240
- [iconView al_pinToSuperview];
241
- }
242
- }
243
- }
244
-
245
- - (void)setOptionsView:(NSNumber *)tag
246
- {
247
- if ( !self.nativeAd.nativeAd.optionsView ) return;
248
-
249
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
250
- if ( !view )
251
- {
252
- [[AppLovinMAX shared] log: @"Cannot find an option view with tag \"%@\" for %@", tag, self.adUnitId];
253
- return;
254
- }
255
-
256
- [view addSubview: self.nativeAd.nativeAd.optionsView];
257
- [self.nativeAd.nativeAd.optionsView al_pinToSuperview];
258
- }
259
-
260
- - (void)setMediaView:(NSNumber *)tag
261
- {
262
- if ( !self.nativeAd.nativeAd.mediaView ) return;
263
-
264
- UIView *view = [self.bridge.uiManager viewForReactTag: tag];
265
- if ( !view )
266
- {
267
- [[AppLovinMAX shared] log: @"Cannot find a media view with tag \"%@\" for %@", tag, self.adUnitId];
268
- return;
269
- }
270
-
271
- view.tag = MEDIA_VIEW_CONTAINER_TAG;
272
-
273
- [self.clickableViews addObject: view];
274
-
275
- [view addSubview: self.nativeAd.nativeAd.mediaView];
276
- [self.nativeAd.nativeAd.mediaView al_pinToSuperview];
277
- }
278
-
279
- /**
280
- * Invoked:
281
- * 1. after all the JavaScript properties are set when mounting NativeAdView
282
- * 2. after all the user's asset views are mounted, following the 1st event
283
- */
284
- - (void)didSetProps:(NSArray<NSString *> *)changedProps
285
- {
286
- if ( [self.isAdUnitIdSet compareAndSet:YES update: NO] )
287
- {
288
- [self loadAd];
289
- }
290
- else
291
- {
292
- if ( !self.adLoader ) return;
293
-
294
- [self.adLoader registerClickableViews: self.clickableViews withContainer: self forAd: self.nativeAd];
295
- [self.adLoader handleNativeAdViewRenderedForAd: self.nativeAd];
296
- }
297
- }
298
-
299
- #pragma mark - Ad Loader Delegate
300
-
301
- - (void)didLoadNativeAd:(nullable MANativeAdView *)nativeAdView forAd:(MAAd *)ad
302
- {
303
- [[AppLovinMAX shared] log: @"Native ad loaded: %@", ad];
304
-
305
- // Log a warning if it is a template native ad returned - as our plugin will be responsible for re-rendering the native ad's assets
306
- if ( nativeAdView )
307
- {
308
- [self.isLoading set: NO];
309
-
310
- [[AppLovinMAX shared] log: @"Native ad is of template type, failing ad load..."];
311
- self.onAdLoadFailedEvent([[AppLovinMAX shared] adLoadFailedInfoForAd: self.adUnitId withError: nil]);
312
-
313
- return;
314
- }
315
-
316
- [self destroyCurrentAdIfNeeded];
317
-
318
- self.nativeAd = ad;
319
-
320
- // Notify `AppLovinNativeAdView.js`
321
- [self sendAdLoadedReactNativeEventForAd: ad.nativeAd];
322
-
323
- [self.isLoading set: NO];
324
- }
325
-
326
- - (void)sendAdLoadedReactNativeEventForAd:(MANativeAd *)ad
327
- {
328
- // 1. AdInfo for publisher to be notified via `onAdLoaded`
329
-
330
- NSMutableDictionary<NSString *, id> *nativeAdInfo = [NSMutableDictionary dictionaryWithCapacity: 5];
331
- nativeAdInfo[@"title"] = ad.title;
332
- nativeAdInfo[@"advertiser"] = ad.advertiser;
333
- nativeAdInfo[@"body"] = ad.body;
334
- nativeAdInfo[@"callToAction"] = ad.callToAction;
335
- nativeAdInfo[@"starRating"] = ad.starRating;
336
-
337
- // The aspect ratio can be 0.0f when it is not provided by the network.
338
- if ( ad.mediaContentAspectRatio > 0 )
339
- {
340
- nativeAdInfo[@"mediaContentAspectRatio"] = @(ad.mediaContentAspectRatio);
341
- }
342
-
343
- nativeAdInfo[@"isIconImageAvailable"] = @(ad.icon != nil || ad.iconView != nil);
344
- nativeAdInfo[@"isOptionsViewAvailable"] = @(ad.optionsView != nil);
345
- nativeAdInfo[@"isMediaViewAvailable"] = @(ad.mediaView != nil);
346
-
347
- NSMutableDictionary *adInfo = [[AppLovinMAX shared] adInfoForAd: self.nativeAd].mutableCopy;
348
- adInfo[@"nativeAd"] = nativeAdInfo;
349
-
350
- // 2. NativeAd for `AppLovinNativeAdView.js` to render the views
351
-
352
- NSMutableDictionary<NSString *, id> *jsNativeAd = [NSMutableDictionary dictionaryWithCapacity: 5];
353
- jsNativeAd[@"title"] = ad.title;
354
- jsNativeAd[@"advertiser"] = ad.advertiser;
355
- jsNativeAd[@"body"] = ad.body;
356
- jsNativeAd[@"callToAction"] = ad.callToAction;
357
- jsNativeAd[@"starRating"] = ad.starRating;
358
-
359
- if ( ad.icon )
360
- {
361
- if ( ad.icon.URL )
362
- {
363
- jsNativeAd[@"url"] = ad.icon.URL.absoluteString;
364
- }
365
- else if ( ad.icon.image )
366
- {
367
- jsNativeAd[@"image"] = @(YES);
368
- }
369
- }
370
- else if ( ad.iconView )
371
- {
372
- jsNativeAd[@"image"] = @(YES);
373
- }
374
-
375
- jsNativeAd[@"isOptionsViewAvailable"] = ad.optionsView ? @(YES) : @(NO);
376
- jsNativeAd[@"isMediaViewAvailable"] = ad.mediaView ? @(YES) : @(NO);
377
-
378
- NSMutableDictionary<NSString *, id> *arg = [NSMutableDictionary dictionaryWithCapacity: 2];
379
- arg[@"adInfo"] = adInfo;
380
- arg[@"nativeAd"] = jsNativeAd;
381
-
382
- // Send to `AppLovinNativeAdView.js`
383
- self.onAdLoadedEvent(arg);
384
- }
385
-
386
- - (void)didFailToLoadNativeAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error
387
- {
388
- [self.isLoading set: NO];
389
-
390
- [[AppLovinMAX shared] log: @"Failed to load native ad for Ad Unit ID %@ with error: %@", self.adUnitId, error];
391
-
392
- // Notify publisher
393
- self.onAdLoadFailedEvent([[AppLovinMAX shared] adLoadFailedInfoForAd: adUnitIdentifier withError: error]);
394
- }
395
-
396
- - (void)didClickNativeAd:(MAAd *)ad
397
- {
398
- self.onAdClickedEvent([[AppLovinMAX shared] adInfoForAd: ad]);
399
- }
400
-
401
- #pragma mark - Ad Revenue Delegate
402
-
403
- - (void)didPayRevenueForAd:(MAAd *)ad
404
- {
405
- self.onAdRevenuePaidEvent([[AppLovinMAX shared] adInfoForAd: ad]);
406
- }
407
-
408
- - (void)destroyCurrentAdIfNeeded
409
- {
410
- if ( self.nativeAd )
411
- {
412
- if ( self.nativeAd.nativeAd )
413
- {
414
- if ( self.nativeAd.nativeAd.mediaView )
415
- {
416
- [self.nativeAd.nativeAd.mediaView removeFromSuperview];
417
- }
418
- if ( self.nativeAd.nativeAd.optionsView )
419
- {
420
- [self.nativeAd.nativeAd.optionsView removeFromSuperview];
421
- }
422
- }
423
-
424
- [self.adLoader destroyAd: self.nativeAd];
425
-
426
- self.nativeAd = nil;
427
- }
428
-
429
- [self.clickableViews removeAllObjects];
430
- }
431
-
432
- @end
@@ -1,64 +0,0 @@
1
- //
2
- // AppLovinMAXNativeAdViewManager.m
3
- // AppLovin MAX React Native Module
4
- //
5
- // Copyright © 2022 AppLovin. All rights reserved.
6
- //
7
-
8
- #import "AppLovinMAX.h"
9
- #import "AppLovinMAXNativeAdViewManager.h"
10
- #import "AppLovinMAXNativeAdView.h"
11
-
12
- @implementation AppLovinMAXNativeAdViewManager
13
-
14
- RCT_EXPORT_MODULE(AppLovinMAXNativeAdView)
15
-
16
- // Props
17
- RCT_EXPORT_VIEW_PROPERTY(adUnitId, NSString)
18
- RCT_EXPORT_VIEW_PROPERTY(placement, NSString)
19
- RCT_EXPORT_VIEW_PROPERTY(customData, NSString)
20
- RCT_EXPORT_VIEW_PROPERTY(extraParameters, NSDictionary)
21
- RCT_EXPORT_VIEW_PROPERTY(localExtraParameters, NSDictionary)
22
-
23
- // Asset views
24
- RCT_EXPORT_VIEW_PROPERTY(titleView, NSNumber)
25
- RCT_EXPORT_VIEW_PROPERTY(advertiserView, NSNumber)
26
- RCT_EXPORT_VIEW_PROPERTY(bodyView, NSNumber)
27
- RCT_EXPORT_VIEW_PROPERTY(callToActionView, NSNumber)
28
- RCT_EXPORT_VIEW_PROPERTY(iconView, NSNumber)
29
- RCT_EXPORT_VIEW_PROPERTY(optionsView, NSNumber)
30
- RCT_EXPORT_VIEW_PROPERTY(mediaView, NSNumber)
31
-
32
- // Callback
33
- RCT_EXPORT_VIEW_PROPERTY(onAdLoadedEvent, RCTDirectEventBlock)
34
- RCT_EXPORT_VIEW_PROPERTY(onAdLoadFailedEvent, RCTDirectEventBlock)
35
- RCT_EXPORT_VIEW_PROPERTY(onAdClickedEvent, RCTDirectEventBlock)
36
- RCT_EXPORT_VIEW_PROPERTY(onAdRevenuePaidEvent, RCTDirectEventBlock)
37
-
38
- + (BOOL)requiresMainQueueSetup
39
- {
40
- return YES;
41
- }
42
-
43
- - (UIView *)view
44
- {
45
- return [[AppLovinMAXNativeAdView alloc] initWithBridge: self.bridge];
46
- }
47
-
48
- RCT_EXPORT_METHOD(loadAd:(nonnull NSNumber *)viewTag)
49
- {
50
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
51
-
52
- UIView *view = viewRegistry[viewTag];
53
- if ( ![view isKindOfClass: [AppLovinMAXNativeAdView class]] )
54
- {
55
- [[AppLovinMAX shared] log: @"Cannot find AppLovinMAXNativeAdView with tag %@", viewTag];
56
- return;
57
- }
58
-
59
- AppLovinMAXNativeAdView *nativeAdView = (AppLovinMAXNativeAdView *) view;
60
- [nativeAdView loadAd];
61
- }];
62
- }
63
-
64
- @end