react-native-applovin-max 6.4.2 → 7.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 (41) hide show
  1. package/README.md +1 -1
  2. package/android/build.gradle +46 -100
  3. package/android/gradle.properties +4 -4
  4. package/android/src/main/AndroidManifest.xml +2 -2
  5. package/android/src/main/AndroidManifestNew.xml +2 -0
  6. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdView.java +123 -163
  7. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManager.java +24 -17
  8. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewUiComponent.java +239 -0
  9. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXModule.java +297 -336
  10. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdView.java +13 -12
  11. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +11 -14
  12. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXPackage.java +3 -3
  13. package/ios/AppLovinMAX.h +1 -1
  14. package/ios/AppLovinMAX.m +62 -12
  15. package/ios/AppLovinMAXAdView.h +12 -0
  16. package/ios/AppLovinMAXAdView.m +120 -142
  17. package/ios/AppLovinMAXAdViewUIComponent.h +27 -0
  18. package/ios/AppLovinMAXAdViewUIComponent.m +199 -0
  19. package/package.json +94 -21
  20. package/react-native-applovin-max.podspec +30 -6
  21. package/src/AdView.tsx +83 -26
  22. package/src/AppLovinMAX.ts +1 -1
  23. package/src/InterstitialAd.ts +1 -3
  24. package/src/MRecAd.ts +2 -8
  25. package/src/TargetingData.ts +2 -15
  26. package/src/index.ts +9 -10
  27. package/src/nativeAd/NativeAdView.tsx +33 -49
  28. package/src/nativeAd/NativeAdViewComponents.tsx +22 -31
  29. package/src/types/AdViewProps.ts +29 -1
  30. package/android/.project +0 -17
  31. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  32. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  33. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  34. package/android/gradlew +0 -172
  35. package/android/gradlew.bat +0 -84
  36. package/ios/AppLovinMAX.xcodeproj/project.pbxproj +0 -368
  37. package/ios/AppLovinMAX.xcodeproj/xcshareddata/xcschemes/AppLovinMAX.xcscheme +0 -67
  38. package/ios/AppLovinMAX.xcworkspace/contents.xcworkspacedata +0 -10
  39. package/ios/AppLovinMAX.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  40. package/ios/Podfile +0 -40
  41. package/ios/Podfile.lock +0 -373
@@ -1,6 +1,5 @@
1
1
  package com.applovin.reactnative;
2
2
 
3
- import com.facebook.react.bridge.ReactApplicationContext;
4
3
  import com.facebook.react.bridge.ReadableArray;
5
4
  import com.facebook.react.bridge.ReadableMap;
6
5
  import com.facebook.react.common.MapBuilder;
@@ -17,12 +16,13 @@ import androidx.annotation.Nullable;
17
16
  * Created by Thomas So on September 26 2020
18
17
  */
19
18
  class AppLovinMAXAdViewManager
