react-native-applovin-max 8.2.0 → 9.1.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.
- package/android/build.gradle +14 -3
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdView.java +34 -27
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManagerImpl.java +110 -0
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewUiComponent.java +15 -13
- package/android/src/main/java/com/applovin/reactnative/{AppLovinMAXModule.java → AppLovinMAXModuleImpl.java} +108 -168
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdView.java +84 -56
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManagerImpl.java +101 -0
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXPackage.java +44 -11
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXUtils.java +56 -0
- package/android/src/newarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +151 -0
- package/android/src/newarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
- package/android/src/newarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +130 -0
- package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXAdViewManager.java +128 -0
- package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXModule.java +453 -0
- package/android/src/oldarch/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +93 -0
- package/ios/AppLovinMAX.h +8 -3
- package/ios/{AppLovinMAX.m → AppLovinMAX.mm} +67 -53
- package/ios/AppLovinMAXAdView.h +7 -2
- package/ios/AppLovinMAXAdView.mm +747 -0
- package/ios/{AppLovinMAXAdViewManager.m → AppLovinMAXAdViewManager.mm} +3 -2
- package/ios/{AppLovinMAXAdViewUIComponent.m → AppLovinMAXAdViewUIComponent.mm} +2 -1
- package/ios/AppLovinMAXNativeAdView.h +15 -4
- package/ios/AppLovinMAXNativeAdView.mm +745 -0
- package/ios/AppLovinMAXNativeAdViewManager.mm +116 -0
- package/lib/commonjs/AdView.js +102 -142
- package/lib/commonjs/AdView.js.map +1 -1
- package/lib/commonjs/AppLovinMAX.js +49 -34
- package/lib/commonjs/AppLovinMAX.js.map +1 -1
- package/lib/commonjs/AppOpenAd.js +8 -10
- package/lib/commonjs/AppOpenAd.js.map +1 -1
- package/lib/commonjs/BannerAd.js +19 -21
- package/lib/commonjs/BannerAd.js.map +1 -1
- package/lib/commonjs/ErrorCode.js +27 -36
- package/lib/commonjs/ErrorCode.js.map +1 -1
- package/lib/commonjs/EventEmitter.js +24 -5
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/InterstitialAd.js +8 -10
- package/lib/commonjs/InterstitialAd.js.map +1 -1
- package/lib/commonjs/MRecAd.js +14 -16
- package/lib/commonjs/MRecAd.js.map +1 -1
- package/lib/commonjs/Privacy.js +3 -5
- package/lib/commonjs/Privacy.js.map +1 -1
- package/lib/commonjs/RewardedAd.js +8 -10
- package/lib/commonjs/RewardedAd.js.map +1 -1
- package/lib/commonjs/Utils.js +43 -0
- package/lib/commonjs/Utils.js.map +1 -0
- package/lib/commonjs/nativeAd/NativeAdView.js +84 -50
- package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js +129 -82
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js +67 -8
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/commonjs/nativeAd/img/blank_icon.png +0 -0
- package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js +41 -0
- package/lib/commonjs/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js +37 -0
- package/lib/commonjs/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/NativeAppLovinMAXModule.js +16 -0
- package/lib/commonjs/specs/NativeAppLovinMAXModule.js.map +1 -0
- package/lib/commonjs/types/AdInfo.js +13 -16
- package/lib/commonjs/types/AdInfo.js.map +1 -1
- package/lib/module/AdView.js +98 -139
- package/lib/module/AdView.js.map +1 -1
- package/lib/module/AppLovinMAX.js +47 -32
- package/lib/module/AppLovinMAX.js.map +1 -1
- package/lib/module/AppOpenAd.js +1 -4
- package/lib/module/AppOpenAd.js.map +1 -1
- package/lib/module/BannerAd.js +1 -4
- package/lib/module/BannerAd.js.map +1 -1
- package/lib/module/ErrorCode.js +25 -35
- package/lib/module/ErrorCode.js.map +1 -1
- package/lib/module/EventEmitter.js +24 -5
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/InterstitialAd.js +2 -5
- package/lib/module/InterstitialAd.js.map +1 -1
- package/lib/module/MRecAd.js +1 -4
- package/lib/module/MRecAd.js.map +1 -1
- package/lib/module/Privacy.js +1 -4
- package/lib/module/Privacy.js.map +1 -1
- package/lib/module/RewardedAd.js +2 -5
- package/lib/module/RewardedAd.js.map +1 -1
- package/lib/module/Utils.js +35 -0
- package/lib/module/Utils.js.map +1 -0
- package/lib/module/nativeAd/NativeAdView.js +83 -47
- package/lib/module/nativeAd/NativeAdView.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewComponents.js +134 -83
- package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewProvider.js +69 -9
- package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/module/nativeAd/img/blank_icon.png +0 -0
- package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js +35 -0
- package/lib/module/specs/AppLovinMAXAdViewNativeComponent.js.map +1 -0
- package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js +31 -0
- package/lib/module/specs/AppLovinMAXNativeAdViewNativeComponent.js.map +1 -0
- package/lib/module/specs/NativeAppLovinMAXModule.js +12 -0
- package/lib/module/specs/NativeAppLovinMAXModule.js.map +1 -0
- package/lib/module/types/AdInfo.js +13 -16
- package/lib/module/types/AdInfo.js.map +1 -1
- package/lib/typescript/src/AdView.d.ts +38 -32
- package/lib/typescript/src/AdView.d.ts.map +1 -1
- package/lib/typescript/src/AppLovinMAX.d.ts +22 -21
- package/lib/typescript/src/AppLovinMAX.d.ts.map +1 -1
- package/lib/typescript/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/src/BannerAd.d.ts.map +1 -1
- package/lib/typescript/src/ErrorCode.d.ts +24 -31
- package/lib/typescript/src/ErrorCode.d.ts.map +1 -1
- package/lib/typescript/src/EventEmitter.d.ts +16 -0
- package/lib/typescript/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/src/MRecAd.d.ts.map +1 -1
- package/lib/typescript/src/Privacy.d.ts.map +1 -1
- package/lib/typescript/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/src/Utils.d.ts +31 -0
- package/lib/typescript/src/Utils.d.ts.map +1 -0
- package/lib/typescript/src/nativeAd/NativeAdView.d.ts +15 -7
- package/lib/typescript/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts +65 -1
- package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts +31 -5
- package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts +130 -0
- package/lib/typescript/src/specs/AppLovinMAXAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts +131 -0
- package/lib/typescript/src/specs/AppLovinMAXNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts +142 -0
- package/lib/typescript/src/specs/NativeAppLovinMAXModule.d.ts.map +1 -0
- package/lib/typescript/src/types/AdEvent.d.ts +10 -4
- package/lib/typescript/src/types/AdEvent.d.ts.map +1 -1
- package/lib/typescript/src/types/AdInfo.d.ts +79 -86
- package/lib/typescript/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/src/types/AdProps.d.ts +16 -17
- package/lib/typescript/src/types/AdProps.d.ts.map +1 -1
- package/lib/typescript/src/types/AdViewProps.d.ts +28 -29
- package/lib/typescript/src/types/AdViewProps.d.ts.map +1 -1
- package/lib/typescript/src/types/AppLovinMAX.d.ts +50 -53
- package/lib/typescript/src/types/AppLovinMAX.d.ts.map +1 -1
- package/lib/typescript/src/types/BannerAd.d.ts +22 -17
- package/lib/typescript/src/types/BannerAd.d.ts.map +1 -1
- package/lib/typescript/src/types/CMPError.d.ts +7 -4
- package/lib/typescript/src/types/CMPError.d.ts.map +1 -1
- package/lib/typescript/src/types/Configuration.d.ts +12 -14
- package/lib/typescript/src/types/Configuration.d.ts.map +1 -1
- package/lib/typescript/src/types/FullscreenAd.d.ts +39 -46
- package/lib/typescript/src/types/FullscreenAd.d.ts.map +1 -1
- package/lib/typescript/src/types/MRecAd.d.ts +7 -3
- package/lib/typescript/src/types/MRecAd.d.ts.map +1 -1
- package/lib/typescript/src/types/NativeAd.d.ts +15 -10
- package/lib/typescript/src/types/NativeAd.d.ts.map +1 -1
- package/lib/typescript/src/types/NativeAdViewProps.d.ts +4 -3
- package/lib/typescript/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/lib/typescript/src/types/Privacy.d.ts +13 -6
- package/lib/typescript/src/types/Privacy.d.ts.map +1 -1
- package/lib/typescript/src/types/RewardedAd.d.ts +7 -5
- package/lib/typescript/src/types/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/src/types/ViewAd.d.ts +46 -50
- package/lib/typescript/src/types/ViewAd.d.ts.map +1 -1
- package/package.json +9 -1
- package/react-native-applovin-max.podspec +3 -3
- package/src/AdView.tsx +100 -183
- package/src/AppLovinMAX.ts +42 -33
- package/src/AppOpenAd.ts +1 -3
- package/src/BannerAd.ts +1 -3
- package/src/ErrorCode.ts +25 -34
- package/src/EventEmitter.ts +22 -5
- package/src/InterstitialAd.ts +2 -4
- package/src/MRecAd.ts +1 -3
- package/src/Privacy.ts +1 -3
- package/src/RewardedAd.ts +2 -4
- package/src/Utils.ts +45 -0
- package/src/nativeAd/NativeAdView.tsx +83 -73
- package/src/nativeAd/NativeAdViewComponents.tsx +120 -89
- package/src/nativeAd/NativeAdViewProvider.tsx +60 -12
- package/src/nativeAd/img/blank_icon.png +0 -0
- package/src/specs/AppLovinMAXAdViewNativeComponent.ts +157 -0
- package/src/specs/AppLovinMAXNativeAdViewNativeComponent.ts +153 -0
- package/src/specs/NativeAppLovinMAXModule.ts +228 -0
- package/src/types/AdEvent.ts +10 -4
- package/src/types/AdInfo.ts +79 -86
- package/src/types/AdProps.ts +16 -17
- package/src/types/AdViewProps.ts +28 -29
- package/src/types/AppLovinMAX.ts +50 -53
- package/src/types/BannerAd.ts +22 -17
- package/src/types/CMPError.ts +7 -4
- package/src/types/Configuration.ts +12 -14
- package/src/types/FullscreenAd.ts +39 -46
- package/src/types/MRecAd.ts +7 -3
- package/src/types/NativeAd.ts +16 -10
- package/src/types/NativeAdViewProps.ts +4 -3
- package/src/types/Privacy.ts +13 -6
- package/src/types/RewardedAd.ts +7 -5
- package/src/types/ViewAd.ts +46 -50
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManager.java +0 -149
- package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +0 -163
- package/ios/AppLovinMAXAdView.m +0 -325
- package/ios/AppLovinMAXNativeAdView.m +0 -432
- package/ios/AppLovinMAXNativeAdViewManager.m +0 -64
|
@@ -19,8 +19,9 @@ import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
|
|
|
19
19
|
import com.applovin.mediation.nativeAds.MaxNativeAdView;
|
|
20
20
|
import com.facebook.react.bridge.Arguments;
|
|
21
21
|
import com.facebook.react.bridge.ReactContext;
|
|
22
|
-
import com.facebook.react.bridge.
|
|
22
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
23
23
|
import com.facebook.react.bridge.WritableMap;
|
|
24
|
+
import com.facebook.react.uimanager.UIManagerHelper;
|
|
24
25
|
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
25
26
|
import com.facebook.react.views.view.ReactViewGroup;
|
|
26
27
|
|
|
@@ -44,6 +45,7 @@ public class AppLovinMAXNativeAdView
|
|
|
44
45
|
private static final int ADVERTISER_VIEW_TAG = 8;
|
|
45
46
|
|
|
46
47
|
private final ReactContext reactContext;
|
|
48
|
+
private final int surfaceId;
|
|
47
49
|
@Nullable
|
|
48
50
|
private MaxNativeAdLoader adLoader;
|
|
49
51
|
@Nullable
|
|
@@ -76,6 +78,7 @@ public class AppLovinMAXNativeAdView
|
|
|
76
78
|
{
|
|
77
79
|
super( context );
|
|
78
80
|
reactContext = (ReactContext) context;
|
|
81
|
+
surfaceId = UIManagerHelper.getSurfaceId( context );
|
|
79
82
|
}
|
|
80
83
|
|
|
81
84
|
public void destroy()
|
|
@@ -108,37 +111,44 @@ public class AppLovinMAXNativeAdView
|
|
|
108
111
|
customData = value;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
public void setExtraParameters(@Nullable final
|
|
114
|
+
public void setExtraParameters(@Nullable final ReadableArray extraParameters)
|
|
112
115
|
{
|
|
113
|
-
|
|
114
|
-
{
|
|
115
|
-
extraParameters = readableMap.toHashMap();
|
|
116
|
-
}
|
|
116
|
+
this.extraParameters = AppLovinMAXUtils.convertReadbleArrayToHashMap( extraParameters );
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
public void setLocalExtraParameters(@Nullable final
|
|
119
|
+
public void setLocalExtraParameters(@Nullable final ReadableArray localExtraParameters)
|
|
120
120
|
{
|
|
121
|
-
|
|
121
|
+
Map<String, Object> localExtraParametersMap = AppLovinMAXUtils.convertReadbleArrayToHashMap( localExtraParameters );
|
|
122
|
+
|
|
123
|
+
if ( localExtraParametersMap == null ) return;
|
|
124
|
+
|
|
125
|
+
// Accumulate the result since this function may be called multiple times
|
|
126
|
+
// to handle different value types, including string, number, boolean, and null.
|
|
127
|
+
if ( this.localExtraParameters != null )
|
|
128
|
+
{
|
|
129
|
+
this.localExtraParameters.putAll( localExtraParametersMap );
|
|
130
|
+
}
|
|
131
|
+
else
|
|
122
132
|
{
|
|
123
|
-
localExtraParameters =
|
|
133
|
+
this.localExtraParameters = localExtraParametersMap;
|
|
124
134
|
}
|
|
125
135
|
}
|
|
126
136
|
|
|
127
137
|
public void loadAd()
|
|
128
138
|
{
|
|
129
|
-
if (
|
|
139
|
+
if ( AppLovinMAXModuleImpl.getInstance().getSdk() == null )
|
|
130
140
|
{
|
|
131
|
-
|
|
141
|
+
AppLovinMAXModuleImpl.logUninitializedAccessError( "AppLovinMAXNativeAdView.loadAd" );
|
|
132
142
|
return;
|
|
133
143
|
}
|
|
134
144
|
|
|
135
145
|
if ( isLoading.compareAndSet( false, true ) )
|
|
136
146
|
{
|
|
137
|
-
|
|
147
|
+
AppLovinMAXModuleImpl.d( "Loading a native ad for Ad Unit ID: " + adUnitId + "..." );
|
|
138
148
|
|
|
139
149
|
if ( adLoader == null || !adUnitId.equals( adLoader.getAdUnitId() ) )
|
|
140
150
|
{
|
|
141
|
-
adLoader = new MaxNativeAdLoader( adUnitId,
|
|
151
|
+
adLoader = new MaxNativeAdLoader( adUnitId, AppLovinMAXModuleImpl.getInstance().getSdk(), reactContext );
|
|
142
152
|
adLoader.setRevenueListener( this );
|
|
143
153
|
adLoader.setNativeAdListener( new NativeAdListener() );
|
|
144
154
|
}
|
|
@@ -166,8 +176,47 @@ public class AppLovinMAXNativeAdView
|
|
|
166
176
|
}
|
|
167
177
|
else
|
|
168
178
|
{
|
|
169
|
-
|
|
179
|
+
AppLovinMAXModuleImpl.e( "Ignoring request to load native ad for Ad Unit ID " + adUnitId + ", another ad load in progress" );
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public void updateAssetView(final int assetViewTag, final String assetViewName)
|
|
184
|
+
{
|
|
185
|
+
if ( "TitleView".equals( assetViewName ) )
|
|
186
|
+
{
|
|
187
|
+
setTitleView( assetViewTag );
|
|
188
|
+
}
|
|
189
|
+
else if ( "AdvertiserView".equals( assetViewName ) )
|
|
190
|
+
{
|
|
191
|
+
setAdvertiserView( assetViewTag );
|
|
192
|
+
}
|
|
193
|
+
else if ( "BodyView".equals( assetViewName ) )
|
|
194
|
+
{
|
|
195
|
+
setBodyView( assetViewTag );
|
|
196
|
+
}
|
|
197
|
+
else if ( "CallToActionView".equals( assetViewName ) )
|
|
198
|
+
{
|
|
199
|
+
setCallToActionView( assetViewTag );
|
|
200
|
+
}
|
|
201
|
+
else if ( "IconView".equals( assetViewName ) )
|
|
202
|
+
{
|
|
203
|
+
setIconView( assetViewTag );
|
|
170
204
|
}
|
|
205
|
+
else if ( "OptionsView".equals( assetViewName ) )
|
|
206
|
+
{
|
|
207
|
+
setOptionsView( assetViewTag );
|
|
208
|
+
}
|
|
209
|
+
else if ( "MediaView".equals( assetViewName ) )
|
|
210
|
+
{
|
|
211
|
+
setMediaView( assetViewTag );
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
public void renderNativeAd()
|
|
216
|
+
{
|
|
217
|
+
// Renders the ad only after the last asset view is set
|
|
218
|
+
renderNativeAdHandler.removeCallbacksAndMessages( null );
|
|
219
|
+
renderNativeAdHandler.postDelayed( renderNativeAdTask, 50 );
|
|
171
220
|
}
|
|
172
221
|
|
|
173
222
|
/// Ad Loader Listener
|
|
@@ -178,16 +227,16 @@ public class AppLovinMAXNativeAdView
|
|
|
178
227
|
@Override
|
|
179
228
|
public void onNativeAdLoaded(@Nullable final MaxNativeAdView nativeAdView, @NonNull final MaxAd ad)
|
|
180
229
|
{
|
|
181
|
-
|
|
230
|
+
AppLovinMAXModuleImpl.d( "Native ad loaded: " + ad );
|
|
182
231
|
|
|
183
232
|
// 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
|
|
184
233
|
if ( nativeAdView != null )
|
|
185
234
|
{
|
|
186
235
|
isLoading.set( false );
|
|
187
236
|
|
|
188
|
-
|
|
237
|
+
AppLovinMAXModuleImpl.e( "Native ad is of template type, failing ad load..." );
|
|
189
238
|
|
|
190
|
-
WritableMap loadFailedInfo =
|
|
239
|
+
WritableMap loadFailedInfo = AppLovinMAXModuleImpl.getInstance().getAdLoadFailedInfo( adUnitId, null );
|
|
191
240
|
reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, loadFailedInfo );
|
|
192
241
|
|
|
193
242
|
return;
|
|
@@ -208,17 +257,17 @@ public class AppLovinMAXNativeAdView
|
|
|
208
257
|
{
|
|
209
258
|
isLoading.set( false );
|
|
210
259
|
|
|
211
|
-
|
|
260
|
+
AppLovinMAXModuleImpl.e( "Failed to load native ad for Ad Unit ID " + adUnitId + " with error: " + error );
|
|
212
261
|
|
|
213
|
-
WritableMap loadFailedInfo =
|
|
214
|
-
|
|
262
|
+
WritableMap loadFailedInfo = AppLovinMAXModuleImpl.getInstance().getAdLoadFailedInfo( adUnitId, error );
|
|
263
|
+
AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, loadFailedInfo );
|
|
215
264
|
}
|
|
216
265
|
|
|
217
266
|
@Override
|
|
218
267
|
public void onNativeAdClicked(@NonNull final MaxAd ad)
|
|
219
268
|
{
|
|
220
|
-
WritableMap adInfo =
|
|
221
|
-
|
|
269
|
+
WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( ad );
|
|
270
|
+
AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT, adInfo );
|
|
222
271
|
}
|
|
223
272
|
}
|
|
224
273
|
|
|
@@ -227,8 +276,8 @@ public class AppLovinMAXNativeAdView
|
|
|
227
276
|
@Override
|
|
228
277
|
public void onAdRevenuePaid(@NonNull final MaxAd ad)
|
|
229
278
|
{
|
|
230
|
-
WritableMap adInfo =
|
|
231
|
-
|
|
279
|
+
WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( ad );
|
|
280
|
+
AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT, adInfo );
|
|
232
281
|
}
|
|
233
282
|
|
|
234
283
|
/// Native Ad Component Methods
|
|
@@ -240,7 +289,7 @@ public class AppLovinMAXNativeAdView
|
|
|
240
289
|
View view = findViewById( tag );
|
|
241
290
|
if ( view == null )
|
|
242
291
|
{
|
|
243
|
-
|
|
292
|
+
AppLovinMAXModuleImpl.e( "Cannot find a title view with tag \"" + tag + "\" for " + adUnitId );
|
|
244
293
|
return;
|
|
245
294
|
}
|
|
246
295
|
|
|
@@ -256,7 +305,7 @@ public class AppLovinMAXNativeAdView
|
|
|
256
305
|
View view = findViewById( tag );
|
|
257
306
|
if ( view == null )
|
|
258
307
|
{
|
|
259
|
-
|
|
308
|
+
AppLovinMAXModuleImpl.e( "Cannot find an advertiser view with tag \"" + tag + "\" for " + adUnitId );
|
|
260
309
|
return;
|
|
261
310
|
}
|
|
262
311
|
|
|
@@ -272,7 +321,7 @@ public class AppLovinMAXNativeAdView
|
|
|
272
321
|
View view = findViewById( tag );
|
|
273
322
|
if ( view == null )
|
|
274
323
|
{
|
|
275
|
-
|
|
324
|
+
AppLovinMAXModuleImpl.e( "Cannot find a body view with tag \"" + tag + "\" for " + adUnitId );
|
|
276
325
|
return;
|
|
277
326
|
}
|
|
278
327
|
|
|
@@ -288,7 +337,7 @@ public class AppLovinMAXNativeAdView
|
|
|
288
337
|
View view = findViewById( tag );
|
|
289
338
|
if ( view == null )
|
|
290
339
|
{
|
|
291
|
-
|
|
340
|
+
AppLovinMAXModuleImpl.e( "Cannot find a callToAction view with tag \"" + tag + "\" for " + adUnitId );
|
|
292
341
|
return;
|
|
293
342
|
}
|
|
294
343
|
|
|
@@ -320,7 +369,7 @@ public class AppLovinMAXNativeAdView
|
|
|
320
369
|
ImageView view = findViewById( tag );
|
|
321
370
|
if ( view == null )
|
|
322
371
|
{
|
|
323
|
-
|
|
372
|
+
AppLovinMAXModuleImpl.e( "Cannot find an icon image with tag \"" + tag + "\" for " + adUnitId );
|
|
324
373
|
return;
|
|
325
374
|
}
|
|
326
375
|
|
|
@@ -337,14 +386,6 @@ public class AppLovinMAXNativeAdView
|
|
|
337
386
|
view.setImageDrawable( icon.getDrawable() );
|
|
338
387
|
}
|
|
339
388
|
}
|
|
340
|
-
else
|
|
341
|
-
{
|
|
342
|
-
ImageView iconView = (ImageView) nativeAd.getNativeAd().getIconView();
|
|
343
|
-
if ( iconView != null )
|
|
344
|
-
{
|
|
345
|
-
view.setImageDrawable( iconView.getDrawable() );
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
389
|
}
|
|
349
390
|
|
|
350
391
|
public void setOptionsView(final int tag)
|
|
@@ -355,7 +396,7 @@ public class AppLovinMAXNativeAdView
|
|
|
355
396
|
ViewGroup view = findViewById( tag );
|
|
356
397
|
if ( view == null )
|
|
357
398
|
{
|
|
358
|
-
|
|
399
|
+
AppLovinMAXModuleImpl.e( "Cannot find an options view with tag \"" + tag + "\" for " + adUnitId );
|
|
359
400
|
return;
|
|
360
401
|
}
|
|
361
402
|
|
|
@@ -383,7 +424,7 @@ public class AppLovinMAXNativeAdView
|
|
|
383
424
|
ViewGroup view = findViewById( tag );
|
|
384
425
|
if ( view == null )
|
|
385
426
|
{
|
|
386
|
-
|
|
427
|
+
AppLovinMAXModuleImpl.e( "Cannot find a media view with tag \"" + tag + "\" for " + adUnitId );
|
|
387
428
|
return;
|
|
388
429
|
}
|
|
389
430
|
|
|
@@ -448,12 +489,6 @@ public class AppLovinMAXNativeAdView
|
|
|
448
489
|
{
|
|
449
490
|
loadAd();
|
|
450
491
|
}
|
|
451
|
-
else
|
|
452
|
-
{
|
|
453
|
-
// Renders the ad only after the last asset view is set
|
|
454
|
-
renderNativeAdHandler.removeCallbacksAndMessages( null );
|
|
455
|
-
renderNativeAdHandler.postDelayed( renderNativeAdTask, 50 );
|
|
456
|
-
}
|
|
457
492
|
}
|
|
458
493
|
|
|
459
494
|
@Override
|
|
@@ -516,9 +551,6 @@ public class AppLovinMAXNativeAdView
|
|
|
516
551
|
nativeAdInfo.putBoolean( "isOptionsViewAvailable", ( ad.getOptionsView() != null ) );
|
|
517
552
|
nativeAdInfo.putBoolean( "isMediaViewAvailable", ( ad.getMediaView() != null ) );
|
|
518
553
|
|
|
519
|
-
WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( nativeAd );
|
|
520
|
-
adInfo.putMap( "nativeAd", nativeAdInfo );
|
|
521
|
-
|
|
522
554
|
// 2. NativeAd for `AppLovinNativeAdView.js` to render the views
|
|
523
555
|
|
|
524
556
|
WritableMap jsNativeAd = Arguments.createMap();
|
|
@@ -544,20 +576,16 @@ public class AppLovinMAXNativeAdView
|
|
|
544
576
|
jsNativeAd.putBoolean( "image", true );
|
|
545
577
|
}
|
|
546
578
|
}
|
|
547
|
-
else if ( ad.getIconView() != null )
|
|
548
|
-
{
|
|
549
|
-
jsNativeAd.putBoolean( "image", true );
|
|
550
|
-
}
|
|
551
579
|
|
|
552
580
|
jsNativeAd.putBoolean( "isOptionsViewAvailable", ( ad.getOptionsView() != null ) );
|
|
553
581
|
jsNativeAd.putBoolean( "isMediaViewAvailable", ( ad.getMediaView() != null ) );
|
|
554
582
|
|
|
555
|
-
WritableMap
|
|
556
|
-
|
|
557
|
-
|
|
583
|
+
WritableMap adInfo = AppLovinMAXModuleImpl.getInstance().getAdInfo( nativeAd );
|
|
584
|
+
adInfo.putMap( "nativeAd", nativeAdInfo );
|
|
585
|
+
adInfo.putMap( "nativeAdImpl", jsNativeAd );
|
|
558
586
|
|
|
559
587
|
// Send to `AppLovinNativeAdView.js`
|
|
560
|
-
|
|
588
|
+
AppLovinMAXModuleImpl.getInstance().sendReactNativeViewEvent( surfaceId, getId(), AppLovinMAXAdEvents.ON_AD_LOADED_EVENT, adInfo );
|
|
561
589
|
}
|
|
562
590
|
|
|
563
591
|
private void maybeDestroyCurrentAd()
|
package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManagerImpl.java
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
package com.applovin.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
4
|
+
import com.facebook.react.common.MapBuilder;
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
6
|
+
|
|
7
|
+
import java.util.Map;
|
|
8
|
+
|
|
9
|
+
import androidx.annotation.NonNull;
|
|
10
|
+
import androidx.annotation.Nullable;
|
|
11
|
+
|
|
12
|
+
public class AppLovinMAXNativeAdViewManagerImpl
|
|
13
|
+
{
|
|
14
|
+
public static final String NAME = "AppLovinMAXNativeAdView";
|
|
15
|
+
|
|
16
|
+
private static final int COMMAND_LOAD_AD = 1;
|
|
17
|
+
|
|
18
|
+
public static AppLovinMAXNativeAdView createViewInstance(@NonNull final ThemedReactContext reactContext)
|
|
19
|
+
{
|
|
20
|
+
return new AppLovinMAXNativeAdView( reactContext );
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public static Map<String, Object> getExportedCustomDirectEventTypeConstants()
|
|
24
|
+
{
|
|
25
|
+
// mapping Android events to JavaScript events
|
|
26
|
+
return MapBuilder.<String, Object>builder()
|
|
27
|
+
.put( AppLovinMAXAdEvents.ON_AD_LOADED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_LOADED_EVENT ) )
|
|
28
|
+
.put( AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_LOAD_FAILED_EVENT ) )
|
|
29
|
+
.put( AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_CLICKED_EVENT ) )
|
|
30
|
+
.put( AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT, MapBuilder.of( "registrationName", AppLovinMAXAdEvents.ON_AD_REVENUE_PAID_EVENT ) )
|
|
31
|
+
.build();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public static void receiveCommand(final AppLovinMAXNativeAdView view, final String commandId, @Nullable final ReadableArray args)
|
|
35
|
+
{
|
|
36
|
+
if ( commandId.equals( "loadAd" ) )
|
|
37
|
+
{
|
|
38
|
+
loadAd( view );
|
|
39
|
+
}
|
|
40
|
+
else if ( commandId.equals( "updateAssetView" ) )
|
|
41
|
+
{
|
|
42
|
+
int assetViewTag = args.getInt( 0 );
|
|
43
|
+
String assetViewName = args.getString( 1 );
|
|
44
|
+
updateAssetView( view, assetViewTag, assetViewName );
|
|
45
|
+
}
|
|
46
|
+
else if ( commandId.equals( "renderNativeAd" ) )
|
|
47
|
+
{
|
|
48
|
+
renderNativeAd( view );
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public static void setAdUnitId(final AppLovinMAXNativeAdView view, final String value)
|
|
53
|
+
{
|
|
54
|
+
view.setAdUnitId( value );
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public static void setPlacement(final AppLovinMAXNativeAdView view, @Nullable final String value)
|
|
58
|
+
{
|
|
59
|
+
view.setPlacement( value );
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public static void setCustomData(final AppLovinMAXNativeAdView view, @Nullable final String value)
|
|
63
|
+
{
|
|
64
|
+
view.setCustomData( value );
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public static void setExtraParameters(final AppLovinMAXNativeAdView view, @Nullable final ReadableArray value)
|
|
68
|
+
{
|
|
69
|
+
view.setExtraParameters( value );
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public static void setLocalExtraParameters(final AppLovinMAXNativeAdView view, @Nullable final ReadableArray value)
|
|
73
|
+
{
|
|
74
|
+
view.setLocalExtraParameters( value );
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public static void onSetProps(final AppLovinMAXNativeAdView view)
|
|
78
|
+
{
|
|
79
|
+
view.onSetProps();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public static void destroy(final AppLovinMAXNativeAdView view)
|
|
83
|
+
{
|
|
84
|
+
view.destroy();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public static void loadAd(final AppLovinMAXNativeAdView view)
|
|
88
|
+
{
|
|
89
|
+
view.loadAd();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public static void updateAssetView(final AppLovinMAXNativeAdView view, final int assetViewTag, final String assetViewName)
|
|
93
|
+
{
|
|
94
|
+
view.updateAssetView( assetViewTag, assetViewName );
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public static void renderNativeAd(final AppLovinMAXNativeAdView view)
|
|
98
|
+
{
|
|
99
|
+
view.renderNativeAd();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -1,35 +1,68 @@
|
|
|
1
1
|
package com.applovin.reactnative;
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.TurboReactPackage;
|
|
4
4
|
import com.facebook.react.bridge.NativeModule;
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo;
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
6
8
|
import com.facebook.react.uimanager.ViewManager;
|
|
7
9
|
|
|
8
10
|
import java.util.ArrayList;
|
|
11
|
+
import java.util.HashMap;
|
|
9
12
|
import java.util.List;
|
|
13
|
+
import java.util.Map;
|
|
10
14
|
|
|
11
15
|
import androidx.annotation.NonNull;
|
|
16
|
+
import androidx.annotation.Nullable;
|
|
12
17
|
|
|
13
18
|
/**
|
|
14
19
|
* Created by Thomas So on July 11 2020
|
|
15
20
|
*/
|
|
16
21
|
public class AppLovinMAXPackage
|
|
17
|
-
|
|
22
|
+
extends TurboReactPackage
|
|
18
23
|
{
|
|
24
|
+
@NonNull
|
|
19
25
|
@Override
|
|
20
|
-
public
|
|
21
|
-
{
|
|
22
|
-
List<NativeModule> module = new ArrayList<>( 1 );
|
|
23
|
-
module.add( new AppLovinMAXModule( reactContext ) );
|
|
24
|
-
return module;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@Override
|
|
28
|
-
public @NonNull List<ViewManager> createViewManagers(@NonNull final ReactApplicationContext reactContext)
|
|
26
|
+
public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext)
|
|
29
27
|
{
|
|
30
28
|
List<ViewManager> viewManagers = new ArrayList<>( 2 );
|
|
31
29
|
viewManagers.add( new AppLovinMAXAdViewManager() );
|
|
32
30
|
viewManagers.add( new AppLovinMAXNativeAdViewManager() );
|
|
33
31
|
return viewManagers;
|
|
34
32
|
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
public ReactModuleInfoProvider getReactModuleInfoProvider()
|
|
36
|
+
{
|
|
37
|
+
return () -> {
|
|
38
|
+
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
|
|
39
|
+
boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
|
|
40
|
+
moduleInfos.put(
|
|
41
|
+
AppLovinMAXModuleImpl.NAME,
|
|
42
|
+
new ReactModuleInfo(
|
|
43
|
+
AppLovinMAXModuleImpl.NAME,
|
|
44
|
+
AppLovinMAXModuleImpl.NAME,
|
|
45
|
+
false, // canOverrideExistingModule
|
|
46
|
+
false, // needsEagerInit
|
|
47
|
+
true, // hasConstants
|
|
48
|
+
false, // isCxxModule
|
|
49
|
+
isTurboModule // isTurboModule
|
|
50
|
+
) );
|
|
51
|
+
return moduleInfos;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Nullable
|
|
56
|
+
@Override
|
|
57
|
+
public NativeModule getModule(String name, @NonNull ReactApplicationContext reactContext)
|
|
58
|
+
{
|
|
59
|
+
if ( name.equals( AppLovinMAXModuleImpl.NAME ) )
|
|
60
|
+
{
|
|
61
|
+
return new AppLovinMAXModule( reactContext );
|
|
62
|
+
}
|
|
63
|
+
else
|
|
64
|
+
{
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
35
68
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
package com.applovin.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.applovin.sdk.AppLovinSdkUtils;
|
|
4
|
+
import com.facebook.react.bridge.Dynamic;
|
|
5
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
6
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
7
|
+
import com.facebook.react.bridge.ReadableType;
|
|
8
|
+
|
|
9
|
+
import java.util.HashMap;
|
|
10
|
+
import java.util.Map;
|
|
11
|
+
|
|
12
|
+
import androidx.annotation.Nullable;
|
|
13
|
+
|
|
14
|
+
class AppLovinMAXUtils
|
|
15
|
+
{
|
|
16
|
+
public static Map<String, Object> convertReadbleArrayToHashMap(@Nullable final ReadableArray readableArray)
|
|
17
|
+
{
|
|
18
|
+
if ( readableArray == null || readableArray.size() == 0 ) return null;
|
|
19
|
+
|
|
20
|
+
Map<String, Object> hashMap = new HashMap<>();
|
|
21
|
+
|
|
22
|
+
for ( int i = 0; i < readableArray.size(); i++ )
|
|
23
|
+
{
|
|
24
|
+
ReadableMap readableMap = readableArray.getMap( i );
|
|
25
|
+
|
|
26
|
+
String key = readableMap.getString( "key" );
|
|
27
|
+
|
|
28
|
+
if ( !AppLovinSdkUtils.isValidString( key ) ) continue;
|
|
29
|
+
|
|
30
|
+
if ( readableMap.hasKey( "value" ) )
|
|
31
|
+
{
|
|
32
|
+
Dynamic value = readableMap.getDynamic( "value" );
|
|
33
|
+
ReadableType type = readableMap.getType( "value" );
|
|
34
|
+
|
|
35
|
+
if ( type == ReadableType.String )
|
|
36
|
+
{
|
|
37
|
+
hashMap.put( key, value.asString() );
|
|
38
|
+
}
|
|
39
|
+
else if ( type == ReadableType.Number )
|
|
40
|
+
{
|
|
41
|
+
hashMap.put( key, value.asDouble() );
|
|
42
|
+
}
|
|
43
|
+
else if ( type == ReadableType.Boolean )
|
|
44
|
+
{
|
|
45
|
+
hashMap.put( key, value.asBoolean() );
|
|
46
|
+
}
|
|
47
|
+
else if ( type == ReadableType.Null )
|
|
48
|
+
{
|
|
49
|
+
hashMap.put( key, null );
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return hashMap;
|
|
55
|
+
}
|
|
56
|
+
}
|