react-native-applovin-max 6.5.0 → 7.0.1

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 (238) hide show
  1. package/android/build.gradle +46 -100
  2. package/android/gradle.properties +4 -4
  3. package/android/src/main/AndroidManifest.xml +2 -2
  4. package/android/src/main/AndroidManifestNew.xml +2 -0
  5. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdView.java +123 -163
  6. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewManager.java +24 -17
  7. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXAdViewUiComponent.java +242 -0
  8. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXModule.java +297 -336
  9. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdView.java +13 -12
  10. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXNativeAdViewManager.java +11 -14
  11. package/android/src/main/java/com/applovin/reactnative/AppLovinMAXPackage.java +3 -3
  12. package/ios/AppLovinMAX.h +1 -1
  13. package/ios/AppLovinMAX.m +62 -12
  14. package/ios/AppLovinMAXAdView.h +12 -0
  15. package/ios/AppLovinMAXAdView.m +120 -142
  16. package/ios/AppLovinMAXAdViewUIComponent.h +27 -0
  17. package/ios/AppLovinMAXAdViewUIComponent.m +199 -0
  18. package/lib/commonjs/AdView.js +348 -0
  19. package/lib/commonjs/AdView.js.map +1 -0
  20. package/lib/commonjs/AppLovinMAX.js +52 -0
  21. package/lib/commonjs/AppLovinMAX.js.map +1 -0
  22. package/lib/commonjs/AppOpenAd.js +102 -0
  23. package/lib/commonjs/AppOpenAd.js.map +1 -0
  24. package/lib/commonjs/BannerAd.js +139 -0
  25. package/lib/commonjs/BannerAd.js.map +1 -0
  26. package/lib/commonjs/EventEmitter.js +32 -0
  27. package/lib/commonjs/EventEmitter.js.map +1 -0
  28. package/lib/commonjs/InterstitialAd.js +102 -0
  29. package/lib/commonjs/InterstitialAd.js.map +1 -0
  30. package/lib/commonjs/MRecAd.js +117 -0
  31. package/lib/commonjs/MRecAd.js.map +1 -0
  32. package/lib/commonjs/Privacy.js +12 -0
  33. package/lib/commonjs/Privacy.js.map +1 -0
  34. package/lib/commonjs/RewardedAd.js +116 -0
  35. package/lib/commonjs/RewardedAd.js.map +1 -0
  36. package/lib/commonjs/TargetingData.js +179 -0
  37. package/lib/commonjs/TargetingData.js.map +1 -0
  38. package/lib/commonjs/index.js +256 -0
  39. package/lib/commonjs/index.js.map +1 -0
  40. package/lib/commonjs/nativeAd/NativeAdView.js +147 -0
  41. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -0
  42. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +197 -0
  43. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -0
  44. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +37 -0
  45. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -0
  46. package/lib/commonjs/types/AdEvent.js +6 -0
  47. package/lib/commonjs/types/AdEvent.js.map +1 -0
  48. package/lib/commonjs/types/AdInfo.js +48 -0
  49. package/lib/commonjs/types/AdInfo.js.map +1 -0
  50. package/lib/commonjs/types/AdProps.js +6 -0
  51. package/lib/commonjs/types/AdProps.js.map +1 -0
  52. package/lib/commonjs/types/AdViewProps.js +6 -0
  53. package/lib/commonjs/types/AdViewProps.js.map +1 -0
  54. package/lib/commonjs/types/AppLovinMAX.js +6 -0
  55. package/lib/commonjs/types/AppLovinMAX.js.map +1 -0
  56. package/lib/commonjs/types/AppOpenAd.js +6 -0
  57. package/lib/commonjs/types/AppOpenAd.js.map +1 -0
  58. package/lib/commonjs/types/BannerAd.js +6 -0
  59. package/lib/commonjs/types/BannerAd.js.map +1 -0
  60. package/lib/commonjs/types/CMPError.js +6 -0
  61. package/lib/commonjs/types/CMPError.js.map +1 -0
  62. package/lib/commonjs/types/Configuration.js +6 -0
  63. package/lib/commonjs/types/Configuration.js.map +1 -0
  64. package/lib/commonjs/types/FullscreenAd.js +6 -0
  65. package/lib/commonjs/types/FullscreenAd.js.map +1 -0
  66. package/lib/commonjs/types/InterstitialAd.js +6 -0
  67. package/lib/commonjs/types/InterstitialAd.js.map +1 -0
  68. package/lib/commonjs/types/MRecAd.js +6 -0
  69. package/lib/commonjs/types/MRecAd.js.map +1 -0
  70. package/lib/commonjs/types/NativeAd.js +2 -0
  71. package/lib/commonjs/types/NativeAd.js.map +1 -0
  72. package/lib/commonjs/types/NativeAdViewProps.js +6 -0
  73. package/lib/commonjs/types/NativeAdViewProps.js.map +1 -0
  74. package/lib/commonjs/types/Privacy.js +2 -0
  75. package/lib/commonjs/types/Privacy.js.map +1 -0
  76. package/lib/commonjs/types/RewardedAd.js +6 -0
  77. package/lib/commonjs/types/RewardedAd.js.map +1 -0
  78. package/lib/commonjs/types/TargetingData.js +6 -0
  79. package/lib/commonjs/types/TargetingData.js.map +1 -0
  80. package/lib/commonjs/types/ViewAd.js +6 -0
  81. package/lib/commonjs/types/ViewAd.js.map +1 -0
  82. package/lib/commonjs/types/index.js +61 -0
  83. package/lib/commonjs/types/index.js.map +1 -0
  84. package/lib/module/AdView.js +335 -0
  85. package/lib/module/AdView.js.map +1 -0
  86. package/lib/module/AppLovinMAX.js +48 -0
  87. package/lib/module/AppLovinMAX.js.map +1 -0
  88. package/lib/module/AppOpenAd.js +96 -0
  89. package/lib/module/AppOpenAd.js.map +1 -0
  90. package/lib/module/BannerAd.js +133 -0
  91. package/lib/module/BannerAd.js.map +1 -0
  92. package/lib/module/EventEmitter.js +24 -0
  93. package/lib/module/EventEmitter.js.map +1 -0
  94. package/lib/module/InterstitialAd.js +96 -0
  95. package/lib/module/InterstitialAd.js.map +1 -0
  96. package/lib/module/MRecAd.js +111 -0
  97. package/lib/module/MRecAd.js.map +1 -0
  98. package/lib/module/Privacy.js +6 -0
  99. package/lib/module/Privacy.js.map +1 -0
  100. package/lib/module/RewardedAd.js +110 -0
  101. package/lib/module/RewardedAd.js.map +1 -0
  102. package/lib/module/TargetingData.js +175 -0
  103. package/lib/module/TargetingData.js.map +1 -0
  104. package/lib/module/index.js +14 -0
  105. package/lib/module/index.js.map +1 -0
  106. package/lib/module/nativeAd/NativeAdView.js +139 -0
  107. package/lib/module/nativeAd/NativeAdView.js.map +1 -0
  108. package/lib/module/nativeAd/NativeAdViewComponents.js +181 -0
  109. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -0
  110. package/lib/module/nativeAd/NativeAdViewProvider.js +28 -0
  111. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -0
  112. package/lib/module/types/AdEvent.js +2 -0
  113. package/lib/module/types/AdEvent.js.map +1 -0
  114. package/lib/module/types/AdInfo.js +52 -0
  115. package/lib/module/types/AdInfo.js.map +1 -0
  116. package/lib/module/types/AdProps.js +2 -0
  117. package/lib/module/types/AdProps.js.map +1 -0
  118. package/lib/module/types/AdViewProps.js +2 -0
  119. package/lib/module/types/AdViewProps.js.map +1 -0
  120. package/lib/module/types/AppLovinMAX.js +2 -0
  121. package/lib/module/types/AppLovinMAX.js.map +1 -0
  122. package/lib/module/types/AppOpenAd.js +2 -0
  123. package/lib/module/types/AppOpenAd.js.map +1 -0
  124. package/lib/module/types/BannerAd.js +2 -0
  125. package/lib/module/types/BannerAd.js.map +1 -0
  126. package/lib/module/types/CMPError.js +2 -0
  127. package/lib/module/types/CMPError.js.map +1 -0
  128. package/lib/module/types/Configuration.js +2 -0
  129. package/lib/module/types/Configuration.js.map +1 -0
  130. package/lib/module/types/FullscreenAd.js +2 -0
  131. package/lib/module/types/FullscreenAd.js.map +1 -0
  132. package/lib/module/types/InterstitialAd.js +2 -0
  133. package/lib/module/types/InterstitialAd.js.map +1 -0
  134. package/lib/module/types/MRecAd.js +2 -0
  135. package/lib/module/types/MRecAd.js.map +1 -0
  136. package/lib/module/types/NativeAd.js +2 -0
  137. package/lib/module/types/NativeAd.js.map +1 -0
  138. package/lib/module/types/NativeAdViewProps.js +2 -0
  139. package/lib/module/types/NativeAdViewProps.js.map +1 -0
  140. package/lib/module/types/Privacy.js +2 -0
  141. package/lib/module/types/Privacy.js.map +1 -0
  142. package/lib/module/types/RewardedAd.js +2 -0
  143. package/lib/module/types/RewardedAd.js.map +1 -0
  144. package/lib/module/types/TargetingData.js +2 -0
  145. package/lib/module/types/TargetingData.js.map +1 -0
  146. package/lib/module/types/ViewAd.js +2 -0
  147. package/lib/module/types/ViewAd.js.map +1 -0
  148. package/lib/module/types/index.js +6 -0
  149. package/lib/module/types/index.js.map +1 -0
  150. package/lib/typescript/src/AdView.d.ts +115 -0
  151. package/lib/typescript/src/AdView.d.ts.map +1 -0
  152. package/lib/typescript/src/AppLovinMAX.d.ts +73 -0
  153. package/lib/typescript/src/AppLovinMAX.d.ts.map +1 -0
  154. package/lib/typescript/src/AppOpenAd.d.ts +4 -0
  155. package/lib/typescript/src/AppOpenAd.d.ts.map +1 -0
  156. package/lib/typescript/src/BannerAd.d.ts +4 -0
  157. package/lib/typescript/src/BannerAd.d.ts.map +1 -0
  158. package/lib/typescript/src/EventEmitter.d.ts +4 -0
  159. package/lib/typescript/src/EventEmitter.d.ts.map +1 -0
  160. package/lib/typescript/src/InterstitialAd.d.ts +4 -0
  161. package/lib/typescript/src/InterstitialAd.d.ts.map +1 -0
  162. package/lib/typescript/src/MRecAd.d.ts +4 -0
  163. package/lib/typescript/src/MRecAd.d.ts.map +1 -0
  164. package/lib/typescript/src/Privacy.d.ts +3 -0
  165. package/lib/typescript/src/Privacy.d.ts.map +1 -0
  166. package/lib/typescript/src/RewardedAd.d.ts +4 -0
  167. package/lib/typescript/src/RewardedAd.d.ts.map +1 -0
  168. package/lib/typescript/src/TargetingData.d.ts +26 -0
  169. package/lib/typescript/src/TargetingData.d.ts.map +1 -0
  170. package/lib/typescript/src/index.d.ts +14 -0
  171. package/lib/typescript/src/index.d.ts.map +1 -0
  172. package/lib/typescript/src/nativeAd/NativeAdView.d.ts +42 -0
  173. package/lib/typescript/src/nativeAd/NativeAdView.d.ts.map +1 -0
  174. package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts +11 -0
  175. package/lib/typescript/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -0
  176. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts +16 -0
  177. package/lib/typescript/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -0
  178. package/lib/typescript/src/types/AdEvent.d.ts +15 -0
  179. package/lib/typescript/src/types/AdEvent.d.ts.map +1 -0
  180. package/lib/typescript/src/types/AdInfo.d.ts +295 -0
  181. package/lib/typescript/src/types/AdInfo.d.ts.map +1 -0
  182. package/lib/typescript/src/types/AdProps.d.ts +58 -0
  183. package/lib/typescript/src/types/AdProps.d.ts.map +1 -0
  184. package/lib/typescript/src/types/AdViewProps.d.ts +73 -0
  185. package/lib/typescript/src/types/AdViewProps.d.ts.map +1 -0
  186. package/lib/typescript/src/types/AppLovinMAX.d.ts +133 -0
  187. package/lib/typescript/src/types/AppLovinMAX.d.ts.map +1 -0
  188. package/lib/typescript/src/types/AppOpenAd.d.ts +3 -0
  189. package/lib/typescript/src/types/AppOpenAd.d.ts.map +1 -0
  190. package/lib/typescript/src/types/BannerAd.d.ts +42 -0
  191. package/lib/typescript/src/types/BannerAd.d.ts.map +1 -0
  192. package/lib/typescript/src/types/CMPError.d.ts +20 -0
  193. package/lib/typescript/src/types/CMPError.d.ts.map +1 -0
  194. package/lib/typescript/src/types/Configuration.d.ts +33 -0
  195. package/lib/typescript/src/types/Configuration.d.ts.map +1 -0
  196. package/lib/typescript/src/types/FullscreenAd.d.ts +123 -0
  197. package/lib/typescript/src/types/FullscreenAd.d.ts.map +1 -0
  198. package/lib/typescript/src/types/InterstitialAd.d.ts +3 -0
  199. package/lib/typescript/src/types/InterstitialAd.d.ts.map +1 -0
  200. package/lib/typescript/src/types/MRecAd.d.ts +12 -0
  201. package/lib/typescript/src/types/MRecAd.d.ts.map +1 -0
  202. package/lib/typescript/src/types/NativeAd.d.ts +42 -0
  203. package/lib/typescript/src/types/NativeAd.d.ts.map +1 -0
  204. package/lib/typescript/src/types/NativeAdViewProps.d.ts +15 -0
  205. package/lib/typescript/src/types/NativeAdViewProps.d.ts.map +1 -0
  206. package/lib/typescript/src/types/Privacy.d.ts +35 -0
  207. package/lib/typescript/src/types/Privacy.d.ts.map +1 -0
  208. package/lib/typescript/src/types/RewardedAd.d.ts +18 -0
  209. package/lib/typescript/src/types/RewardedAd.d.ts.map +1 -0
  210. package/lib/typescript/src/types/TargetingData.d.ts +43 -0
  211. package/lib/typescript/src/types/TargetingData.d.ts.map +1 -0
  212. package/lib/typescript/src/types/ViewAd.d.ts +141 -0
  213. package/lib/typescript/src/types/ViewAd.d.ts.map +1 -0
  214. package/lib/typescript/src/types/index.d.ts +6 -0
  215. package/lib/typescript/src/types/index.d.ts.map +1 -0
  216. package/package.json +102 -21
  217. package/react-native-applovin-max.podspec +29 -5
  218. package/src/AdView.tsx +83 -26
  219. package/src/AppLovinMAX.ts +1 -1
  220. package/src/InterstitialAd.ts +1 -3
  221. package/src/MRecAd.ts +2 -8
  222. package/src/TargetingData.ts +2 -15
  223. package/src/index.ts +9 -10
  224. package/src/nativeAd/NativeAdView.tsx +33 -49
  225. package/src/nativeAd/NativeAdViewComponents.tsx +22 -31
  226. package/src/types/AdViewProps.ts +29 -1
  227. package/android/.project +0 -17
  228. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  229. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  230. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  231. package/android/gradlew +0 -172
  232. package/android/gradlew.bat +0 -84
  233. package/ios/AppLovinMAX.xcodeproj/project.pbxproj +0 -368
  234. package/ios/AppLovinMAX.xcodeproj/xcshareddata/xcschemes/AppLovinMAX.xcscheme +0 -67
  235. package/ios/AppLovinMAX.xcworkspace/contents.xcworkspacedata +0 -10
  236. package/ios/AppLovinMAX.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  237. package/ios/Podfile +0 -40
  238. package/ios/Podfile.lock +0 -373