20
- extends SimpleViewManager<AppLovinMAXAdView>
19
+ extends SimpleViewManager<AppLovinMAXAdView>
21
20
  {
22
21
  private static final int COMMAND_LOAD_AD = 1;
23
22
 
24
- public AppLovinMAXAdViewManager(final ReactApplicationContext reactApplicationContext) { }
23
+ public AppLovinMAXAdViewManager() { }
25
24
 
25
+ @NonNull
26
26
  @Override
27
27
  public String getName()
28
28
  {
@@ -35,14 +35,14 @@ class AppLovinMAXAdViewManager
35
35
  {
36
36
  // mapping Android events to JavaScript events
37
37
  return MapBuilder.<String, Object>builder()
38
- .put( "onAdLoadedEvent", MapBuilder.of( "registrationName", "onAdLoadedEvent" ) )
39
- .put( "onAdLoadFailedEvent", MapBuilder.of( "registrationName", "onAdLoadFailedEvent" ) )
40
- .put( "onAdDisplayFailedEvent", MapBuilder.of( "registrationName", "onAdDisplayFailedEvent" ) )
41
- .put( "onAdClickedEvent", MapBuilder.of( "registrationName", "onAdClickedEvent" ) )
42
- .put( "onAdExpandedEvent", MapBuilder.of( "registrationName", "onAdExpandedEvent" ) )
43
- .put( "onAdCollapsedEvent", MapBuilder.of( "registrationName", "onAdCollapsedEvent" ) )
44
- .put( "onAdRevenuePaidEvent", MapBuilder.of( "registrationName", "onAdRevenuePaidEvent" ) )
45
- .build();
38
+ .put( "onAdLoadedEvent", MapBuilder.of( "registrationName", "onAdLoadedEvent" ) )
39
+ .put( "onAdLoadFailedEvent", MapBuilder.of( "registrationName", "onAdLoadFailedEvent" ) )
40
+ .put( "onAdDisplayFailedEvent", MapBuilder.of( "registrationName", "onAdDisplayFailedEvent" ) )
41
+ .put( "onAdClickedEvent", MapBuilder.of( "registrationName", "onAdClickedEvent" ) )
42
+ .put( "onAdExpandedEvent", MapBuilder.of( "registrationName", "onAdExpandedEvent" ) )
43
+ .put( "onAdCollapsedEvent", MapBuilder.of( "registrationName", "onAdCollapsedEvent" ) )
44
+ .put( "onAdRevenuePaidEvent", MapBuilder.of( "registrationName", "onAdRevenuePaidEvent" ) )
45
+ .build();
46
46
  }
47
47
 
48
48
  @Nullable
@@ -50,23 +50,22 @@ class AppLovinMAXAdViewManager
50
50
  public Map<String, Integer> getCommandsMap()
51
51
  {
52
52
  return MapBuilder.of(
53
- "loadAd", COMMAND_LOAD_AD
53
+ "loadAd", COMMAND_LOAD_AD
54
54
  );
55
55
  }
56
56
 
57
57
  @Override
58
58
  public void receiveCommand(@NonNull final AppLovinMAXAdView view, final int commandId, @Nullable final ReadableArray args)
59
59
  {
60
- switch ( commandId )
60
+ if ( commandId == COMMAND_LOAD_AD )
61
61
  {
62
- case COMMAND_LOAD_AD:
63
- view.loadAd();
64
- break;
62
+ view.loadAd();
65
63
  }
66
64
  }
67
65
 
66
+ @NonNull
68
67
  @Override
69
- protected AppLovinMAXAdView createViewInstance(final ThemedReactContext reactContext)
68
+ protected AppLovinMAXAdView createViewInstance(@NonNull final ThemedReactContext reactContext)
70
69
  {
71
70
  // NOTE: Do not set frame or backgroundColor as RN will overwrite the values set by your custom class in order to match your JavaScript component's layout props - hence wrapper
72
71
  return new AppLovinMAXAdView( reactContext );
@@ -126,6 +125,14 @@ class AppLovinMAXAdViewManager
126
125
  view.setLocalExtraParameters( value );
127
126
  }
128
127
 
128
+ @Override
129
+ public void onAfterUpdateTransaction(@NonNull final AppLovinMAXAdView view)
130
+ {
131
+ super.onAfterUpdateTransaction( view );
132
+
133
+ view.onSetProps();
134
+ }
135
+
129
136
  @Override
130
137
  public void onDropViewInstance(AppLovinMAXAdView view)
131
138
  {
@@ -0,0 +1,239 @@
1
+ package com.applovin.reactnative;
2
+
3
+ import android.view.View;
4
+
5
+ import com.applovin.mediation.MaxAd;
6
+ import com.applovin.mediation.MaxAdFormat;
7
+ import com.applovin.mediation.MaxAdListener;
8
+ import com.applovin.mediation.MaxAdRevenueListener;
9
+ import com.applovin.mediation.MaxAdViewAdListener;
10
+ import com.applovin.mediation.MaxError;
11
+ import com.applovin.mediation.ads.MaxAdView;
12
+ import com.facebook.react.bridge.ReactContext;
13
+ import com.facebook.react.bridge.WritableMap;
14
+ import com.facebook.react.uimanager.events.RCTEventEmitter;
15
+
16
+ import java.util.Map;
17
+
18
+ import androidx.annotation.NonNull;
19
+ import androidx.annotation.Nullable;
20
+
21
+ class AppLovinMAXAdViewUiComponent
22
+ implements MaxAdListener, MaxAdViewAdListener, MaxAdRevenueListener
23
+ {
24
+ private final ReactContext reactContext;
25
+ private final MaxAdView adView;
26
+
27
+ @Nullable
28
+ private AppLovinMAXAdView containerView;
29
+
30
+ public AppLovinMAXAdViewUiComponent(final String adUnitId, final MaxAdFormat adFormat, final ReactContext context)
31
+ {
32
+ reactContext = context;
33
+
34
+ adView = new MaxAdView( adUnitId, adFormat, AppLovinMAXModule.getInstance().getSdk(), context );
35
+ adView.setListener( this );
36
+ adView.setRevenueListener( this );
37
+
38
+ adView.setExtraParameter( "adaptive_banner", "true" );
39
+
40
+ // Set this extra parameter to work around a SDK bug that ignores calls to stopAutoRefresh()
41
+ adView.setExtraParameter( "allow_pause_auto_refresh_immediately", "true" );
42
+ }
43
+
44
+ public MaxAdView getAdView()
45
+ {
46
+ return adView;
47
+ }
48
+
49
+ public void setPlacement(@Nullable final String value)
50
+ {
51
+ adView.setPlacement( value );
52
+ }
53
+
54
+ public void setCustomData(@Nullable final String value)
55
+ {
56
+ adView.setCustomData( value );
57
+ }
58
+
59
+ public void setAdaptiveBannerEnabled(final boolean enabled)
60
+ {
61
+ adView.setExtraParameter( "adaptive_banner", Boolean.toString( enabled ) );
62
+ }
63
+
64
+ public void setAutoRefresh(final boolean enabled)
65
+ {
66
+ if ( enabled )
67
+ {
68
+ adView.startAutoRefresh();
69
+ }
70
+ else
71
+ {
72
+ adView.stopAutoRefresh();
73
+ }
74
+ }
75
+
76
+ public void setExtraParameters(@Nullable final Map<String, Object> extraParameters)
77
+ {
78
+ if ( extraParameters == null ) return;
79
+
80
+ for ( Map.Entry<String, Object> entry : extraParameters.entrySet() )
81
+ {
82
+ adView.setExtraParameter( entry.getKey(), (String) entry.getValue() );
83
+ }
84
+ }
85
+
86
+ public void setLocalExtraParameters(@Nullable final Map<String, Object> localExtraParameters)
87
+ {
88
+ if ( localExtraParameters == null ) return;
89
+
90
+ for ( Map.Entry<String, Object> entry : localExtraParameters.entrySet() )
91
+ {
92
+ adView.setLocalExtraParameter( entry.getKey(), entry.getValue() );
93
+ }
94
+ }
95
+
96
+ public boolean hasContainerView()
97
+ {
98
+ return containerView != null;
99
+ }
100
+
101
+ public void attachAdView(AppLovinMAXAdView view)
102
+ {
103
+ containerView = view;
104
+ containerView.addView( adView );
105
+ }
106
+
107
+ public void detachAdView()
108
+ {
109
+ if ( containerView != null )
110
+ {
111
+ containerView.removeView( adView );
112
+ containerView = null;
113
+ }
114
+ }
115
+
116
+ public void loadAd()
117
+ {
118
+ adView.loadAd();
119
+ }
120
+
121
+ public void destroy()
122
+ {
123
+ detachAdView();
124
+
125
+ adView.setListener( null );
126
+ adView.setRevenueListener( null );
127
+ adView.destroy();
128
+ }
129
+
130
+ public void measureAndLayout(int x, int y, int width, int height)
131
+ {
132
+ // https://stackoverflow.com/a/39838774/5477988
133
+ // This is required to ensure ad refreshes render correctly in RN Android due to known issue where `getWidth()` and `getHeight()` return 0 on attach
134
+ adView.measure(
135
+ View.MeasureSpec.makeMeasureSpec( width, View.MeasureSpec.EXACTLY ),
136
+ View.MeasureSpec.makeMeasureSpec( height, View.MeasureSpec.EXACTLY )
137
+ );
138
+
139
+ adView.layout( x, y, width, height );
140
+ }
141
+
142
+ @Override
143
+ public void onAdLoaded(@NonNull final MaxAd ad)
144
+ {
145
+ WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
146
+
147
+ AppLovinMAXModule.getInstance().sendReactNativeEvent( "OnNativeUIComponentAdviewAdLoadedEvent", adInfo );
148
+
149
+ if ( containerView != null )
150
+ {
151
+ sendReactNativeCallbackEvent( "onAdLoadedEvent", adInfo );
152
+ }
153
+ else
154
+ {
155
+ setAutoRefresh( false );
156
+ }
157
+ }
158
+
159
+ @Override
160
+ public void onAdLoadFailed(@NonNull final String adUnitId, @NonNull final MaxError error)
161
+ {
162
+ WritableMap adLoadFailedInfo = AppLovinMAXModule.getInstance().getAdLoadFailedInfo( adUnitId, error );
163
+
164
+ AppLovinMAXModule.getInstance().sendReactNativeEvent( "OnNativeUIComponentAdviewAdLoadFailedEvent", adLoadFailedInfo );
165
+
166
+ if ( containerView != null )
167
+ {
168
+ sendReactNativeCallbackEvent( "onAdLoadFailedEvent", adLoadFailedInfo );
169
+ }
170
+ }
171
+
172
+ @Override
173
+ public void onAdDisplayFailed(@NonNull final MaxAd ad, @NonNull final MaxError error)
174
+ {
175
+ if ( containerView != null )
176
+ {
177
+ WritableMap adDisplayFailedInfo = AppLovinMAXModule.getInstance().getAdDisplayFailedInfo( ad, error );
178
+ sendReactNativeCallbackEvent( "onAdDisplayFailedEvent", adDisplayFailedInfo );
179
+ }
180
+ }
181
+
182
+ @Override
183
+ public void onAdClicked(@NonNull final MaxAd ad)
184
+ {
185
+ if ( containerView != null )
186
+ {
187
+ WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
188
+ sendReactNativeCallbackEvent( "onAdClickedEvent", adInfo );
189
+ }
190
+ }
191
+
192
+ @Override
193
+ public void onAdExpanded(@NonNull final MaxAd ad)
194
+ {
195
+ if ( containerView != null )
196
+ {
197
+ WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
198
+ sendReactNativeCallbackEvent( "onAdExpandedEvent", adInfo );
199
+ }
200
+ }
201
+
202
+ @Override
203
+ public void onAdCollapsed(@NonNull final MaxAd ad)
204
+ {
205
+ if ( containerView != null )
206
+ {
207
+ WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
208
+ sendReactNativeCallbackEvent( "onAdCollapsedEvent", adInfo );
209
+ }
210
+ }
211
+
212
+ @Override
213
+ public void onAdRevenuePaid(@NonNull final MaxAd ad)
214
+ {
215
+ if ( containerView != null )
216
+ {
217
+ WritableMap adRevenueInfo = AppLovinMAXModule.getInstance().getAdRevenueInfo( ad );
218
+ sendReactNativeCallbackEvent( "onAdRevenuePaidEvent", adRevenueInfo );
219
+ }
220
+ }
221
+
222
+ /// Deprecated Callbacks
223
+
224
+ @Override
225
+ public void onAdDisplayed(@NonNull final MaxAd ad) { }
226
+
227
+ @Override
228
+ public void onAdHidden(@NonNull final MaxAd ad) { }
229
+
230
+ /// Utilities
231
+
232
+ private void sendReactNativeCallbackEvent(final String name, @Nullable final WritableMap params)
233
+ {
234
+ if ( containerView != null )
235
+ {
236
+ reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( containerView.getId(), name, params );
237
+ }
238
+ }
239
+ }