react-native-google-mobile-ads 13.1.0 → 13.2.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/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsBannerAdViewManager.java +18 -14
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java +3 -3
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsFullScreenAdModule.kt +1 -1
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeAdView.java +42 -2
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerComponent.m +16 -1
- package/lib/commonjs/ads/BaseAd.js +21 -2
- package/lib/commonjs/ads/BaseAd.js.map +1 -1
- package/lib/commonjs/common/debounce.js +21 -0
- package/lib/commonjs/common/debounce.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/ads/BaseAd.js +21 -2
- package/lib/module/ads/BaseAd.js.map +1 -1
- package/lib/module/common/debounce.js +14 -0
- package/lib/module/common/debounce.js.map +1 -0
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/ads/BaseAd.d.ts.map +1 -1
- package/lib/typescript/common/debounce.d.ts +2 -0
- package/lib/typescript/common/debounce.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/types/BannerAdProps.d.ts +7 -0
- package/lib/typescript/types/BannerAdProps.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/ads/BaseAd.tsx +23 -3
- package/src/common/debounce.ts +15 -0
- package/src/index.ts +1 -1
- package/src/types/BannerAdProps.ts +5 -0
- package/src/version.ts +1 -1
|
@@ -31,7 +31,6 @@ import com.facebook.react.uimanager.ThemedReactContext;
|
|
|
31
31
|
import com.facebook.react.uimanager.UIManagerHelper;
|
|
32
32
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
33
33
|
import com.facebook.react.uimanager.events.EventDispatcher;
|
|
34
|
-
import com.facebook.react.views.view.ReactViewGroup;
|
|
35
34
|
import com.google.android.gms.ads.AdListener;
|
|
36
35
|
import com.google.android.gms.ads.AdRequest;
|
|
37
36
|
import com.google.android.gms.ads.AdSize;
|
|
@@ -131,7 +130,7 @@ public class ReactNativeGoogleMobileAdsBannerAdViewManager
|
|
|
131
130
|
}
|
|
132
131
|
}
|
|
133
132
|
|
|
134
|
-
if (sizeList.size() > 0) {
|
|
133
|
+
if (sizeList.size() > 0 && !sizeList.contains(AdSize.FLUID)) {
|
|
135
134
|
AdSize adSize = sizeList.get(0);
|
|
136
135
|
WritableMap payload = Arguments.createMap();
|
|
137
136
|
payload.putDouble("width", adSize.getWidth());
|
|
@@ -211,21 +210,27 @@ public class ReactNativeGoogleMobileAdsBannerAdViewManager
|
|
|
211
210
|
@Override
|
|
212
211
|
public void onAdLoaded() {
|
|
213
212
|
AdSize adSize = adView.getAdSize();
|
|
214
|
-
int
|
|
213
|
+
int width, height;
|
|
215
214
|
if (reactViewGroup.getIsFluid()) {
|
|
216
|
-
// TODO size=FLUID is still not working
|
|
217
|
-
left = 0;
|
|
218
|
-
top = 0;
|
|
219
215
|
width = reactViewGroup.getWidth();
|
|
220
216
|
height = reactViewGroup.getHeight();
|
|
217
|
+
|
|
218
|
+
adView.addOnLayoutChangeListener(
|
|
219
|
+
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
|
|
220
|
+
WritableMap payload = Arguments.createMap();
|
|
221
|
+
payload.putDouble("width", PixelUtil.toDIPFromPixel(right - left));
|
|
222
|
+
payload.putDouble("height", PixelUtil.toDIPFromPixel(bottom - top));
|
|
223
|
+
sendEvent(reactViewGroup, EVENT_SIZE_CHANGE, payload);
|
|
224
|
+
});
|
|
221
225
|
} else {
|
|
222
|
-
left = adView.getLeft();
|
|
223
|
-
top = adView.getTop();
|
|
226
|
+
int left = adView.getLeft();
|
|
227
|
+
int top = adView.getTop();
|
|
224
228
|
width = adSize.getWidthInPixels(reactViewGroup.getContext());
|
|
225
229
|
height = adSize.getHeightInPixels(reactViewGroup.getContext());
|
|
230
|
+
|
|
231
|
+
adView.measure(width, height);
|
|
232
|
+
adView.layout(left, top, left + width, top + height);
|
|
226
233
|
}
|
|
227
|
-
adView.measure(width, height);
|
|
228
|
-
adView.layout(left, top, left + width, top + height);
|
|
229
234
|
|
|
230
235
|
WritableMap payload = Arguments.createMap();
|
|
231
236
|
payload.putDouble("width", PixelUtil.toDIPFromPixel(width));
|
|
@@ -269,7 +274,7 @@ public class ReactNativeGoogleMobileAdsBannerAdViewManager
|
|
|
269
274
|
}
|
|
270
275
|
|
|
271
276
|
@Nullable
|
|
272
|
-
private BaseAdView getAdView(
|
|
277
|
+
private BaseAdView getAdView(ViewGroup reactViewGroup) {
|
|
273
278
|
return (BaseAdView) reactViewGroup.getChildAt(0);
|
|
274
279
|
}
|
|
275
280
|
|
|
@@ -290,10 +295,9 @@ public class ReactNativeGoogleMobileAdsBannerAdViewManager
|
|
|
290
295
|
if (adView instanceof AdManagerAdView) {
|
|
291
296
|
if (sizes.contains(AdSize.FLUID)) {
|
|
292
297
|
reactViewGroup.setIsFluid(true);
|
|
293
|
-
((AdManagerAdView) adView).setAdSizes(AdSize.FLUID);
|
|
294
|
-
} else {
|
|
295
|
-
((AdManagerAdView) adView).setAdSizes(sizes.toArray(new AdSize[0]));
|
|
296
298
|
}
|
|
299
|
+
((AdManagerAdView) adView).setAdSizes(sizes.toArray(new AdSize[0]));
|
|
300
|
+
|
|
297
301
|
if (manualImpressionsEnabled) {
|
|
298
302
|
((AdManagerAdView) adView).setManualImpressionsEnabled(true);
|
|
299
303
|
}
|
package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java
CHANGED
|
@@ -20,11 +20,11 @@ package io.invertase.googlemobileads;
|
|
|
20
20
|
import android.os.Bundle;
|
|
21
21
|
import android.util.DisplayMetrics;
|
|
22
22
|
import android.view.Display;
|
|
23
|
+
import android.view.ViewGroup;
|
|
23
24
|
import com.facebook.react.bridge.Arguments;
|
|
24
25
|
import com.facebook.react.bridge.ReactContext;
|
|
25
26
|
import com.facebook.react.bridge.ReadableMap;
|
|
26
27
|
import com.facebook.react.bridge.WritableMap;
|
|
27
|
-
import com.facebook.react.views.view.ReactViewGroup;
|
|
28
28
|
import com.google.ads.mediation.admob.AdMobAdapter;
|
|
29
29
|
import com.google.android.gms.ads.AdError;
|
|
30
30
|
import com.google.android.gms.ads.AdRequest;
|
|
@@ -40,7 +40,7 @@ import javax.annotation.Nullable;
|
|
|
40
40
|
|
|
41
41
|
public class ReactNativeGoogleMobileAdsCommon {
|
|
42
42
|
|
|
43
|
-
static AdSize getAdSizeForAdaptiveBanner(String preDefinedAdSize,
|
|
43
|
+
static AdSize getAdSizeForAdaptiveBanner(String preDefinedAdSize, ViewGroup reactViewGroup) {
|
|
44
44
|
|
|
45
45
|
try {
|
|
46
46
|
Display display =
|
|
@@ -63,7 +63,7 @@ public class ReactNativeGoogleMobileAdsCommon {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
static AdSize getAdSize(String preDefinedAdSize,
|
|
66
|
+
static AdSize getAdSize(String preDefinedAdSize, ViewGroup reactViewGroup) {
|
|
67
67
|
if (preDefinedAdSize.matches(
|
|
68
68
|
"ADAPTIVE_BANNER|ANCHORED_ADAPTIVE_BANNER|INLINE_ADAPTIVE_BANNER")) {
|
|
69
69
|
return ReactNativeGoogleMobileAdsCommon.getAdSizeForAdaptiveBanner(
|
|
@@ -145,7 +145,7 @@ abstract class ReactNativeGoogleMobileAdsFullScreenAdModule<T>(
|
|
|
145
145
|
private val adUnitId: String,
|
|
146
146
|
private val adRequestOptions: ReadableMap
|
|
147
147
|
) : AdLoadCallback<T>() {
|
|
148
|
-
override fun onAdLoaded(ad: T) {
|
|
148
|
+
override fun onAdLoaded(ad: T & Any) {
|
|
149
149
|
try {
|
|
150
150
|
val adHelper = ReactNativeGoogleMobileAdsAdHelper(ad)
|
|
151
151
|
var eventType = ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_LOADED
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
package io.invertase.googlemobileads.common;
|
|
2
2
|
|
|
3
3
|
import android.content.Context;
|
|
4
|
-
import
|
|
4
|
+
import android.widget.FrameLayout;
|
|
5
5
|
import com.google.android.gms.ads.AdRequest;
|
|
6
6
|
import com.google.android.gms.ads.AdSize;
|
|
7
7
|
import java.util.List;
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Using FrameLayout instead of ReactViewGroup
|
|
11
|
+
*
|
|
12
|
+
* <p>This is because in the case of fluid ads, - JS side will usually not specify the ad height -
|
|
13
|
+
* Also, after loading the fluid ad, we need to measure the ad height and update the layout Which
|
|
14
|
+
* isn't possible with ReactViewGroup since it overrides requestLayout by a noop
|
|
15
|
+
*
|
|
16
|
+
* <p>See https://github.com/facebook/react-native/issues/17968 for more details
|
|
17
|
+
*/
|
|
18
|
+
public class ReactNativeAdView extends FrameLayout {
|
|
10
19
|
private AdRequest request;
|
|
11
20
|
private List<AdSize> sizes;
|
|
12
21
|
private String unitId;
|
|
@@ -14,6 +23,37 @@ public class ReactNativeAdView extends ReactViewGroup {
|
|
|
14
23
|
private boolean propsChanged;
|
|
15
24
|
private boolean isFluid;
|
|
16
25
|
|
|
26
|
+
@Override
|
|
27
|
+
public void requestLayout() {
|
|
28
|
+
super.requestLayout();
|
|
29
|
+
post(measureAndLayout);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* This ensures the adview is properly measured and laid out if its layout changed after being
|
|
34
|
+
* loaded This happens everytime for fluid ads, but cannot happen for fixed size ads loading
|
|
35
|
+
* additional content
|
|
36
|
+
*
|
|
37
|
+
* <p>See https://github.com/facebook/react-native/issues/17968 for more details
|
|
38
|
+
*/
|
|
39
|
+
private final Runnable measureAndLayout =
|
|
40
|
+
() -> {
|
|
41
|
+
/**
|
|
42
|
+
* For fluid ads, we usually don't specify the ad height from JS side, so mark it as
|
|
43
|
+
* unspecified and let it dynamically determine its size
|
|
44
|
+
*
|
|
45
|
+
* <p>See
|
|
46
|
+
* https://developers.google.com/ad-manager/mobile-ads-sdk/android/native/styles#fluid_size
|
|
47
|
+
*/
|
|
48
|
+
int heightMeasureSpec =
|
|
49
|
+
isFluid
|
|
50
|
+
? MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
|
|
51
|
+
: MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
|
|
52
|
+
|
|
53
|
+
measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY), heightMeasureSpec);
|
|
54
|
+
layout(getLeft(), getTop(), getRight(), getTop() + getHeight());
|
|
55
|
+
};
|
|
56
|
+
|
|
17
57
|
public ReactNativeAdView(final Context context) {
|
|
18
58
|
super(context);
|
|
19
59
|
}
|
|
@@ -44,6 +44,11 @@
|
|
|
44
44
|
if ([RNGoogleMobileAdsCommon isAdManagerUnit:_unitId]) {
|
|
45
45
|
_banner = [[GAMBannerView alloc] initWithAdSize:adSize];
|
|
46
46
|
|
|
47
|
+
if (GADAdSizeEqualToSize(adSize, GADAdSizeFluid)) {
|
|
48
|
+
_banner.frame = self.bounds;
|
|
49
|
+
_banner.autoresizingMask = (UIViewAutoresizingFlexibleWidth);
|
|
50
|
+
}
|
|
51
|
+
|
|
47
52
|
((GAMBannerView *)_banner).validAdSizes = _sizes;
|
|
48
53
|
((GAMBannerView *)_banner).appEventDelegate = self;
|
|
49
54
|
((GAMBannerView *)_banner).enableManualImpressions = [_manualImpressionsEnabled boolValue];
|
|
@@ -88,6 +93,16 @@
|
|
|
88
93
|
_propsChanged = true;
|
|
89
94
|
}
|
|
90
95
|
|
|
96
|
+
- (GADAdSize)getInitialAdSize {
|
|
97
|
+
for (NSValue *sizeValue in _sizes) {
|
|
98
|
+
GADAdSize adSize = GADAdSizeFromNSValue(sizeValue);
|
|
99
|
+
if (GADAdSizeEqualToSize(adSize, GADAdSizeFluid)) {
|
|
100
|
+
return GADAdSizeFluid;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return GADAdSizeFromNSValue(_sizes[0]);
|
|
104
|
+
}
|
|
105
|
+
|
|
91
106
|
- (void)requestAd {
|
|
92
107
|
#ifndef __LP64__
|
|
93
108
|
return; // prevent crash on 32bit
|
|
@@ -98,7 +113,7 @@
|
|
|
98
113
|
return;
|
|
99
114
|
}
|
|
100
115
|
|
|
101
|
-
[self initBanner:
|
|
116
|
+
[self initBanner:[self getInitialAdSize]];
|
|
102
117
|
[self addSubview:_banner];
|
|
103
118
|
_banner.adUnitID = _unitId;
|
|
104
119
|
[self setRequested:YES];
|
|
@@ -5,11 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.BaseAd = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
8
9
|
var _common = require("../common");
|
|
9
10
|
var _NativeError = require("../internal/NativeError");
|
|
10
11
|
var _GoogleMobileAdsBannerViewNativeComponent = _interopRequireDefault(require("./GoogleMobileAdsBannerViewNativeComponent"));
|
|
11
12
|
var _BannerAdSize = require("../BannerAdSize");
|
|
12
13
|
var _validateAdRequestOptions = require("../validateAdRequestOptions");
|
|
14
|
+
var _debounce = require("../common/debounce");
|
|
13
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
16
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
17
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -41,6 +43,7 @@ const BaseAd = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
41
43
|
...props
|
|
42
44
|
} = _ref;
|
|
43
45
|
const [dimensions, setDimensions] = (0, _react.useState)([0, 0]);
|
|
46
|
+
const debouncedSetDimensions = (0, _debounce.debounce)(setDimensions, 100);
|
|
44
47
|
(0, _react.useEffect)(() => {
|
|
45
48
|
if (!unitId) {
|
|
46
49
|
throw new Error("BannerAd: 'unitId' expected a valid string unit ID.");
|
|
@@ -68,10 +71,11 @@ const BaseAd = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
68
71
|
const {
|
|
69
72
|
type
|
|
70
73
|
} = nativeEvent;
|
|
71
|
-
if (
|
|
74
|
+
if ((0, _common.isFunction)(props[type])) {
|
|
72
75
|
let eventHandler, eventPayload;
|
|
73
76
|
switch (type) {
|
|
74
77
|
case 'onAdLoaded':
|
|
78
|
+
case 'onSizeChange':
|
|
75
79
|
eventPayload = {
|
|
76
80
|
width: nativeEvent.width,
|
|
77
81
|
height: nativeEvent.height
|
|
@@ -107,7 +111,22 @@ const BaseAd = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
107
111
|
const width = Math.ceil(nativeEvent.width);
|
|
108
112
|
const height = Math.ceil(nativeEvent.height);
|
|
109
113
|
if (width && height && JSON.stringify([width, height]) !== JSON.stringify(dimensions)) {
|
|
110
|
-
|
|
114
|
+
/**
|
|
115
|
+
* On Android, it seems the ad size is not always the definitive on the first onAdLoaded event.
|
|
116
|
+
* So if we change the size here with an incorrect value, then we relayout the ad on native side
|
|
117
|
+
* and it might cause an incorrect size to be set.
|
|
118
|
+
*
|
|
119
|
+
* To reproduce this issue, go to the example app, on the "GAMBanner Fluid" example
|
|
120
|
+
* and reload the ad several times
|
|
121
|
+
*
|
|
122
|
+
* on my low-end Samsung A10s, it always took less than 100ms in debug mode to get the correct size
|
|
123
|
+
* hence the 100ms debounce
|
|
124
|
+
*/
|
|
125
|
+
if (sizes.includes(_BannerAdSize.GAMBannerAdSize.FLUID) && _reactNative.Platform.OS === 'android') {
|
|
126
|
+
debouncedSetDimensions([width, height]);
|
|
127
|
+
} else {
|
|
128
|
+
setDimensions([width, height]);
|
|
129
|
+
}
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_common","_NativeError","_GoogleMobileAdsBannerViewNativeComponent","_interopRequireDefault","_BannerAdSize","_validateAdRequestOptions","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","sizeRegex","BaseAd","React","forwardRef","_ref","ref","unitId","sizes","requestOptions","manualImpressionsEnabled","props","dimensions","setDimensions","useState","useEffect","Error","length","every","size","BannerAdSize","GAMBannerAdSize","test","parsedRequestOptions","JSON","stringify","validateAdRequestOptions","e","message","onNativeEvent","event","nativeEvent","type","isFunction","eventHandler","eventPayload","width","height","NativeError","fromEvent","name","data","handler","currency","precision","value","Math","ceil","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_common","_NativeError","_GoogleMobileAdsBannerViewNativeComponent","_interopRequireDefault","_BannerAdSize","_validateAdRequestOptions","_debounce","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","sizeRegex","BaseAd","React","forwardRef","_ref","ref","unitId","sizes","requestOptions","manualImpressionsEnabled","props","dimensions","setDimensions","useState","debouncedSetDimensions","debounce","useEffect","Error","length","every","size","BannerAdSize","GAMBannerAdSize","test","parsedRequestOptions","JSON","stringify","validateAdRequestOptions","e","message","onNativeEvent","event","nativeEvent","type","isFunction","eventHandler","eventPayload","width","height","NativeError","fromEvent","name","data","handler","currency","precision","value","Math","ceil","includes","FLUID","Platform","OS","style","createElement","request","exports","displayName"],"sourceRoot":"../../../src","sources":["ads/BaseAd.tsx"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.debounce = void 0;
|
|
7
|
+
const debounce = (func, waitFor) => {
|
|
8
|
+
let timeout = null;
|
|
9
|
+
const debounced = function () {
|
|
10
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
11
|
+
args[_key] = arguments[_key];
|
|
12
|
+
}
|
|
13
|
+
if (timeout !== null) {
|
|
14
|
+
clearTimeout(timeout);
|
|
15
|
+
}
|
|
16
|
+
timeout = setTimeout(() => func(...args), waitFor);
|
|
17
|
+
};
|
|
18
|
+
return debounced;
|
|
19
|
+
};
|
|
20
|
+
exports.debounce = debounce;
|
|
21
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["debounce","func","waitFor","timeout","debounced","_len","arguments","length","args","Array","_key","clearTimeout","setTimeout","exports"],"sourceRoot":"../../../src","sources":["common/debounce.ts"],"mappings":";;;;;;AAAO,MAAMA,QAAQ,GAAGA,CACtBC,IAAoC,EACpCC,OAAe,KACoB;EACnC,IAAIC,OAA6C,GAAG,IAAI;EAExD,MAAMC,SAAS,GAAG,SAAAA,CAAA,EAAwB;IAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAApBC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IACxB,IAAIP,OAAO,KAAK,IAAI,EAAE;MACpBQ,YAAY,CAACR,OAAO,CAAC;IACvB;IACAA,OAAO,GAAGS,UAAU,CAAC,MAAMX,IAAI,CAAC,GAAGO,IAAI,CAAC,EAAEN,OAAO,CAAC;EACpD,CAAC;EAED,OAAOE,SAAS;AAClB,CAAC;AAACS,OAAA,CAAAb,QAAA,GAAAA,QAAA"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var _exportNames = {
|
|
|
15
15
|
TestIds: true,
|
|
16
16
|
AdEventType: true,
|
|
17
17
|
BannerAdSize: true,
|
|
18
|
+
GAMBannerAdSize: true,
|
|
18
19
|
GAMAdEventType: true,
|
|
19
20
|
RewardedAdEventType: true,
|
|
20
21
|
AdsConsent: true,
|
|
@@ -103,6 +104,12 @@ Object.defineProperty(exports, "GAMBannerAd", {
|
|
|
103
104
|
return _GAMBannerAd.GAMBannerAd;
|
|
104
105
|
}
|
|
105
106
|
});
|
|
107
|
+
Object.defineProperty(exports, "GAMBannerAdSize", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function () {
|
|
110
|
+
return _BannerAdSize.GAMBannerAdSize;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
106
113
|
Object.defineProperty(exports, "GAMInterstitialAd", {
|
|
107
114
|
enumerable: true,
|
|
108
115
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_version","require","_MobileAds","_interopRequireWildcard","_AdsConsentDebugGeography","_AdsConsentPurposes","_AdsConsentSpecialFeatures","_AdsConsentStatus","_AdsConsentPrivacyOptionsRequirementStatus","_MaxAdContentRating","_TestIds","_AdEventType","_BannerAdSize","_GAMAdEventType","_RewardedAdEventType","_AdsConsent","_AppOpenAd","_InterstitialAd","_RewardedAd","_RewardedInterstitialAd","_BannerAd","_GAMBannerAd","_GAMInterstitialAd","_useAppOpenAd","_useInterstitialAd","_useRewardedAd","_useRewardedInterstitialAd","_constants","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set","SDK_VERSION","version"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_version","require","_MobileAds","_interopRequireWildcard","_AdsConsentDebugGeography","_AdsConsentPurposes","_AdsConsentSpecialFeatures","_AdsConsentStatus","_AdsConsentPrivacyOptionsRequirementStatus","_MaxAdContentRating","_TestIds","_AdEventType","_BannerAdSize","_GAMAdEventType","_RewardedAdEventType","_AdsConsent","_AppOpenAd","_InterstitialAd","_RewardedAd","_RewardedInterstitialAd","_BannerAd","_GAMBannerAd","_GAMInterstitialAd","_useAppOpenAd","_useInterstitialAd","_useRewardedAd","_useRewardedInterstitialAd","_constants","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set","SDK_VERSION","version"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}
|
package/lib/commonjs/version.js
CHANGED
package/lib/module/ads/BaseAd.js
CHANGED
|
@@ -17,11 +17,13 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import React, { useState, useEffect } from 'react';
|
|
20
|
+
import { Platform } from 'react-native';
|
|
20
21
|
import { isFunction } from '../common';
|
|
21
22
|
import { NativeError } from '../internal/NativeError';
|
|
22
23
|
import GoogleMobileAdsBannerView from './GoogleMobileAdsBannerViewNativeComponent';
|
|
23
24
|
import { BannerAdSize, GAMBannerAdSize } from '../BannerAdSize';
|
|
24
25
|
import { validateAdRequestOptions } from '../validateAdRequestOptions';
|
|
26
|
+
import { debounce } from '../common/debounce';
|
|
25
27
|
const sizeRegex = /([0-9]+)x([0-9]+)/;
|
|
26
28
|
export const BaseAd = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
27
29
|
let {
|
|
@@ -32,6 +34,7 @@ export const BaseAd = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
32
34
|
...props
|
|
33
35
|
} = _ref;
|
|
34
36
|
const [dimensions, setDimensions] = useState([0, 0]);
|
|
37
|
+
const debouncedSetDimensions = debounce(setDimensions, 100);
|
|
35
38
|
useEffect(() => {
|
|
36
39
|
if (!unitId) {
|
|
37
40
|
throw new Error("BannerAd: 'unitId' expected a valid string unit ID.");
|
|
@@ -59,10 +62,11 @@ export const BaseAd = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
59
62
|
const {
|
|
60
63
|
type
|
|
61
64
|
} = nativeEvent;
|
|
62
|
-
if (
|
|
65
|
+
if (isFunction(props[type])) {
|
|
63
66
|
let eventHandler, eventPayload;
|
|
64
67
|
switch (type) {
|
|
65
68
|
case 'onAdLoaded':
|
|
69
|
+
case 'onSizeChange':
|
|
66
70
|
eventPayload = {
|
|
67
71
|
width: nativeEvent.width,
|
|
68
72
|
height: nativeEvent.height
|
|
@@ -98,7 +102,22 @@ export const BaseAd = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
98
102
|
const width = Math.ceil(nativeEvent.width);
|
|
99
103
|
const height = Math.ceil(nativeEvent.height);
|
|
100
104
|
if (width && height && JSON.stringify([width, height]) !== JSON.stringify(dimensions)) {
|
|
101
|
-
|
|
105
|
+
/**
|
|
106
|
+
* On Android, it seems the ad size is not always the definitive on the first onAdLoaded event.
|
|
107
|
+
* So if we change the size here with an incorrect value, then we relayout the ad on native side
|
|
108
|
+
* and it might cause an incorrect size to be set.
|
|
109
|
+
*
|
|
110
|
+
* To reproduce this issue, go to the example app, on the "GAMBanner Fluid" example
|
|
111
|
+
* and reload the ad several times
|
|
112
|
+
*
|
|
113
|
+
* on my low-end Samsung A10s, it always took less than 100ms in debug mode to get the correct size
|
|
114
|
+
* hence the 100ms debounce
|
|
115
|
+
*/
|
|
116
|
+
if (sizes.includes(GAMBannerAdSize.FLUID) && Platform.OS === 'android') {
|
|
117
|
+
debouncedSetDimensions([width, height]);
|
|
118
|
+
} else {
|
|
119
|
+
setDimensions([width, height]);
|
|
120
|
+
}
|
|
102
121
|
}
|
|
103
122
|
}
|
|
104
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","isFunction","NativeError","GoogleMobileAdsBannerView","BannerAdSize","GAMBannerAdSize","validateAdRequestOptions","sizeRegex","BaseAd","forwardRef","_ref","ref","unitId","sizes","requestOptions","manualImpressionsEnabled","props","dimensions","setDimensions","Error","length","every","size","test","parsedRequestOptions","JSON","stringify","e","message","onNativeEvent","event","nativeEvent","type","eventHandler","eventPayload","width","height","fromEvent","name","data","handler","currency","precision","value","Math","ceil","
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","Platform","isFunction","NativeError","GoogleMobileAdsBannerView","BannerAdSize","GAMBannerAdSize","validateAdRequestOptions","debounce","sizeRegex","BaseAd","forwardRef","_ref","ref","unitId","sizes","requestOptions","manualImpressionsEnabled","props","dimensions","setDimensions","debouncedSetDimensions","Error","length","every","size","test","parsedRequestOptions","JSON","stringify","e","message","onNativeEvent","event","nativeEvent","type","eventHandler","eventPayload","width","height","fromEvent","name","data","handler","currency","precision","value","Math","ceil","includes","FLUID","OS","style","createElement","request","displayName"],"sourceRoot":"../../../src","sources":["ads/BaseAd.tsx"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const debounce = (func, waitFor) => {
|
|
2
|
+
let timeout = null;
|
|
3
|
+
const debounced = function () {
|
|
4
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
5
|
+
args[_key] = arguments[_key];
|
|
6
|
+
}
|
|
7
|
+
if (timeout !== null) {
|
|
8
|
+
clearTimeout(timeout);
|
|
9
|
+
}
|
|
10
|
+
timeout = setTimeout(() => func(...args), waitFor);
|
|
11
|
+
};
|
|
12
|
+
return debounced;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["debounce","func","waitFor","timeout","debounced","_len","arguments","length","args","Array","_key","clearTimeout","setTimeout"],"sourceRoot":"../../../src","sources":["common/debounce.ts"],"mappings":"AAAA,OAAO,MAAMA,QAAQ,GAAGA,CACtBC,IAAoC,EACpCC,OAAe,KACoB;EACnC,IAAIC,OAA6C,GAAG,IAAI;EAExD,MAAMC,SAAS,GAAG,SAAAA,CAAA,EAAwB;IAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAApBC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IACxB,IAAIP,OAAO,KAAK,IAAI,EAAE;MACpBQ,YAAY,CAACR,OAAO,CAAC;IACvB;IACAA,OAAO,GAAGS,UAAU,CAAC,MAAMX,IAAI,CAAC,GAAGO,IAAI,CAAC,EAAEN,OAAO,CAAC;EACpD,CAAC;EAED,OAAOE,SAAS;AAClB,CAAC"}
|
package/lib/module/index.js
CHANGED
|
@@ -28,7 +28,7 @@ export { AdsConsentPrivacyOptionsRequirementStatus } from './AdsConsentPrivacyOp
|
|
|
28
28
|
export { MaxAdContentRating } from './MaxAdContentRating';
|
|
29
29
|
export { TestIds } from './TestIds';
|
|
30
30
|
export { AdEventType } from './AdEventType';
|
|
31
|
-
export { BannerAdSize } from './BannerAdSize';
|
|
31
|
+
export { BannerAdSize, GAMBannerAdSize } from './BannerAdSize';
|
|
32
32
|
export { GAMAdEventType } from './GAMAdEventType';
|
|
33
33
|
export { RewardedAdEventType } from './RewardedAdEventType';
|
|
34
34
|
export { AdsConsent } from './AdsConsent';
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["version","SDK_VERSION","default","MobileAds","AdsConsentDebugGeography","AdsConsentPurposes","AdsConsentSpecialFeatures","AdsConsentStatus","AdsConsentPrivacyOptionsRequirementStatus","MaxAdContentRating","TestIds","AdEventType","BannerAdSize","GAMAdEventType","RewardedAdEventType","AdsConsent","AppOpenAd","InterstitialAd","RewardedAd","RewardedInterstitialAd","BannerAd","GAMBannerAd","GAMInterstitialAd","useAppOpenAd","useInterstitialAd","useRewardedAd","useRewardedInterstitialAd","RevenuePrecisions"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,WAAW;;AAEnC;AACA,OAAO,MAAMC,WAAW,GAAGD,OAAO;AAElC,SAASE,OAAO,EAAEC,SAAS,QAAQ,aAAa;AAChD,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,yCAAyC,QAAQ,6CAA6C;AACvG,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,YAAY,QAAQ,gBAAgB;
|
|
1
|
+
{"version":3,"names":["version","SDK_VERSION","default","MobileAds","AdsConsentDebugGeography","AdsConsentPurposes","AdsConsentSpecialFeatures","AdsConsentStatus","AdsConsentPrivacyOptionsRequirementStatus","MaxAdContentRating","TestIds","AdEventType","BannerAdSize","GAMBannerAdSize","GAMAdEventType","RewardedAdEventType","AdsConsent","AppOpenAd","InterstitialAd","RewardedAd","RewardedInterstitialAd","BannerAd","GAMBannerAd","GAMInterstitialAd","useAppOpenAd","useInterstitialAd","useRewardedAd","useRewardedInterstitialAd","RevenuePrecisions"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,WAAW;;AAEnC;AACA,OAAO,MAAMC,WAAW,GAAGD,OAAO;AAElC,SAASE,OAAO,EAAEC,SAAS,QAAQ,aAAa;AAChD,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,yCAAyC,QAAQ,6CAA6C;AACvG,SAASC,kBAAkB,QAAQ,sBAAsB;AACzD,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,YAAY,EAAEC,eAAe,QAAQ,gBAAgB;AAC9D,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,mBAAmB,QAAQ,uBAAuB;AAC3D,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,iBAAiB;AAC3C,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,aAAa,QAAQ,uBAAuB;AACrD,SAASC,yBAAyB,QAAQ,mCAAmC;AAC7E,SAASC,iBAAiB,QAAQ,oBAAoB;AACtD,cAAc,SAAS"}
|
package/lib/module/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAd.d.ts","sourceRoot":"","sources":["../../../src/ads/BaseAd.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA8B,MAAM,OAAO,CAAC;AASnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseAd.d.ts","sourceRoot":"","sources":["../../../src/ads/BaseAd.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAA8B,MAAM,OAAO,CAAC;AASnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK1D,eAAO,MAAM,MAAM,sNAkJjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../../src/common/debounce.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,uFAEV,MAAM,6BACW,IAW3B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "13.
|
|
1
|
+
export declare const SDK_VERSION = "13.2.0";
|
|
2
2
|
export { default, MobileAds } from './MobileAds';
|
|
3
3
|
export { AdsConsentDebugGeography } from './AdsConsentDebugGeography';
|
|
4
4
|
export { AdsConsentPurposes } from './AdsConsentPurposes';
|
|
@@ -8,7 +8,7 @@ export { AdsConsentPrivacyOptionsRequirementStatus } from './AdsConsentPrivacyOp
|
|
|
8
8
|
export { MaxAdContentRating } from './MaxAdContentRating';
|
|
9
9
|
export { TestIds } from './TestIds';
|
|
10
10
|
export { AdEventType } from './AdEventType';
|
|
11
|
-
export { BannerAdSize } from './BannerAdSize';
|
|
11
|
+
export { BannerAdSize, GAMBannerAdSize } from './BannerAdSize';
|
|
12
12
|
export { GAMAdEventType } from './GAMAdEventType';
|
|
13
13
|
export { RewardedAdEventType } from './RewardedAdEventType';
|
|
14
14
|
export { AdsConsent } from './AdsConsent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW,WAAU,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW,WAAU,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,cAAc,SAAS,CAAC"}
|
|
@@ -73,6 +73,13 @@ export interface BannerAdProps {
|
|
|
73
73
|
* See: https://developers.google.com/admob/android/impression-level-ad-revenue
|
|
74
74
|
*/
|
|
75
75
|
onPaid?: PaidEventListener;
|
|
76
|
+
/**
|
|
77
|
+
* Called when ad size dimensions changed
|
|
78
|
+
*/
|
|
79
|
+
onSizeChange?: (dimensions: {
|
|
80
|
+
width: number;
|
|
81
|
+
height: number;
|
|
82
|
+
}) => void;
|
|
76
83
|
}
|
|
77
84
|
/**
|
|
78
85
|
* An interface for a GAM Banner advert component.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BannerAdProps.d.ts","sourceRoot":"","sources":["../../../src/types/BannerAdProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAErE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"BannerAdProps.d.ts","sourceRoot":"","sources":["../../../src/types/BannerAdProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAErE;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACnE;;;;OAIG;IACH,KAAK,EAAE,OAAO,eAAe,CAAC,MAAM,OAAO,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;IAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC3C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "13.
|
|
1
|
+
export declare const version = "13.2.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-google-mobile-ads",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.2.0",
|
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
|
5
5
|
"description": "React Native Google Mobile Ads is an easy way to monetize mobile apps with targeted, in-app advertising.",
|
|
6
6
|
"main": "lib/commonjs/index.js",
|
package/src/ads/BaseAd.tsx
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import React, { useState, useEffect } from 'react';
|
|
20
|
-
import { NativeSyntheticEvent } from 'react-native';
|
|
20
|
+
import { NativeSyntheticEvent, Platform } from 'react-native';
|
|
21
21
|
import { isFunction } from '../common';
|
|
22
22
|
import { RevenuePrecisions } from '../common/constants';
|
|
23
23
|
import { NativeError } from '../internal/NativeError';
|
|
@@ -26,6 +26,7 @@ import type { NativeEvent } from './GoogleMobileAdsBannerViewNativeComponent';
|
|
|
26
26
|
import { BannerAdSize, GAMBannerAdSize } from '../BannerAdSize';
|
|
27
27
|
import { validateAdRequestOptions } from '../validateAdRequestOptions';
|
|
28
28
|
import { GAMBannerAdProps } from '../types/BannerAdProps';
|
|
29
|
+
import { debounce } from '../common/debounce';
|
|
29
30
|
|
|
30
31
|
const sizeRegex = /([0-9]+)x([0-9]+)/;
|
|
31
32
|
|
|
@@ -35,6 +36,8 @@ export const BaseAd = React.forwardRef<
|
|
|
35
36
|
>(({ unitId, sizes, requestOptions, manualImpressionsEnabled, ...props }, ref) => {
|
|
36
37
|
const [dimensions, setDimensions] = useState<(number | string)[]>([0, 0]);
|
|
37
38
|
|
|
39
|
+
const debouncedSetDimensions = debounce(setDimensions, 100);
|
|
40
|
+
|
|
38
41
|
useEffect(() => {
|
|
39
42
|
if (!unitId) {
|
|
40
43
|
throw new Error("BannerAd: 'unitId' expected a valid string unit ID.");
|
|
@@ -90,10 +93,11 @@ export const BaseAd = React.forwardRef<
|
|
|
90
93
|
};
|
|
91
94
|
const { type } = nativeEvent;
|
|
92
95
|
|
|
93
|
-
if (
|
|
96
|
+
if (isFunction(props[type])) {
|
|
94
97
|
let eventHandler, eventPayload;
|
|
95
98
|
switch (type) {
|
|
96
99
|
case 'onAdLoaded':
|
|
100
|
+
case 'onSizeChange':
|
|
97
101
|
eventPayload = {
|
|
98
102
|
width: nativeEvent.width,
|
|
99
103
|
height: nativeEvent.height,
|
|
@@ -129,8 +133,24 @@ export const BaseAd = React.forwardRef<
|
|
|
129
133
|
if (type === 'onAdLoaded' || type === 'onSizeChange') {
|
|
130
134
|
const width = Math.ceil(nativeEvent.width);
|
|
131
135
|
const height = Math.ceil(nativeEvent.height);
|
|
136
|
+
|
|
132
137
|
if (width && height && JSON.stringify([width, height]) !== JSON.stringify(dimensions)) {
|
|
133
|
-
|
|
138
|
+
/**
|
|
139
|
+
* On Android, it seems the ad size is not always the definitive on the first onAdLoaded event.
|
|
140
|
+
* So if we change the size here with an incorrect value, then we relayout the ad on native side
|
|
141
|
+
* and it might cause an incorrect size to be set.
|
|
142
|
+
*
|
|
143
|
+
* To reproduce this issue, go to the example app, on the "GAMBanner Fluid" example
|
|
144
|
+
* and reload the ad several times
|
|
145
|
+
*
|
|
146
|
+
* on my low-end Samsung A10s, it always took less than 100ms in debug mode to get the correct size
|
|
147
|
+
* hence the 100ms debounce
|
|
148
|
+
*/
|
|
149
|
+
if (sizes.includes(GAMBannerAdSize.FLUID) && Platform.OS === 'android') {
|
|
150
|
+
debouncedSetDimensions([width, height]);
|
|
151
|
+
} else {
|
|
152
|
+
setDimensions([width, height]);
|
|
153
|
+
}
|
|
134
154
|
}
|
|
135
155
|
}
|
|
136
156
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const debounce = <Arguments extends unknown[], Result>(
|
|
2
|
+
func: (...args: Arguments) => Result,
|
|
3
|
+
waitFor: number,
|
|
4
|
+
): ((...args: Arguments) => void) => {
|
|
5
|
+
let timeout: ReturnType<typeof setTimeout> | null = null;
|
|
6
|
+
|
|
7
|
+
const debounced = (...args: Arguments) => {
|
|
8
|
+
if (timeout !== null) {
|
|
9
|
+
clearTimeout(timeout);
|
|
10
|
+
}
|
|
11
|
+
timeout = setTimeout(() => func(...args), waitFor);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return debounced;
|
|
15
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -29,7 +29,7 @@ export { AdsConsentPrivacyOptionsRequirementStatus } from './AdsConsentPrivacyOp
|
|
|
29
29
|
export { MaxAdContentRating } from './MaxAdContentRating';
|
|
30
30
|
export { TestIds } from './TestIds';
|
|
31
31
|
export { AdEventType } from './AdEventType';
|
|
32
|
-
export { BannerAdSize } from './BannerAdSize';
|
|
32
|
+
export { BannerAdSize, GAMBannerAdSize } from './BannerAdSize';
|
|
33
33
|
export { GAMAdEventType } from './GAMAdEventType';
|
|
34
34
|
export { RewardedAdEventType } from './RewardedAdEventType';
|
|
35
35
|
export { AdsConsent } from './AdsConsent';
|
|
@@ -78,6 +78,11 @@ export interface BannerAdProps {
|
|
|
78
78
|
* See: https://developers.google.com/admob/android/impression-level-ad-revenue
|
|
79
79
|
*/
|
|
80
80
|
onPaid?: PaidEventListener;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Called when ad size dimensions changed
|
|
84
|
+
*/
|
|
85
|
+
onSizeChange?: (dimensions: { width: number; height: number }) => void;
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
/**
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Generated by genversion.
|
|
2
|
-
export const version = '13.
|
|
2
|
+
export const version = '13.2.0';
|