@@ -1,65 +1,72 @@
1
1
  buildscript {
2
- ext.versions = [
3
- 'minSdk' : 21,
4
- 'compileSdk' : 29,
5
- 'targetSdk' : 29,
6
- 'playServicesIdentifier': "16.0.0",
7
- "exoplayer" : "2.12.1"
8
- ]
9
-
10
2
  repositories {
11
3
  google()
12
4
  mavenCentral()
13
5
  }
14
6
 
15
7
  dependencies {
16
- classpath 'com.android.tools.build:gradle:3.6.4'
17
-
18
- classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.0"
8
+ classpath "com.android.tools.build:gradle:8.3.0"
19
9
  }
20
10
  }
21
11
 
22
- apply plugin: 'com.android.library'
12
+ def isNewArchitectureEnabled() {
13
+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
14
+ }
15
+
16
+ apply plugin: "com.android.library"
17
+
18
+ if (isNewArchitectureEnabled()) {
19
+ apply plugin: "com.facebook.react"
20
+ }
23
21
 
24
22
  def getExtOrDefault(name) {
25
- return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['AppLovinMAX_' + name]
23
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["ApplovinMax_" + name]
26
24
  }
27
25
 
28
26
  def getExtOrIntegerDefault(name) {
29
- return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['AppLovinMAX_' + name]).toInteger()
27
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["ApplovinMax_" + name]).toInteger()
28
+ }
29
+
30
+ def supportsNamespace() {
31
+ def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
32
+ def major = parsed[0].toInteger()
33
+ def minor = parsed[1].toInteger()
34
+
35
+ // Namespace support was added in 7.3.0
36
+ return (major == 7 && minor >= 3) || major >= 8
30
37
  }
