cloudx-react-native 3.8.0 → 3.10.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.
- package/README.md +1 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/cloudxreactnative/CloudXAdEvents.kt +10 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXAdInfo.kt +41 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXAdView.kt +1 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXModuleImpl.kt +14 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXNativeAdView.kt +718 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXNativeAdViewManagerImpl.kt +119 -0
- package/android/src/main/java/com/cloudxreactnative/CloudXPackage.kt +4 -1
- package/android/src/main/res/layout/cloudx_rn_native_media_banner_template.xml +100 -0
- package/android/src/main/res/layout/cloudx_rn_native_medium_template.xml +99 -0
- package/android/src/main/res/layout/cloudx_rn_native_small_template.xml +72 -0
- package/android/src/main/res/layout/cloudx_rn_native_vertical_media_template.xml +117 -0
- package/android/src/newarch/com/cloudxreactnative/CloudXModule.kt +2 -0
- package/android/src/newarch/com/cloudxreactnative/CloudXNativeAdViewManager.kt +86 -0
- package/android/src/oldarch/com/cloudxreactnative/CloudXModule.kt +2 -0
- package/android/src/oldarch/com/cloudxreactnative/CloudXNativeAdViewManager.kt +118 -0
- package/android/src/test/java/com/cloudxreactnative/CloudXModuleImplArbiterBidsTest.kt +3 -3
- package/android/src/test/java/com/cloudxreactnative/CloudXModuleImplThreadingTest.kt +91 -0
- package/android/src/test/java/com/cloudxreactnative/FakeReadable.kt +2 -2
- package/cloudx-react-native.podspec +2 -1
- package/ios/CloudX.h +8 -0
- package/ios/CloudX.mm +164 -28
- package/ios/CloudXAdView.mm +2 -0
- package/ios/CloudXNativeAdView.h +75 -0
- package/ios/CloudXNativeAdView.mm +979 -0
- package/ios/CloudXNativeAdViewManager.h +12 -0
- package/ios/CloudXNativeAdViewManager.mm +119 -0
- package/ios/PrivacyInfo.xcprivacy +20 -0
- package/lib/commonjs/CloudX.js +4 -0
- package/lib/commonjs/CloudX.js.map +1 -1
- package/lib/commonjs/CloudXAdViewBase.js +9 -97
- package/lib/commonjs/CloudXAdViewBase.js.map +1 -1
- package/lib/commonjs/CloudXErrorCode.js +2 -0
- package/lib/commonjs/CloudXErrorCode.js.map +1 -1
- package/lib/commonjs/CloudXNativeAdView.js +331 -0
- package/lib/commonjs/CloudXNativeAdView.js.map +1 -0
- package/lib/commonjs/CloudXNativeAdViewComponents.js +252 -0
- package/lib/commonjs/CloudXNativeAdViewComponents.js.map +1 -0
- package/lib/commonjs/CloudXNativeAdViewProvider.js +117 -0
- package/lib/commonjs/CloudXNativeAdViewProvider.js.map +1 -0
- package/lib/commonjs/extraParameters.js +52 -0
- package/lib/commonjs/extraParameters.js.map +1 -0
- package/lib/commonjs/hooks.js +34 -0
- package/lib/commonjs/hooks.js.map +1 -1
- package/lib/commonjs/index.js +72 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/CloudXAdViewNativeComponent.js.map +1 -1
- package/lib/commonjs/specs/CloudXNativeAdViewNativeComponent.js +41 -0
- package/lib/commonjs/specs/CloudXNativeAdViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/NativeCloudX.js.map +1 -1
- package/lib/commonjs/types/NativeAd.js +70 -0
- package/lib/commonjs/types/NativeAd.js.map +1 -0
- package/lib/commonjs/types/index.js +13 -0
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/commonjs/useCloudXSdkInitialization.js +75 -0
- package/lib/commonjs/useCloudXSdkInitialization.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/CloudX.js +4 -0
- package/lib/module/CloudX.js.map +1 -1
- package/lib/module/CloudXAdViewBase.js +8 -96
- package/lib/module/CloudXAdViewBase.js.map +1 -1
- package/lib/module/CloudXErrorCode.js +2 -0
- package/lib/module/CloudXErrorCode.js.map +1 -1
- package/lib/module/CloudXNativeAdView.js +324 -0
- package/lib/module/CloudXNativeAdView.js.map +1 -0
- package/lib/module/CloudXNativeAdViewComponents.js +240 -0
- package/lib/module/CloudXNativeAdViewComponents.js.map +1 -0
- package/lib/module/CloudXNativeAdViewProvider.js +110 -0
- package/lib/module/CloudXNativeAdViewProvider.js.map +1 -0
- package/lib/module/extraParameters.js +45 -0
- package/lib/module/extraParameters.js.map +1 -0
- package/lib/module/hooks.js +34 -0
- package/lib/module/hooks.js.map +1 -1
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/CloudXAdViewNativeComponent.js.map +1 -1
- package/lib/module/specs/CloudXNativeAdViewNativeComponent.js +35 -0
- package/lib/module/specs/CloudXNativeAdViewNativeComponent.js.map +1 -0
- package/lib/module/specs/NativeCloudX.js.map +1 -1
- package/lib/module/types/NativeAd.js +68 -0
- package/lib/module/types/NativeAd.js.map +1 -0
- package/lib/module/types/index.js +1 -0
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/useCloudXSdkInitialization.js +68 -0
- package/lib/module/useCloudXSdkInitialization.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/CloudX.d.ts.map +1 -1
- package/lib/typescript/src/CloudXAdViewBase.d.ts.map +1 -1
- package/lib/typescript/src/CloudXErrorCode.d.ts +2 -0
- package/lib/typescript/src/CloudXErrorCode.d.ts.map +1 -1
- package/lib/typescript/src/CloudXNativeAdView.d.ts +24 -0
- package/lib/typescript/src/CloudXNativeAdView.d.ts.map +1 -0
- package/lib/typescript/src/CloudXNativeAdViewComponents.d.ts +67 -0
- package/lib/typescript/src/CloudXNativeAdViewComponents.d.ts.map +1 -0
- package/lib/typescript/src/CloudXNativeAdViewProvider.d.ts +72 -0
- package/lib/typescript/src/CloudXNativeAdViewProvider.d.ts.map +1 -0
- package/lib/typescript/src/extraParameters.d.ts +4 -0
- package/lib/typescript/src/extraParameters.d.ts.map +1 -0
- package/lib/typescript/src/hooks.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/CloudXAdViewNativeComponent.d.ts +1 -0
- package/lib/typescript/src/specs/CloudXAdViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/specs/CloudXNativeAdViewNativeComponent.d.ts +103 -0
- package/lib/typescript/src/specs/CloudXNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeCloudX.d.ts +1 -0
- package/lib/typescript/src/specs/NativeCloudX.d.ts.map +1 -1
- package/lib/typescript/src/types/AdInfo.d.ts +6 -1
- package/lib/typescript/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/src/types/CloudX.d.ts +2 -0
- package/lib/typescript/src/types/CloudX.d.ts.map +1 -1
- package/lib/typescript/src/types/NativeAd.d.ts +114 -0
- package/lib/typescript/src/types/NativeAd.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +2 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/useCloudXSdkInitialization.d.ts +16 -0
- package/lib/typescript/src/useCloudXSdkInitialization.d.ts.map +1 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/lib/typescript/src/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/CloudX.ts +5 -0
- package/src/CloudXAdViewBase.tsx +9 -125
- package/src/CloudXErrorCode.ts +3 -0
- package/src/CloudXNativeAdView.tsx +419 -0
- package/src/CloudXNativeAdViewComponents.tsx +203 -0
- package/src/CloudXNativeAdViewProvider.tsx +149 -0
- package/src/extraParameters.ts +65 -0
- package/src/hooks.ts +38 -0
- package/src/index.ts +24 -0
- package/src/specs/CloudXAdViewNativeComponent.ts +1 -0
- package/src/specs/CloudXNativeAdViewNativeComponent.ts +137 -0
- package/src/specs/NativeCloudX.ts +1 -0
- package/src/types/AdInfo.ts +8 -1
- package/src/types/CloudX.ts +3 -0
- package/src/types/NativeAd.ts +125 -0
- package/src/types/index.ts +7 -0
- package/src/useCloudXSdkInitialization.ts +73 -0
- package/src/version.ts +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@ Full integration docs live in the public docs site. Keep setup guides, ad-format
|
|
|
10
10
|
- Ad format guides:
|
|
11
11
|
- [Banner and MREC ads](https://docs.cloudx.io/en/react-native/ad-formats/banner-mrec)
|
|
12
12
|
- [Interstitial ads](https://docs.cloudx.io/en/react-native/ad-formats/interstitial)
|
|
13
|
+
- [Native ads](https://docs.cloudx.io/en/react-native/ad-formats/native)
|
|
13
14
|
- [Rewarded ads](https://docs.cloudx.io/en/react-native/ad-formats/rewarded)
|
|
14
15
|
- [React Native changelog](https://docs.cloudx.io/en/react-native/changelog)
|
|
15
16
|
|
package/android/build.gradle
CHANGED
|
@@ -158,7 +158,7 @@ repositories {
|
|
|
158
158
|
dependencies {
|
|
159
159
|
implementation "com.facebook.react:react-native:0.76.2"
|
|
160
160
|
|
|
161
|
-
implementation "io.cloudx:sdk:4.
|
|
161
|
+
implementation "io.cloudx:sdk:4.9.0"
|
|
162
162
|
|
|
163
163
|
testImplementation "junit:junit:4.13.2"
|
|
164
164
|
testImplementation "io.mockk:mockk:1.13.10"
|
|
@@ -52,4 +52,14 @@ object CloudXAdEvents {
|
|
|
52
52
|
const val ON_REWARDED_AD_RECEIVED_REWARD_EVENT = "OnRewardedAdReceivedRewardEvent"
|
|
53
53
|
const val ON_REWARDED_AD_REVENUE_PAID = "OnRewardedAdRevenuePaid"
|
|
54
54
|
|
|
55
|
+
|
|
56
|
+
// In-tree Native Ad View component (CloudXNativeAdView) per-view direct events.
|
|
57
|
+
// These strings are both the event key and the JS prop registrationName.
|
|
58
|
+
const val ON_NATIVE_AD_VIEW_LOADED_EVENT = "onAdLoadedEvent"
|
|
59
|
+
const val ON_NATIVE_AD_VIEW_LOAD_FAILED_EVENT = "onAdLoadFailedEvent"
|
|
60
|
+
const val ON_NATIVE_AD_VIEW_DISPLAY_FAILED_EVENT = "onAdDisplayFailedEvent"
|
|
61
|
+
const val ON_NATIVE_AD_VIEW_CLICKED_EVENT = "onAdClickedEvent"
|
|
62
|
+
const val ON_NATIVE_AD_VIEW_EXPIRED_EVENT = "onAdExpiredEvent"
|
|
63
|
+
const val ON_NATIVE_AD_VIEW_CLOSED_EVENT = "onAdClosedEvent"
|
|
64
|
+
const val ON_NATIVE_AD_VIEW_REVENUE_PAID_EVENT = "onAdRevenuePaidEvent"
|
|
55
65
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
package com.cloudxreactnative
|
|
2
2
|
|
|
3
|
+
import android.graphics.Bitmap
|
|
4
|
+
import android.util.Base64
|
|
3
5
|
import com.facebook.react.bridge.Arguments
|
|
4
6
|
import com.facebook.react.bridge.WritableMap
|
|
5
7
|
import io.cloudx.sdk.CloudXAd
|
|
6
8
|
import io.cloudx.sdk.CloudXError
|
|
9
|
+
import java.io.ByteArrayOutputStream
|
|
7
10
|
|
|
8
11
|
fun getAdInfo(ad: CloudXAd): WritableMap {
|
|
9
12
|
val map = Arguments.createMap()
|
|
@@ -12,11 +15,35 @@ fun getAdInfo(ad: CloudXAd): WritableMap {
|
|
|
12
15
|
map.putString("networkName", ad.networkName)
|
|
13
16
|
map.putString("networkPlacement", ad.networkPlacement ?: "")
|
|
14
17
|
map.putString("placement", ad.placement ?: "")
|
|
18
|
+
map.putString("creativeId", ad.creativeId ?: "")
|
|
15
19
|
map.putDouble("revenue", ad.revenue)
|
|
16
20
|
map.putMap("adValues", ad.adValues.toWritableMap())
|
|
21
|
+
|
|
17
22
|
return map
|
|
18
23
|
}
|
|
19
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Icon encoding for CloudXNativeAdView's codegen-typed `nativeAdJson`
|
|
27
|
+
* direct-event field, which can't carry a nested WritableMap. Capped at 96px
|
|
28
|
+
* because the encoded string crosses the bridge on every native-ad callback.
|
|
29
|
+
*/
|
|
30
|
+
internal fun bitmapToBase64Png(bitmap: Bitmap): String? {
|
|
31
|
+
val maxDimension = 96
|
|
32
|
+
val scaled = if (maxOf(bitmap.width, bitmap.height) > maxDimension) {
|
|
33
|
+
val scale = maxDimension.toFloat() / maxOf(bitmap.width, bitmap.height)
|
|
34
|
+
Bitmap.createScaledBitmap(bitmap, (bitmap.width * scale).toInt(), (bitmap.height * scale).toInt(), true)
|
|
35
|
+
} else {
|
|
36
|
+
bitmap
|
|
37
|
+
}
|
|
38
|
+
return try {
|
|
39
|
+
val stream = ByteArrayOutputStream()
|
|
40
|
+
scaled.compress(Bitmap.CompressFormat.PNG, 100, stream)
|
|
41
|
+
Base64.encodeToString(stream.toByteArray(), Base64.NO_WRAP)
|
|
42
|
+
} catch (oom: OutOfMemoryError) {
|
|
43
|
+
null
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
20
47
|
fun Map<String, String>.toWritableMap(): WritableMap {
|
|
21
48
|
val map = Arguments.createMap()
|
|
22
49
|
for ((key, value) in this) {
|
|
@@ -40,6 +67,20 @@ fun getAdDisplayFailedInfo(ad: CloudXAd, error: CloudXError): WritableMap {
|
|
|
40
67
|
return map
|
|
41
68
|
}
|
|
42
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Minimal `onAdDisplayFailed` payload for paths that have no loaded [CloudXAd]
|
|
72
|
+
* to describe (e.g. `renderNativeAd` called before `onAdLoaded`). Carries the
|
|
73
|
+
* same `{adUnitId, code, message}` shape as [getNoActivityDisplayFailedInfo]
|
|
74
|
+
* but with a real [CloudXError] instead of the sentinel -1 code.
|
|
75
|
+
*/
|
|
76
|
+
fun getAdDisplayFailedInfo(adUnitId: String, error: CloudXError): WritableMap {
|
|
77
|
+
val map = Arguments.createMap()
|
|
78
|
+
map.putString("adUnitId", adUnitId)
|
|
79
|
+
map.putInt("code", error.code.code)
|
|
80
|
+
map.putString("message", error.message)
|
|
81
|
+
return map
|
|
82
|
+
}
|
|
83
|
+
|
|
43
84
|
/**
|
|
44
85
|
* Synthetic display-failure payload for the no-current-activity show path.
|
|
45
86
|
* Mirrors the iOS no-view-controller payload ({adUnitId, code: -1, message})
|
|
@@ -209,6 +209,7 @@ class CloudXAdView(private val reactContext: ThemedReactContext) : FrameLayout(r
|
|
|
209
209
|
map.putString("networkName", ad.networkName)
|
|
210
210
|
map.putString("networkPlacement", ad.networkPlacement ?: "")
|
|
211
211
|
map.putString("placement", ad.placement ?: "")
|
|
212
|
+
map.putString("creativeId", ad.creativeId ?: "")
|
|
212
213
|
map.putDouble("revenue", ad.revenue)
|
|
213
214
|
/*
|
|
214
215
|
* The SDK types adValues as Map<String, String>, so the cast is safe
|
|
@@ -115,6 +115,18 @@ class CloudXModuleImpl(private val reactApplicationContext: ReactApplicationCont
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
fun showMediationDebugger(promise: Promise) {
|
|
119
|
+
onUiThread {
|
|
120
|
+
if (!CloudX.isInitialized()) {
|
|
121
|
+
promise.resolve(false)
|
|
122
|
+
return@onUiThread
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
CloudX.showMediationDebugger(maybeGetCurrentActivity() ?: reactApplicationContext)
|
|
126
|
+
promise.resolve(true)
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
118
130
|
fun initialize(pluginVersion: String, appKey: String, promise: Promise) {
|
|
119
131
|
onUiThread {
|
|
120
132
|
val config = CloudXInitializationConfiguration.builder(appKey)
|
|
@@ -1169,6 +1181,8 @@ class CloudXModuleImpl(private val reactApplicationContext: ReactApplicationCont
|
|
|
1169
1181
|
override fun onHostPause() {}
|
|
1170
1182
|
|
|
1171
1183
|
override fun onHostDestroy() {
|
|
1184
|
+
// React Native drops its Activity here, so the cached one must go too.
|
|
1185
|
+
currentActivity = null
|
|
1172
1186
|
// Make copy because destroyAdView() removes from adViews
|
|
1173
1187
|
val adViewsCopy = HashMap(adViewAdFormats)
|
|
1174
1188
|
for ((adUnitId, adFormat) in adViewsCopy) {
|