31
38
 
32
39
  android {
33
- compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')
34
- buildToolsVersion getExtOrDefault('buildToolsVersion')
35
- defaultConfig {
36
- minSdkVersion 16
37
- targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
38
- versionCode 6050000
39
- versionName "6.5.0"
40
- }
40
+ if (supportsNamespace()) {
41
+ namespace "com.applovin.reactnative"
41
42
 
42
- flavorDimensions("default")
43
- productFlavors {
44
- // Only create product flavors for AL development.
45
- if (findProject(':Android-SDK') != null) {
46
- create("standalone") {
47
- buildConfigField("boolean", "IS_TEST_APP", "false")
48
- }
49
- create("app") {
50
- buildConfigField("boolean", "IS_TEST_APP", "true")
43
+ sourceSets {
44
+ main {
45
+ manifest.srcFile "src/main/AndroidManifestNew.xml"
51
46
  }
52
47
  }
53
48
  }
54
49
 
50
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
51
+
52
+ defaultConfig {
53
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
54
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
55
+
56
+ buildConfigField("int", "VERSION_CODE", "7000100")
57
+ buildConfigField("String", "VERSION_NAME", "\"7.0.1\"")
58
+ }
59
+
55
60
  buildTypes {
56
61
  release {
57
62
  minifyEnabled false
58
63
  }
59
64
  }
65
+
60
66
  lintOptions {
61
- disable 'GradleCompatible'
67
+ disable "GradleCompatible"
62
68
  }
69
+
63
70
  compileOptions {
64
71
  sourceCompatibility JavaVersion.VERSION_1_8
65
72
  targetCompatibility JavaVersion.VERSION_1_8
@@ -69,76 +76,15 @@ android {
69
76
  repositories {
70
77
  mavenCentral()
71
78
  google()
72
-
73
- def found = false
74
- def defaultDir = null
75
- def androidSourcesName = 'React Native sources'
76
-
77
- if (rootProject.ext.has('reactNativeAndroidRoot')) {
78
- defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
79
- } else {
80
- defaultDir = new File(
81
- projectDir,
82
- '/../../../node_modules/react-native/android'
83
- )
84
- }
85
-
86
- if (defaultDir.exists()) {
87
- maven {
88
- url defaultDir.toString()
89
- name androidSourcesName
90
- }
91
-
92
- logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}")
93
- found = true
94
- } else {
95
- def parentDir = rootProject.projectDir
96
-
97
- 1.upto(5, {
98
- if (found) return true
99
- parentDir = parentDir.parentFile
100
-
101
- def androidSourcesDir = new File(
102
- parentDir,
103
- 'node_modules/react-native'
104
- )
105
-
106
- def androidPrebuiltBinaryDir = new File(
107
- parentDir,
108
- 'node_modules/react-native/android'
109
- )
110
-
111
- if (androidPrebuiltBinaryDir.exists()) {
112
- maven {
113
- url androidPrebuiltBinaryDir.toString()
114
- name androidSourcesName
115
- }
116
-
117
- logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}")
118
- found = true
119
- } else if (androidSourcesDir.exists()) {
120
- maven {
121
- url androidSourcesDir.toString()
122
- name androidSourcesName
123
- }
124
-
125
- logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}")
126
- found = true
127
- }
128
- })
129
- }
130
-
131
- if (!found) {
132
- throw new GradleException(
133
- "${project.name}: unable to locate React Native android sources. " +
134
- "Ensure you have you installed React Native as a dependency in your project and try again."
135
- )
136
- }
137
79
  }
138
80
 
81
+
139
82
  dependencies {
140
- // noinspection GradleDynamicVersion
141
- api 'com.facebook.react:react-native:+'
83
+ // For < 0.71, this will be from the local maven repo
84
+ // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
85
+ //noinspection GradleDynamicVersion
86
+ implementation "com.facebook.react:react-native:0.73.6"
142
87
 
143
- implementation 'com.applovin:applovin-sdk:12.5.0'
88
+ implementation "com.applovin:applovin-sdk:12.5.0"
144
89
  }
90
+
@@ -1,6 +1,6 @@
1
- AppLovinMAX_compileSdkVersion=28
2
- AppLovinMAX_buildToolsVersion=28.0.3
3
- AppLovinMAX_targetSdkVersion=28
1
+ ApplovinMax_minSdkVersion=21
2
+ ApplovinMax_targetSdkVersion=34
3
+ ApplovinMax_compileSdkVersion=34
4
4
 
5
5
  # To bypass an error from the `io.codearte.nexus-staging` plugin requiring it to be applied to base build.gradle
6
- gnsp.disableApplyOnlyOnRootProjectEnforcement=true
6
+ gnsp.disableApplyOnlyOnRootProjectEnforcement=true
@@ -1,3 +1,3 @@
1
- <manifest package="com.applovin.reactnative">
2
-
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ package="com.applovin.reactnative">
3
3
  </manifest>
@@ -0,0 +1,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -3,17 +3,11 @@ package com.applovin.reactnative;
3
3
  import android.content.Context;
4
4
  import android.text.TextUtils;
5
5
 
6
- import com.applovin.mediation.MaxAd;
7
6
  import com.applovin.mediation.MaxAdFormat;
8
- import com.applovin.mediation.MaxAdListener;
9
- import com.applovin.mediation.MaxAdRevenueListener;
10
- import com.applovin.mediation.MaxAdViewAdListener;
11
- import com.applovin.mediation.MaxError;
12
7
  import com.applovin.mediation.ads.MaxAdView;
8
+ import com.facebook.react.bridge.Promise;
9
+ import com.facebook.react.bridge.ReactContext;
13
10
  import com.facebook.react.bridge.ReadableMap;
14
- import com.facebook.react.bridge.WritableMap;
15
- import com.facebook.react.uimanager.ThemedReactContext;
16
- import com.facebook.react.uimanager.events.RCTEventEmitter;
17
11
  import com.facebook.react.views.view.ReactViewGroup;
18
12
 
19
13
  import java.util.HashMap;
@@ -25,15 +19,15 @@ import androidx.annotation.Nullable;
25
19
  * Created by Thomas So on September 27 2020
26
20
  */
27
21
  class AppLovinMAXAdView
28
- extends ReactViewGroup
29
- implements MaxAdListener, MaxAdViewAdListener, MaxAdRevenueListener
22
+ extends ReactViewGroup
30
23
  {
31
- private static final Map<String, MaxAdView> adViewInstances = new HashMap<>( 2 );
24
+ private static final Map<String, AppLovinMAXAdViewUiComponent> uiComponentInstances = new HashMap<>( 2 );
25
+ private static final Map<String, AppLovinMAXAdViewUiComponent> preloadedUiComponentInstances = new HashMap<>( 2 );
32
26
 
33
- private final ThemedReactContext reactContext;
27
+ private final ReactContext reactContext;
34
28
 
35
29
  @Nullable
36
- private MaxAdView adView;
30
+ private AppLovinMAXAdViewUiComponent uiComponent;
37
31
 
38
32
  private String adUnitId;
39
33
  private MaxAdFormat adFormat;
@@ -51,35 +45,80 @@ class AppLovinMAXAdView
51
45
 
52
46
  public static MaxAdView getInstance(final String adUnitId)
53
47
  {
54
- return adViewInstances.get( adUnitId );
48
+ AppLovinMAXAdViewUiComponent uiComponent = preloadedUiComponentInstances.get( adUnitId );
49
+ if ( uiComponent == null ) uiComponent = uiComponentInstances.get( adUnitId );
50
+ return ( uiComponent != null ) ? uiComponent.getAdView() : null;
51
+ }
52
+
53
+ public static void preloadNativeUIComponentAdView(final String adUnitId, final MaxAdFormat adFormat, final String placement, final String customData, final Map<String, Object> extraParameters, final Map<String, Object> localExtraParameters, final Promise promise, final ReactContext context)
54
+ {
55
+ AppLovinMAXAdViewUiComponent preloadedUiComponent = preloadedUiComponentInstances.get( adUnitId );
56
+ if ( preloadedUiComponent != null )
57
+ {
58
+ promise.reject( new IllegalStateException( "Cannot preload more than one for a single Ad Unit ID" ) );
59
+ return;
60
+ }
61
+
62
+ preloadedUiComponent = new AppLovinMAXAdViewUiComponent( adUnitId, adFormat, context );
63
+ preloadedUiComponentInstances.put( adUnitId, preloadedUiComponent );
64
+
65
+ preloadedUiComponent.setPlacement( placement );
66
+ preloadedUiComponent.setCustomData( customData );
67
+ preloadedUiComponent.setExtraParameters( extraParameters );
68
+ preloadedUiComponent.setLocalExtraParameters( localExtraParameters );
69
+
70
+ preloadedUiComponent.loadAd();
71
+
72
+ promise.resolve( null );
73
+ }
74
+
75
+ public static void destroyNativeUIComponentAdView(final String adUnitId, final Promise promise)
76
+ {
77
+ AppLovinMAXAdViewUiComponent preloadedUiComponent = preloadedUiComponentInstances.get( adUnitId );
78
+ if ( preloadedUiComponent == null )
79
+ {
80
+ promise.reject( new IllegalStateException( "No native UI component found to destroy" ) );
81
+ return;
82
+ }
83
+
84
+ if ( preloadedUiComponent.hasContainerView() )
85
+ {
86
+ promise.reject( new IllegalStateException( "Cannot destroy - currently in use" ) );
87
+ return;
88
+ }
89
+
90
+ preloadedUiComponentInstances.remove( adUnitId );
91
+
92
+ preloadedUiComponent.detachAdView();
93
+ preloadedUiComponent.destroy();
94
+
95
+ promise.resolve( null );
55
96
  }
56
97
 
57
98
  public AppLovinMAXAdView(final Context context)
58
99
  {
59
100
  super( context );
60
- reactContext = (ThemedReactContext) context;
101
+ reactContext = (ReactContext) context;
61
102
  }
62
103
 
63
104
  public void setAdUnitId(final String value)
64
105
  {
65
106
  // Ad Unit ID must be set prior to creating MaxAdView
66
- if ( adView != null )
107
+ if ( uiComponent != null )
67
108
  {
68
- AppLovinMAXModule.e( "Attempting to set Ad Unit ID " + value + " after MaxAdView is created" );
109
+ AppLovinMAXModule.e( "Attempting to set Ad Unit ID " + value + " after the native UI component is created" );
69
110
  return;
70
111
  }
71
112
 
72
113
  adUnitId = value;
73
-
74
- maybeAttachAdView();
75
114
  }
76
115
 
77
116
  public void setAdFormat(final String value)
78
117
  {
79
118
  // Ad format must be set prior to creating MaxAdView
80
- if ( adView != null )
119
+ if ( uiComponent != null )
81
120
  {
82
- AppLovinMAXModule.e( "Attempting to set ad format " + value + " after MaxAdView is created" );
121
+ AppLovinMAXModule.e( "Attempting to set ad format " + value + " after the native UI component is created" );
83
122
  return;
84
123
  }
85
124
 
@@ -94,19 +133,16 @@ class AppLovinMAXAdView
94
133
  else
95
134
  {
96
135
  AppLovinMAXModule.e( "Attempting to set an invalid ad format of \"" + value + "\" for " + adUnitId );
97
- return;
98
136
  }
99
-
100
- maybeAttachAdView();
101
137
  }
102
138
 
103
139
  public void setPlacement(@Nullable final String value)
104
140
  {
105
141
  placement = value;
106
142
 
107
- if ( adView != null )
143
+ if ( uiComponent != null )
108
144
  {
109
- adView.setPlacement( placement );
145
+ uiComponent.setPlacement( placement );
110
146
  }
111
147
  }
112
148
 
@@ -114,9 +150,9 @@ class AppLovinMAXAdView
114
150
  {
115
151
  customData = value;
116
152
 
117
- if ( adView != null )
153
+ if ( uiComponent != null )
118
154
  {
119
- adView.setCustomData( customData );
155
+ uiComponent.setCustomData( customData );
120
156
  }
121
157
  }
122
158
 
@@ -124,9 +160,9 @@ class AppLovinMAXAdView
124
160
  {
125
161
  adaptiveBannerEnabled = enabled;
126
162
 
127
- if ( adView != null )
163
+ if ( uiComponent != null )
128
164
  {
129
- adView.setExtraParameter( "adaptive_banner", Boolean.toString( enabled ) );
165
+ uiComponent.setAdaptiveBannerEnabled( adaptiveBannerEnabled );
130
166
  }
131
167
  }
132
168
 
@@ -134,16 +170,9 @@ class AppLovinMAXAdView
134
170
  {
135
171
  autoRefresh = enabled;
136
172
 
137
- if ( adView != null )
173
+ if ( uiComponent != null )
138
174
  {
139
- if ( autoRefresh )
140
- {
141
- adView.startAutoRefresh();
142
- }
143
- else
144
- {
145
- adView.stopAutoRefresh();
146
- }
175
+ uiComponent.setAutoRefresh( enabled );
147
176
  }
148
177
  }
149
178
 
@@ -173,18 +202,9 @@ class AppLovinMAXAdView
173
202
  {
174
203
  super.requestLayout();
175
204
 
176
- // https://stackoverflow.com/a/39838774/5477988
177
- // This is required to ensure ad refreshes render correctly in RN Android due to known issue where `getWidth()` and `getHeight()` return 0 on attach
178
- if ( adView != null )
205
+ if ( uiComponent != null )
179
206
  {
180
- int currentWidthPx = getWidth();
181
- int currentHeightPx = getHeight();
182
-
183
- adView.measure(
184
- MeasureSpec.makeMeasureSpec( currentWidthPx, MeasureSpec.EXACTLY ),
185
- MeasureSpec.makeMeasureSpec( currentHeightPx, MeasureSpec.EXACTLY )
186
- );
187
- adView.layout( 0, 0, currentWidthPx, currentHeightPx );
207
+ uiComponent.measureAndLayout( 0, 0, getWidth(), getHeight() );
188
208
  }
189
209
  }
190
210
 
@@ -193,9 +213,9 @@ class AppLovinMAXAdView
193
213
  {
194
214
  super.onDetachedFromWindow();
195
215
 
196
- if ( adView != null )
216
+ if ( uiComponent != null )
197
217
  {
198
- adView.stopAutoRefresh();
218
+ uiComponent.setAutoRefresh( false );
199
219
  }
200
220
  }
201
221
 
@@ -204,20 +224,26 @@ class AppLovinMAXAdView
204
224
  {
205
225
  super.onAttachedToWindow();
206
226
 
207
- if ( adView != null )
227
+ if ( uiComponent != null )
208
228
  {
209
- adView.startAutoRefresh();
229
+ uiComponent.setAutoRefresh( autoRefresh );
210
230
  }
211
231
  }
212
232
 
233
+ // Invoked via ViewManager.onAfterUpdateTransaction() after all the JavaScript properties are
234
+ // set when mounting AdView
235
+ public void onSetProps()
236
+ {
237
+ maybeAttachAdView();
238
+ }
239
+
213
240
  private void maybeAttachAdView()
214
241
  {
215
242
  // Re-assign in case of race condition
216
243
  final String adUnitId = this.adUnitId;
217
244
  final MaxAdFormat adFormat = this.adFormat;
218
245
 
219
- // Run after 0.25 sec delay to allow all properties to set
220
- postDelayed( () -> {
246
+ reactContext.runOnUiQueueThread( () -> {
221
247
 
222
248
  if ( AppLovinMAXModule.getInstance().getSdk() == null )
223
249
  {
@@ -227,152 +253,86 @@ class AppLovinMAXAdView
227
253
 
228
254
  if ( TextUtils.isEmpty( adUnitId ) )
229
255
  {
230
- AppLovinMAXModule.e( "Attempting to attach MaxAdView without Ad Unit ID" );
256
+ AppLovinMAXModule.e( "Attempting to attach a native UI component without Ad Unit ID" );
231
257
  return;
232
258
  }
233
259
 
234
260
  if ( adFormat == null )
235
261
  {
236
- AppLovinMAXModule.e( "Attempting to attach MaxAdView without ad format" );
262
+ AppLovinMAXModule.e( "Attempting to attach a native UI component without ad format" );
237
263
  return;
238
264
  }
239
265
 
240
- if ( adView != null )
266
+ if ( uiComponent != null )
241
267
  {
242
- AppLovinMAXModule.e( "Attempting to re-attach with existing MaxAdView: " + adView );
268
+ AppLovinMAXModule.e( "Attempting to re-attach with existing native UI component: " + uiComponent.getAdView() );
243
269
  return;
244
270
  }
245
271
 
246
- AppLovinMAXModule.d( "Attaching MaxAdView for " + adUnitId );
272
+ AppLovinMAXModule.d( "Attaching a native UI component for " + adUnitId );
247
273
 
248
- adView = new MaxAdView( adUnitId, adFormat, AppLovinMAXModule.getInstance().getSdk(), reactContext );
249
- adView.setListener( this );
250
- adView.setRevenueListener( this );
251
- adView.setPlacement( placement );
252
- adView.setCustomData( customData );
253
- adView.setExtraParameter( "adaptive_banner", Boolean.toString( adaptiveBannerEnabled ) );
254
- // Set this extra parameter to work around a SDK bug that ignores calls to stopAutoRefresh()
255
- adView.setExtraParameter( "allow_pause_auto_refresh_immediately", "true" );
256
-
257
- if ( extraParameters != null )
274
+ uiComponent = preloadedUiComponentInstances.get( adUnitId );
275
+ if ( uiComponent != null )
258
276
  {
259
- for ( Map.Entry<String, Object> entry : extraParameters.entrySet() )
277
+ // Attach the preloaded uiComponent if possible, otherwise create a new one for the
278
+ // same adUnitId
279
+ if ( !uiComponent.hasContainerView() )
260
280
  {
261
- adView.setExtraParameter( entry.getKey(), (String) entry.getValue() );
281
+ uiComponent.setAutoRefresh( autoRefresh );
282
+ uiComponent.attachAdView( AppLovinMAXAdView.this );
283
+ return;
262
284
  }
263
285
  }
264
286
 
265
- if ( localExtraParameters != null )
266
- {
267
- for ( Map.Entry<String, Object> entry : localExtraParameters.entrySet() )
268
- {
269
- adView.setLocalExtraParameter( entry.getKey(), entry.getValue() );
270
- }
271
- }
287
+ uiComponent = new AppLovinMAXAdViewUiComponent( adUnitId, adFormat, reactContext );
288
+ uiComponentInstances.put( adUnitId, uiComponent );
272
289
 
273
- if ( autoRefresh )
274
- {
275
- adView.startAutoRefresh();
276
- }
277
- else
278
- {
279
- adView.stopAutoRefresh();
280
- }
290
+ uiComponent.setPlacement( placement );
291
+ uiComponent.setCustomData( customData );
292
+ uiComponent.setExtraParameters( extraParameters );
293
+ uiComponent.setLocalExtraParameters( localExtraParameters );
294
+ uiComponent.setAdaptiveBannerEnabled( adaptiveBannerEnabled );
295
+ uiComponent.setAutoRefresh( autoRefresh );
296
+
297
+ uiComponent.attachAdView( AppLovinMAXAdView.this );
281
298
 
282
299
  if ( loadOnMount )
283
300
  {
284
- adView.loadAd();
301
+ uiComponent.loadAd();
285
302
  }
286
-
287
- addView( adView );
288
-
289
- adViewInstances.put( adUnitId, adView );
290
- }, 250 );
303
+ } );
291
304
  }
292
305
 
293
306
  public void loadAd()
294
307
  {
295
- if ( adView == null )
308
+ if ( uiComponent == null )
296
309
  {
297
- AppLovinMAXModule.e( "Attempting to load uninitialized MaxAdView for " + adUnitId );
310
+ AppLovinMAXModule.e( "Attempting to load uninitialized native UI component for " + adUnitId );
298
311
  return;
299
312
  }
300
313
 
301
- adView.loadAd();
314
+ uiComponent.loadAd();
302
315
  }
303
316
 
304
317
  public void destroy()
305
318
  {
306
- if ( adView != null )
319
+ if ( uiComponent != null )
307
320
  {
308
- AppLovinMAXModule.d( "Unmounting MaxAdView: " + adView );
309
-
310
- adViewInstances.remove( adView.getAdUnitId() );
321
+ AppLovinMAXModule.d( "Unmounting the native UI component: " + uiComponent.getAdView() );
311
322
 
312
- removeView( adView );
323
+ uiComponent.detachAdView();
313
324
 
314
- adView.setListener( null );
315
- adView.setRevenueListener( null );
316
- adView.destroy();
325
+ AppLovinMAXAdViewUiComponent preloadedUiComponent = preloadedUiComponentInstances.get( adUnitId );
317
326
 
318
- adView = null;
327
+ if ( uiComponent == preloadedUiComponent )
328
+ {
329
+ uiComponent.setAutoRefresh( false );
330
+ }
331
+ else
332
+ {
333
+ uiComponentInstances.remove( adUnitId );
334
+ uiComponent.destroy();
335
+ }
319
336
  }
320
337
  }
321
-
322
- @Override
323
- public void onAdLoaded(final MaxAd ad)
324
- {
325
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
326
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdLoadedEvent", adInfo );
327
- }
328
-
329
- @Override
330
- public void onAdLoadFailed(final String adUnitId, final MaxError error)
331
- {
332
- WritableMap adLoadFailedInfo = AppLovinMAXModule.getInstance().getAdLoadFailedInfo( adUnitId, error );
333
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdLoadFailedEvent", adLoadFailedInfo );
334
- }
335
-
336
- @Override
337
- public void onAdDisplayFailed(final MaxAd ad, final MaxError error)
338
- {
339
- WritableMap adDisplayFailedInfo = AppLovinMAXModule.getInstance().getAdDisplayFailedInfo( ad, error );
340
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdDisplayFailedEvent", adDisplayFailedInfo );
341
- }
342
-
343
- @Override
344
- public void onAdClicked(final MaxAd ad)
345
- {
346
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
347
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdClickedEvent", adInfo );
348
- }
349
-
350
- @Override
351
- public void onAdExpanded(final MaxAd ad)
352
- {
353
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
354
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdExpandedEvent", adInfo );
355
- }
356
-
357
- @Override
358
- public void onAdCollapsed(final MaxAd ad)
359
- {
360
- WritableMap adInfo = AppLovinMAXModule.getInstance().getAdInfo( ad );
361
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdCollapsedEvent", adInfo );
362
- }
363
-
364
- @Override
365
- public void onAdRevenuePaid(final MaxAd ad)
366
- {
367
- WritableMap adRevenueInfo = AppLovinMAXModule.getInstance().getAdRevenueInfo( ad );
368
- reactContext.getJSModule( RCTEventEmitter.class ).receiveEvent( getId(), "onAdRevenuePaidEvent", adRevenueInfo );
369
- }
370
-
371
- /// Deprecated Callbacks
372
-
373
- @Override
374
- public void onAdDisplayed(final MaxAd ad) { }
375
-
376
- @Override
377
- public void onAdHidden(final MaxAd ad) { }
378
338
  }