react-native-google-mobile-ads 5.1.1 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/__tests__/interstitial.test.ts +32 -5
  2. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsAppOpenModule.java +2 -1
  3. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsBannerAdViewManager.java +110 -68
  4. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java +5 -11
  5. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsEvent.java +3 -0
  6. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsInterstitialModule.java +38 -20
  7. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsModule.java +45 -0
  8. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsPackage.java +1 -0
  9. package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsRewardedInterstitialModule.java +199 -0
  10. package/docs/ad-inspector.mdx +39 -0
  11. package/docs/displaying-ads-hook.mdx +1 -1
  12. package/docs/displaying-ads.mdx +178 -26
  13. package/docs/migrating-to-v6.mdx +111 -0
  14. package/docs.json +3 -1
  15. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsAppOpenModule.m +1 -0
  16. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerViewManager.m +63 -8
  17. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.h +4 -0
  18. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.m +10 -7
  19. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.h +2 -1
  20. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.m +17 -2
  21. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsInterstitialModule.m +44 -30
  22. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsModule.m +19 -0
  23. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedInterstitialModule.h +25 -0
  24. package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedInterstitialModule.m +173 -0
  25. package/lib/commonjs/AdEventType.js.map +1 -1
  26. package/lib/commonjs/GAMAdEventType.js +30 -0
  27. package/lib/commonjs/GAMAdEventType.js.map +1 -0
  28. package/lib/commonjs/MobileAds.js +9 -2
  29. package/lib/commonjs/MobileAds.js.map +1 -1
  30. package/lib/commonjs/RewardedAdEventType.js.map +1 -1
  31. package/lib/commonjs/TestIds.js +11 -2
  32. package/lib/commonjs/TestIds.js.map +1 -1
  33. package/lib/commonjs/ads/AppOpenAd.js +8 -53
  34. package/lib/commonjs/ads/AppOpenAd.js.map +1 -1
  35. package/lib/commonjs/ads/BannerAd.js +7 -110
  36. package/lib/commonjs/ads/BannerAd.js.map +1 -1
  37. package/lib/commonjs/ads/BaseAd.js +144 -0
  38. package/lib/commonjs/ads/BaseAd.js.map +1 -0
  39. package/lib/commonjs/ads/GAMBannerAd.js +42 -0
  40. package/lib/commonjs/ads/GAMBannerAd.js.map +1 -0
  41. package/lib/commonjs/ads/GAMInterstitialAd.js +48 -0
  42. package/lib/commonjs/ads/GAMInterstitialAd.js.map +1 -0
  43. package/lib/commonjs/ads/InterstitialAd.js +13 -64
  44. package/lib/commonjs/ads/InterstitialAd.js.map +1 -1
  45. package/lib/commonjs/ads/MobileAd.js +131 -12
  46. package/lib/commonjs/ads/MobileAd.js.map +1 -1
  47. package/lib/commonjs/ads/RewardedAd.js +23 -65
  48. package/lib/commonjs/ads/RewardedAd.js.map +1 -1
  49. package/lib/commonjs/ads/RewardedInterstitialAd.js +127 -0
  50. package/lib/commonjs/ads/RewardedInterstitialAd.js.map +1 -0
  51. package/lib/commonjs/hooks/useAppOpenAd.js.map +1 -1
  52. package/lib/commonjs/hooks/useFullScreenAd.js +9 -4
  53. package/lib/commonjs/hooks/useFullScreenAd.js.map +1 -1
  54. package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -1
  55. package/lib/commonjs/hooks/useRewardedAd.js.map +1 -1
  56. package/lib/commonjs/hooks/useRewardedInterstitialAd.js +51 -0
  57. package/lib/commonjs/hooks/useRewardedInterstitialAd.js.map +1 -0
  58. package/lib/commonjs/index.js +80 -0
  59. package/lib/commonjs/index.js.map +1 -1
  60. package/lib/commonjs/types/AdEventsListener.js +6 -0
  61. package/lib/commonjs/types/AdEventsListener.js.map +1 -0
  62. package/lib/commonjs/types/AppEvent.js +2 -0
  63. package/lib/commonjs/types/AppEvent.js.map +1 -0
  64. package/lib/commonjs/types/index.js +149 -0
  65. package/lib/commonjs/types/index.js.map +1 -0
  66. package/lib/commonjs/validateAdRequestOptions.js +0 -38
  67. package/lib/commonjs/validateAdRequestOptions.js.map +1 -1
  68. package/lib/commonjs/version.js +2 -2
  69. package/lib/commonjs/version.js.map +1 -1
  70. package/lib/module/AdEventType.js.map +1 -1
  71. package/lib/module/GAMAdEventType.js +22 -0
  72. package/lib/module/GAMAdEventType.js.map +1 -0
  73. package/lib/module/MobileAds.js +9 -2
  74. package/lib/module/MobileAds.js.map +1 -1
  75. package/lib/module/RewardedAdEventType.js.map +1 -1
  76. package/lib/module/TestIds.js +11 -2
  77. package/lib/module/TestIds.js.map +1 -1
  78. package/lib/module/ads/AppOpenAd.js +10 -37
  79. package/lib/module/ads/AppOpenAd.js.map +1 -1
  80. package/lib/module/ads/BannerAd.js +7 -85
  81. package/lib/module/ads/BannerAd.js.map +1 -1
  82. package/lib/module/ads/BaseAd.js +124 -0
  83. package/lib/module/ads/BaseAd.js.map +1 -0
  84. package/lib/module/ads/GAMBannerAd.js +42 -0
  85. package/lib/module/ads/GAMBannerAd.js.map +1 -0
  86. package/lib/module/ads/GAMInterstitialAd.js +38 -0
  87. package/lib/module/ads/GAMInterstitialAd.js.map +1 -0
  88. package/lib/module/ads/InterstitialAd.js +15 -48
  89. package/lib/module/ads/InterstitialAd.js.map +1 -1
  90. package/lib/module/ads/MobileAd.js +128 -12
  91. package/lib/module/ads/MobileAd.js.map +1 -1
  92. package/lib/module/ads/RewardedAd.js +24 -49
  93. package/lib/module/ads/RewardedAd.js.map +1 -1
  94. package/lib/module/ads/RewardedInterstitialAd.js +130 -0
  95. package/lib/module/ads/RewardedInterstitialAd.js.map +1 -0
  96. package/lib/module/hooks/useAppOpenAd.js.map +1 -1
  97. package/lib/module/hooks/useFullScreenAd.js +9 -4
  98. package/lib/module/hooks/useFullScreenAd.js.map +1 -1
  99. package/lib/module/hooks/useInterstitialAd.js.map +1 -1
  100. package/lib/module/hooks/useRewardedAd.js.map +1 -1
  101. package/lib/module/hooks/useRewardedInterstitialAd.js +38 -0
  102. package/lib/module/hooks/useRewardedInterstitialAd.js.map +1 -0
  103. package/lib/module/index.js +6 -0
  104. package/lib/module/index.js.map +1 -1
  105. package/lib/module/types/AdEventsListener.js +2 -0
  106. package/lib/module/types/AdEventsListener.js.map +1 -0
  107. package/lib/module/types/AppEvent.js +2 -0
  108. package/lib/module/types/AppEvent.js.map +1 -0
  109. package/lib/module/types/index.js +28 -0
  110. package/lib/module/types/index.js.map +1 -0
  111. package/lib/module/validateAdRequestOptions.js +1 -39
  112. package/lib/module/validateAdRequestOptions.js.map +1 -1
  113. package/lib/module/version.js +2 -2
  114. package/lib/module/version.js.map +1 -1
  115. package/lib/typescript/AdEventType.d.ts +4 -8
  116. package/lib/typescript/GAMAdEventType.d.ts +20 -0
  117. package/lib/typescript/MobileAds.d.ts +2 -1
  118. package/lib/typescript/RewardedAdEventType.d.ts +7 -11
  119. package/lib/typescript/TestIds.d.ts +7 -0
  120. package/lib/typescript/ads/AppOpenAd.d.ts +6 -6
  121. package/lib/typescript/ads/BannerAd.d.ts +1 -1
  122. package/lib/typescript/ads/BaseAd.d.ts +35 -0
  123. package/lib/typescript/ads/GAMBannerAd.d.ts +7 -0
  124. package/lib/typescript/ads/GAMInterstitialAd.d.ts +33 -0
  125. package/lib/typescript/ads/InterstitialAd.d.ts +10 -16
  126. package/lib/typescript/ads/MobileAd.d.ts +35 -16
  127. package/lib/typescript/ads/RewardedAd.d.ts +17 -19
  128. package/lib/typescript/ads/RewardedInterstitialAd.d.ts +82 -0
  129. package/lib/typescript/hooks/useAppOpenAd.d.ts +1 -1
  130. package/lib/typescript/hooks/useFullScreenAd.d.ts +2 -1
  131. package/lib/typescript/hooks/useInterstitialAd.d.ts +1 -1
  132. package/lib/typescript/hooks/useRewardedAd.d.ts +1 -1
  133. package/lib/typescript/hooks/useRewardedInterstitialAd.d.ts +9 -0
  134. package/lib/typescript/index.d.ts +7 -1
  135. package/lib/typescript/types/AdEventListener.d.ts +5 -9
  136. package/lib/typescript/types/AdEventsListener.d.ts +8 -0
  137. package/lib/typescript/types/AppEvent.d.ts +13 -0
  138. package/lib/typescript/types/BannerAdProps.d.ts +81 -4
  139. package/lib/typescript/types/GoogleMobileAdsNativeModule.d.ts +12 -6
  140. package/lib/typescript/types/MobileAd.interface.d.ts +37 -12
  141. package/lib/typescript/types/MobileAdsModule.interface.d.ts +9 -0
  142. package/lib/typescript/types/RequestOptions.d.ts +0 -22
  143. package/lib/typescript/types/index.d.ts +11 -0
  144. package/lib/typescript/version.d.ts +1 -1
  145. package/package.json +50 -49
  146. package/src/AdEventType.ts +4 -8
  147. package/src/GAMAdEventType.ts +37 -0
  148. package/src/MobileAds.ts +13 -0
  149. package/src/RewardedAdEventType.ts +7 -11
  150. package/src/TestIds.ts +9 -0
  151. package/src/ads/AppOpenAd.ts +11 -41
  152. package/src/ads/BannerAd.tsx +4 -106
  153. package/src/ads/BaseAd.tsx +156 -0
  154. package/src/ads/GAMBannerAd.tsx +37 -0
  155. package/src/ads/GAMInterstitialAd.ts +45 -0
  156. package/src/ads/InterstitialAd.ts +15 -56
  157. package/src/ads/MobileAd.ts +153 -30
  158. package/src/ads/RewardedAd.ts +29 -55
  159. package/src/ads/RewardedInterstitialAd.ts +143 -0
  160. package/src/hooks/useAppOpenAd.ts +1 -1
  161. package/src/hooks/useFullScreenAd.ts +9 -7
  162. package/src/hooks/useInterstitialAd.ts +1 -1
  163. package/src/hooks/useRewardedAd.ts +1 -1
  164. package/src/hooks/useRewardedInterstitialAd.ts +47 -0
  165. package/src/index.ts +6 -0
  166. package/src/types/AdEventListener.ts +31 -13
  167. package/src/types/AdEventsListener.ts +24 -0
  168. package/src/types/AppEvent.ts +14 -0
  169. package/src/types/BannerAdProps.ts +81 -4
  170. package/src/types/GoogleMobileAdsNativeModule.ts +16 -6
  171. package/src/types/MobileAd.interface.ts +56 -12
  172. package/src/types/MobileAdsModule.interface.ts +10 -0
  173. package/src/types/RequestOptions.ts +0 -24
  174. package/src/types/index.ts +28 -0
  175. package/src/validateAdRequestOptions.ts +0 -45
  176. package/src/version.ts +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["BaseAd.tsx"],"names":["React","useState","useEffect","requireNativeComponent","isFunction","NativeError","BannerAdSize","validateAdRequestOptions","sizeRegex","BaseAd","forwardRef","ref","unitId","sizes","requestOptions","manualImpressionsEnabled","props","dimensions","setDimensions","Error","length","every","size","test","parsedRequestOptions","JSON","stringify","e","message","onNativeEvent","nativeEvent","type","eventHandler","eventPayload","width","height","fromEvent","name","data","style","includes","FLUID","displayName","GoogleMobileAdsBannerView"],"mappings":"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","sourcesContent":["/* eslint-disable react/prop-types */\n/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { NativeMethods, requireNativeComponent } from 'react-native';\nimport { isFunction } from '../common';\nimport { NativeError } from '../internal/NativeError';\nimport { BannerAdSize } from '../BannerAdSize';\nimport { validateAdRequestOptions } from '../validateAdRequestOptions';\nimport { GAMBannerAdProps } from '../types/BannerAdProps';\nimport { RequestOptions } from '../types/RequestOptions';\n\ntype NativeEvent =\n | {\n type: 'onAdLoaded' | 'onSizeChange';\n width: number;\n height: number;\n }\n | { type: 'onAdOpened' | 'onAdClosed' }\n | {\n type: 'onAdFailedToLoad';\n code: string;\n message: string;\n }\n | {\n type: 'onAppEvent';\n name: string;\n data?: string;\n };\n\nconst sizeRegex = /([0-9]+)x([0-9]+)/;\n\nexport const BaseAd = React.forwardRef<GoogleMobileAdsBannerView, GAMBannerAdProps>(\n ({ unitId, sizes, requestOptions, manualImpressionsEnabled, ...props }, ref) => {\n const [dimensions, setDimensions] = useState<(number | string)[]>([0, 0]);\n\n useEffect(() => {\n if (!unitId) {\n throw new Error(\"BannerAd: 'unitId' expected a valid string unit ID.\");\n }\n }, [unitId]);\n\n useEffect(() => {\n if (\n sizes.length === 0 ||\n !sizes.every(size => size in BannerAdSize || sizeRegex.test(size))\n ) {\n throw new Error(\"BannerAd: 'size(s)' expected a valid BannerAdSize or custom size string.\");\n }\n }, [sizes]);\n\n const parsedRequestOptions = JSON.stringify(requestOptions);\n\n useEffect(() => {\n if (requestOptions) {\n try {\n validateAdRequestOptions(requestOptions);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`BannerAd: ${e.message}`);\n }\n }\n }\n }, [parsedRequestOptions]);\n\n function onNativeEvent({ nativeEvent }: { nativeEvent: NativeEvent }) {\n const { type } = nativeEvent;\n\n if (type !== 'onSizeChange' && isFunction(props[type])) {\n let eventHandler, eventPayload;\n switch (type) {\n case 'onAdLoaded':\n eventPayload = {\n width: nativeEvent.width,\n height: nativeEvent.height,\n };\n if ((eventHandler = props[type])) eventHandler(eventPayload);\n break;\n case 'onAdFailedToLoad':\n eventPayload = NativeError.fromEvent(nativeEvent, 'googleMobileAds');\n if ((eventHandler = props[type])) eventHandler(eventPayload);\n break;\n case 'onAppEvent':\n eventPayload = {\n name: nativeEvent.name,\n data: nativeEvent.data,\n };\n if ((eventHandler = props[type])) eventHandler(eventPayload);\n break;\n default:\n if ((eventHandler = props[type])) eventHandler();\n }\n }\n\n if (type === 'onAdLoaded' || type === 'onSizeChange') {\n const { width, height } = nativeEvent;\n if (width && height) setDimensions([width, height]);\n }\n }\n\n const style = sizes.includes(BannerAdSize.FLUID)\n ? {\n width: '100%',\n height: dimensions[1],\n }\n : {\n width: dimensions[0],\n height: dimensions[1],\n };\n\n return (\n <GoogleMobileAdsBannerView\n ref={ref}\n sizes={sizes}\n style={style}\n unitId={unitId}\n request={validateAdRequestOptions(requestOptions)}\n manualImpressionsEnabled={!!manualImpressionsEnabled}\n onNativeEvent={onNativeEvent}\n />\n );\n },\n);\nBaseAd.displayName = 'BaseAd';\n\ninterface NativeBannerProps {\n sizes: GAMBannerAdProps['sizes'];\n style: {\n width?: number | string;\n height?: number | string;\n };\n unitId: string;\n request: RequestOptions;\n manualImpressionsEnabled: boolean;\n onNativeEvent: (event: { nativeEvent: NativeEvent }) => void;\n}\n\nconst GoogleMobileAdsBannerView = requireNativeComponent<NativeBannerProps>(\n 'RNGoogleMobileAdsBannerView',\n);\nexport type GoogleMobileAdsBannerView = React.Component<NativeBannerProps> & NativeMethods;\n"]}
@@ -0,0 +1,42 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+
5
+ /*
6
+ * Copyright (c) 2016-present Invertase Limited & Contributors
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this library except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ *
20
+ */
21
+ import React, { createRef } from 'react';
22
+ import { findNodeHandle, UIManager } from 'react-native';
23
+ import { BaseAd } from './BaseAd';
24
+ export class GAMBannerAd extends React.Component {
25
+ constructor() {
26
+ super(...arguments);
27
+
28
+ _defineProperty(this, "ref", /*#__PURE__*/createRef());
29
+ }
30
+
31
+ recordManualImpression() {
32
+ UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref.current), 'recordManualImpression', undefined);
33
+ }
34
+
35
+ render() {
36
+ return /*#__PURE__*/React.createElement(BaseAd, _extends({
37
+ ref: this.ref
38
+ }, this.props));
39
+ }
40
+
41
+ }
42
+ //# sourceMappingURL=GAMBannerAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["GAMBannerAd.tsx"],"names":["React","createRef","findNodeHandle","UIManager","BaseAd","GAMBannerAd","Component","recordManualImpression","dispatchViewManagerCommand","ref","current","undefined","render","props"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,cAAT,EAAyBC,SAAzB,QAA0C,cAA1C;AAEA,SAASC,MAAT,QAAkD,UAAlD;AAEA,OAAO,MAAMC,WAAN,SAA0BL,KAAK,CAACM,SAAhC,CAA4D;AAAA;AAAA;;AAAA,8CACnDL,SAAS,EAD0C;AAAA;;AAGjEM,EAAAA,sBAAsB,GAAG;AACvBJ,IAAAA,SAAS,CAACK,0BAAV,CACEN,cAAc,CAAC,KAAKO,GAAL,CAASC,OAAV,CADhB,EAEE,wBAFF,EAGEC,SAHF;AAKD;;AAEDC,EAAAA,MAAM,GAAG;AACP,wBAAO,oBAAC,MAAD;AAAQ,MAAA,GAAG,EAAE,KAAKH;AAAlB,OAA2B,KAAKI,KAAhC,EAAP;AACD;;AAbgE","sourcesContent":["/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport React, { createRef } from 'react';\nimport { findNodeHandle, UIManager } from 'react-native';\nimport { GAMBannerAdProps } from '../types/BannerAdProps';\nimport { BaseAd, GoogleMobileAdsBannerView } from './BaseAd';\n\nexport class GAMBannerAd extends React.Component<GAMBannerAdProps> {\n private ref = createRef<GoogleMobileAdsBannerView>();\n\n recordManualImpression() {\n UIManager.dispatchViewManagerCommand(\n findNodeHandle(this.ref.current),\n 'recordManualImpression',\n undefined,\n );\n }\n\n render() {\n return <BaseAd ref={this.ref} {...this.props} />;\n }\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { InterstitialAd } from './InterstitialAd';
2
+ export class GAMInterstitialAd extends InterstitialAd {
3
+ /**
4
+ * Creates a new GAMInterstitialAd instance.
5
+ *
6
+ * #### Example
7
+ *
8
+ * ```js
9
+ * import { GAMInterstitialAd, AdEventType, TestIds } from 'react-native-google-mobile-ads';
10
+ *
11
+ * const interstitialAd = await GAMInterstitialAd.createForAdRequest(TestIds.GAM_INTERSTITIAL, {
12
+ * requestAgent: 'CoolAds',
13
+ * });
14
+ *
15
+ * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {
16
+ * interstitialAd.show();
17
+ * });
18
+ *
19
+ * interstitialAd.load();
20
+ * ```
21
+ *
22
+ * @param adUnitId The Ad Unit ID for the Interstitial. You can find this on your Google Mobile Ads dashboard.
23
+ * @param requestOptions Optional RequestOptions used to load the ad.
24
+ */
25
+ static createForAdRequest(adUnitId, requestOptions) {
26
+ return super.createForAdRequest(adUnitId, requestOptions);
27
+ }
28
+
29
+ addAdEventsListener(listener) {
30
+ return this._addAdEventsListener(listener);
31
+ }
32
+
33
+ addAdEventListener(type, listener) {
34
+ return this._addAdEventListener(type, listener);
35
+ }
36
+
37
+ }
38
+ //# sourceMappingURL=GAMInterstitialAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["GAMInterstitialAd.ts"],"names":["InterstitialAd","GAMInterstitialAd","createForAdRequest","adUnitId","requestOptions","addAdEventsListener","listener","_addAdEventsListener","addAdEventListener","type","_addAdEventListener"],"mappings":"AAKA,SAASA,cAAT,QAA+B,kBAA/B;AAEA,OAAO,MAAMC,iBAAN,SAAgCD,cAAhC,CAA+C;AACpD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B,SAAlBE,kBAAkB,CAACC,QAAD,EAAmBC,cAAnB,EAAoD;AAC3E,WAAO,MAAMF,kBAAN,CAAyBC,QAAzB,EAAmCC,cAAnC,CAAP;AACD;;AAEDC,EAAAA,mBAAmB,CAAyCC,QAAzC,EAAwE;AACzF,WAAO,KAAKC,oBAAL,CAA0BD,QAA1B,CAAP;AACD;;AAEDE,EAAAA,kBAAkB,CAChBC,IADgB,EAEhBH,QAFgB,EAGhB;AACA,WAAO,KAAKI,mBAAL,CAAyBD,IAAzB,EAA+BH,QAA/B,CAAP;AACD;;AApCmD","sourcesContent":["import { AdEventType } from '../AdEventType';\nimport { GAMAdEventType } from '../GAMAdEventType';\nimport { AdEventListener } from '../types/AdEventListener';\nimport { AdEventsListener } from '../types/AdEventsListener';\nimport { RequestOptions } from '../types/RequestOptions';\nimport { InterstitialAd } from './InterstitialAd';\n\nexport class GAMInterstitialAd extends InterstitialAd {\n /**\n * Creates a new GAMInterstitialAd instance.\n *\n * #### Example\n *\n * ```js\n * import { GAMInterstitialAd, AdEventType, TestIds } from 'react-native-google-mobile-ads';\n *\n * const interstitialAd = await GAMInterstitialAd.createForAdRequest(TestIds.GAM_INTERSTITIAL, {\n * requestAgent: 'CoolAds',\n * });\n *\n * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {\n * interstitialAd.show();\n * });\n *\n * interstitialAd.load();\n * ```\n *\n * @param adUnitId The Ad Unit ID for the Interstitial. You can find this on your Google Mobile Ads dashboard.\n * @param requestOptions Optional RequestOptions used to load the ad.\n */\n static createForAdRequest(adUnitId: string, requestOptions?: RequestOptions) {\n return super.createForAdRequest(adUnitId, requestOptions) as GAMInterstitialAd;\n }\n\n addAdEventsListener<T extends AdEventType | GAMAdEventType>(listener: AdEventsListener<T>) {\n return this._addAdEventsListener(listener);\n }\n\n addAdEventListener<T extends AdEventType | GAMAdEventType>(\n type: T,\n listener: AdEventListener<T>,\n ) {\n return this._addAdEventListener(type, listener);\n }\n}\n"]}
@@ -1,3 +1,5 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
1
3
  /*
2
4
  * Copyright (c) 2016-present Invertase Limited & Contributors
3
5
  *
@@ -14,12 +16,11 @@
14
16
  * limitations under the License.
15
17
  *
16
18
  */
17
- import { isFunction, isString } from '../common';
19
+ import { isString } from '../common';
18
20
  import { MobileAds } from '../MobileAds';
19
21
  import { validateAdRequestOptions } from '../validateAdRequestOptions';
20
- import { validateAdShowOptions } from '../validateAdShowOptions';
21
22
  import { MobileAd } from './MobileAd';
22
- let _interstitialRequest = 0;
23
+
23
24
  /**
24
25
  * A class for interacting and showing Interstitial Ads.
25
26
  *
@@ -49,10 +50,8 @@ let _interstitialRequest = 0;
49
50
  * ```js
50
51
  * import { AdEventType } from 'react-native-google-mobile-ads';
51
52
  *
52
- * interstitial.onAdEvent((type) => {
53
- * if (type === AdEventType.LOADED) {
54
- * interstitial.show();
55
- * }
53
+ * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {
54
+ * interstitialAd.show();
56
55
  * });
57
56
  *
58
57
  * interstitial.load();
@@ -61,7 +60,6 @@ let _interstitialRequest = 0;
61
60
  * The advert will be presented to the user, and several more events can be triggered such as the user clicking the
62
61
  * advert or closing it.
63
62
  */
64
-
65
63
  export class InterstitialAd extends MobileAd {
66
64
  /**
67
65
  * Creates a new InterstitialAd instance.
@@ -75,12 +73,8 @@ export class InterstitialAd extends MobileAd {
75
73
  * requestAgent: 'CoolAds',
76
74
  * });
77
75
  *
78
- * interstitialAd.onAdEvent((type, error) => {
79
- * console.log('New event: ', type, error);
80
- *
81
- * if (type === AdEventType.LOADED) {
82
- * interstitialAd.show();
83
- * }
76
+ * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {
77
+ * interstitialAd.show();
84
78
  * });
85
79
  *
86
80
  * interstitialAd.load();
@@ -104,46 +98,19 @@ export class InterstitialAd extends MobileAd {
104
98
  }
105
99
  }
106
100
 
107
- const requestId = _interstitialRequest++;
101
+ const requestId = InterstitialAd._interstitialRequest++;
108
102
  return new InterstitialAd('interstitial', MobileAds(), requestId, adUnitId, options);
109
103
  }
110
104
 
111
- load() {
112
- // Prevent multiple load calls
113
- if (this._loaded || this._isLoadCalled) {
114
- return;
115
- }
116
-
117
- this._isLoadCalled = true;
118
-
119
- this._googleMobileAds.native.interstitialLoad(this._requestId, this._adUnitId, this._requestOptions);
105
+ addAdEventsListener(listener) {
106
+ return this._addAdEventsListener(listener);
120
107
  }
121
108
 
122
- onAdEvent(handler) {
123
- if (!isFunction(handler)) {
124
- throw new Error("InterstitialAd.onAdEvent(*) 'handler' expected a function.");
125
- }
126
-
127
- return this._setAdEventHandler(handler);
128
- }
129
-
130
- show(showOptions) {
131
- if (!this._loaded) {
132
- throw new Error('InterstitialAd.show() The requested InterstitialAd has not loaded and could not be shown.');
133
- }
134
-
135
- let options;
136
-
137
- try {
138
- options = validateAdShowOptions(showOptions);
139
- } catch (e) {
140
- if (e instanceof Error) {
141
- throw new Error(`InterstitialAd.show(*) ${e.message}.`);
142
- }
143
- }
144
-
145
- return this._googleMobileAds.native.interstitialShow(this._requestId, options);
109
+ addAdEventListener(type, listener) {
110
+ return this._addAdEventListener(type, listener);
146
111
  }
147
112
 
148
113
  }
114
+
115
+ _defineProperty(InterstitialAd, "_interstitialRequest", 0);
149
116
  //# sourceMappingURL=InterstitialAd.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["InterstitialAd.ts"],"names":["isFunction","isString","MobileAds","validateAdRequestOptions","validateAdShowOptions","MobileAd","_interstitialRequest","InterstitialAd","createForAdRequest","adUnitId","requestOptions","Error","options","e","message","requestId","load","_loaded","_isLoadCalled","_googleMobileAds","native","interstitialLoad","_requestId","_adUnitId","_requestOptions","onAdEvent","handler","_setAdEventHandler","show","showOptions","interstitialShow"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAASA,UAAT,EAAqBC,QAArB,QAAqC,WAArC;AACA,SAASC,SAAT,QAA0B,cAA1B;AACA,SAASC,wBAAT,QAAyC,6BAAzC;AACA,SAASC,qBAAT,QAAsC,0BAAtC;AACA,SAASC,QAAT,QAAyB,YAAzB;AAMA,IAAIC,oBAAoB,GAAG,CAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,cAAN,SAA6BF,QAA7B,CAAmE;AACxE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B,SAAlBG,kBAAkB,CAACC,QAAD,EAAmBC,cAAnB,EAAoE;AAC3F,QAAI,CAACT,QAAQ,CAACQ,QAAD,CAAb,EAAyB;AACvB,YAAM,IAAIE,KAAJ,CAAU,2EAAV,CAAN;AACD;;AAED,QAAIC,OAAO,GAAG,EAAd;;AACA,QAAI;AACFA,MAAAA,OAAO,GAAGT,wBAAwB,CAACO,cAAD,CAAlC;AACD,KAFD,CAEE,OAAOG,CAAP,EAAU;AACV,UAAIA,CAAC,YAAYF,KAAjB,EAAwB;AACtB,cAAM,IAAIA,KAAJ,CAAW,2CAA0CE,CAAC,CAACC,OAAQ,GAA/D,CAAN;AACD;AACF;;AAED,UAAMC,SAAS,GAAGT,oBAAoB,EAAtC;AACA,WAAO,IAAIC,cAAJ,CAAmB,cAAnB,EAAmCL,SAAS,EAA5C,EAAgDa,SAAhD,EAA2DN,QAA3D,EAAqEG,OAArE,CAAP;AACD;;AAEDI,EAAAA,IAAI,GAAG;AACL;AACA,QAAI,KAAKC,OAAL,IAAgB,KAAKC,aAAzB,EAAwC;AACtC;AACD;;AAED,SAAKA,aAAL,GAAqB,IAArB;;AACA,SAAKC,gBAAL,CAAsBC,MAAtB,CAA6BC,gBAA7B,CACE,KAAKC,UADP,EAEE,KAAKC,SAFP,EAGE,KAAKC,eAHP;AAKD;;AAEDC,EAAAA,SAAS,CAACC,OAAD,EAA2B;AAClC,QAAI,CAAC1B,UAAU,CAAC0B,OAAD,CAAf,EAA0B;AACxB,YAAM,IAAIf,KAAJ,CAAU,4DAAV,CAAN;AACD;;AAED,WAAO,KAAKgB,kBAAL,CAAwBD,OAAxB,CAAP;AACD;;AAEDE,EAAAA,IAAI,CAACC,WAAD,EAA8B;AAChC,QAAI,CAAC,KAAKZ,OAAV,EAAmB;AACjB,YAAM,IAAIN,KAAJ,CACJ,2FADI,CAAN;AAGD;;AAED,QAAIC,OAAJ;;AACA,QAAI;AACFA,MAAAA,OAAO,GAAGR,qBAAqB,CAACyB,WAAD,CAA/B;AACD,KAFD,CAEE,OAAOhB,CAAP,EAAU;AACV,UAAIA,CAAC,YAAYF,KAAjB,EAAwB;AACtB,cAAM,IAAIA,KAAJ,CAAW,0BAAyBE,CAAC,CAACC,OAAQ,GAA9C,CAAN;AACD;AACF;;AAED,WAAO,KAAKK,gBAAL,CAAsBC,MAAtB,CAA6BU,gBAA7B,CAA8C,KAAKR,UAAnD,EAA+DV,OAA/D,CAAP;AACD;;AApFuE","sourcesContent":["/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { isFunction, isString } from '../common';\nimport { MobileAds } from '../MobileAds';\nimport { validateAdRequestOptions } from '../validateAdRequestOptions';\nimport { validateAdShowOptions } from '../validateAdShowOptions';\nimport { MobileAd } from './MobileAd';\nimport { AdEventListener } from '../types/AdEventListener';\nimport { AdShowOptions } from '../types/AdShowOptions';\nimport { RequestOptions } from '../types/RequestOptions';\nimport { MobileAdInterface } from '../types/MobileAd.interface';\n\nlet _interstitialRequest = 0;\n\n/**\n * A class for interacting and showing Interstitial Ads.\n *\n * An Interstitial advert can be pre-loaded and shown at a suitable point in your apps flow, such as at the end of a level\n * in a game. An Interstitial is a full screen advert, laid on-top of your entire application which the user can interact with.\n * Interactions are passed back via events which should be handled accordingly inside of your app.\n *\n * #### Example\n *\n * First create a new Interstitial instance, passing in your Ad Unit ID from the Google Mobile Ads configuration console, and any additional\n * request options. The example below will present a test advert, and only request a non-personalized ad.\n *\n * ```js\n * import { InterstitialAd, TestIds } from 'react-native-google-mobile-ads';\n *\n * const interstitial = InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {\n * requestNonPersonalizedAdsOnly: true,\n * });\n * ```\n *\n * Each advert needs to be loaded from Google Mobile Ads before being shown. It is recommended this is performed before the user\n * reaches the checkpoint to show the advert, so it's ready to go. Before loading the advert, we need to setup\n * event listeners to listen for updates from Google Mobile Ads, such as advert loaded or failed to load.\n *\n * Event types match the `AdEventType` interface. Once the advert has loaded, we can trigger it to show:\n *\n * ```js\n * import { AdEventType } from 'react-native-google-mobile-ads';\n *\n * interstitial.onAdEvent((type) => {\n * if (type === AdEventType.LOADED) {\n * interstitial.show();\n * }\n * });\n *\n * interstitial.load();\n * ```\n *\n * The advert will be presented to the user, and several more events can be triggered such as the user clicking the\n * advert or closing it.\n */\nexport class InterstitialAd extends MobileAd implements MobileAdInterface {\n /**\n * Creates a new InterstitialAd instance.\n *\n * #### Example\n *\n * ```js\n * import { InterstitialAd, AdEventType, TestIds } from 'react-native-google-mobile-ads';\n *\n * const interstitialAd = await InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {\n * requestAgent: 'CoolAds',\n * });\n *\n * interstitialAd.onAdEvent((type, error) => {\n * console.log('New event: ', type, error);\n *\n * if (type === AdEventType.LOADED) {\n * interstitialAd.show();\n * }\n * });\n *\n * interstitialAd.load();\n * ```\n *\n * @param adUnitId The Ad Unit ID for the Interstitial. You can find this on your Google Mobile Ads dashboard.\n * @param requestOptions Optional RequestOptions used to load the ad.\n */\n static createForAdRequest(adUnitId: string, requestOptions?: RequestOptions): InterstitialAd {\n if (!isString(adUnitId)) {\n throw new Error(\"InterstitialAd.createForAdRequest(*) 'adUnitId' expected an string value.\");\n }\n\n let options = {};\n try {\n options = validateAdRequestOptions(requestOptions);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`InterstitialAd.createForAdRequest(_, *) ${e.message}.`);\n }\n }\n\n const requestId = _interstitialRequest++;\n return new InterstitialAd('interstitial', MobileAds(), requestId, adUnitId, options);\n }\n\n load() {\n // Prevent multiple load calls\n if (this._loaded || this._isLoadCalled) {\n return;\n }\n\n this._isLoadCalled = true;\n this._googleMobileAds.native.interstitialLoad(\n this._requestId,\n this._adUnitId,\n this._requestOptions,\n );\n }\n\n onAdEvent(handler: AdEventListener) {\n if (!isFunction(handler)) {\n throw new Error(\"InterstitialAd.onAdEvent(*) 'handler' expected a function.\");\n }\n\n return this._setAdEventHandler(handler);\n }\n\n show(showOptions?: AdShowOptions) {\n if (!this._loaded) {\n throw new Error(\n 'InterstitialAd.show() The requested InterstitialAd has not loaded and could not be shown.',\n );\n }\n\n let options;\n try {\n options = validateAdShowOptions(showOptions);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`InterstitialAd.show(*) ${e.message}.`);\n }\n }\n\n return this._googleMobileAds.native.interstitialShow(this._requestId, options);\n }\n}\n"]}
1
+ {"version":3,"sources":["InterstitialAd.ts"],"names":["isString","MobileAds","validateAdRequestOptions","MobileAd","InterstitialAd","createForAdRequest","adUnitId","requestOptions","Error","options","e","message","requestId","_interstitialRequest","addAdEventsListener","listener","_addAdEventsListener","addAdEventListener","type","_addAdEventListener"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAASA,QAAT,QAAyB,WAAzB;AACA,SAASC,SAAT,QAA0B,cAA1B;AACA,SAASC,wBAAT,QAAyC,6BAAzC;AACA,SAASC,QAAT,QAAyB,YAAzB;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAN,SAA6BD,QAA7B,CAAsC;AAE3C;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B,SAAlBE,kBAAkB,CAACC,QAAD,EAAmBC,cAAnB,EAAoD;AAC3E,QAAI,CAACP,QAAQ,CAACM,QAAD,CAAb,EAAyB;AACvB,YAAM,IAAIE,KAAJ,CAAU,2EAAV,CAAN;AACD;;AAED,QAAIC,OAAO,GAAG,EAAd;;AACA,QAAI;AACFA,MAAAA,OAAO,GAAGP,wBAAwB,CAACK,cAAD,CAAlC;AACD,KAFD,CAEE,OAAOG,CAAP,EAAU;AACV,UAAIA,CAAC,YAAYF,KAAjB,EAAwB;AACtB,cAAM,IAAIA,KAAJ,CAAW,2CAA0CE,CAAC,CAACC,OAAQ,GAA/D,CAAN;AACD;AACF;;AAED,UAAMC,SAAS,GAAGR,cAAc,CAACS,oBAAf,EAAlB;AACA,WAAO,IAAIT,cAAJ,CAAmB,cAAnB,EAAmCH,SAAS,EAA5C,EAAgDW,SAAhD,EAA2DN,QAA3D,EAAqEG,OAArE,CAAP;AACD;;AAEDK,EAAAA,mBAAmB,CAAwBC,QAAxB,EAAuD;AACxE,WAAO,KAAKC,oBAAL,CAA0BD,QAA1B,CAAP;AACD;;AAEDE,EAAAA,kBAAkB,CAAwBC,IAAxB,EAAiCH,QAAjC,EAA+D;AAC/E,WAAO,KAAKI,mBAAL,CAAyBD,IAAzB,EAA+BH,QAA/B,CAAP;AACD;;AAhD0C;;gBAAhCX,c,0BAC6B,C","sourcesContent":["/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { isString } from '../common';\nimport { MobileAds } from '../MobileAds';\nimport { validateAdRequestOptions } from '../validateAdRequestOptions';\nimport { MobileAd } from './MobileAd';\nimport { AdEventType } from '../AdEventType';\nimport { AdEventListener } from '../types/AdEventListener';\nimport { AdEventsListener } from '../types/AdEventsListener';\nimport { RequestOptions } from '../types/RequestOptions';\n\n/**\n * A class for interacting and showing Interstitial Ads.\n *\n * An Interstitial advert can be pre-loaded and shown at a suitable point in your apps flow, such as at the end of a level\n * in a game. An Interstitial is a full screen advert, laid on-top of your entire application which the user can interact with.\n * Interactions are passed back via events which should be handled accordingly inside of your app.\n *\n * #### Example\n *\n * First create a new Interstitial instance, passing in your Ad Unit ID from the Google Mobile Ads configuration console, and any additional\n * request options. The example below will present a test advert, and only request a non-personalized ad.\n *\n * ```js\n * import { InterstitialAd, TestIds } from 'react-native-google-mobile-ads';\n *\n * const interstitial = InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {\n * requestNonPersonalizedAdsOnly: true,\n * });\n * ```\n *\n * Each advert needs to be loaded from Google Mobile Ads before being shown. It is recommended this is performed before the user\n * reaches the checkpoint to show the advert, so it's ready to go. Before loading the advert, we need to setup\n * event listeners to listen for updates from Google Mobile Ads, such as advert loaded or failed to load.\n *\n * Event types match the `AdEventType` interface. Once the advert has loaded, we can trigger it to show:\n *\n * ```js\n * import { AdEventType } from 'react-native-google-mobile-ads';\n *\n * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {\n * interstitialAd.show();\n * });\n *\n * interstitial.load();\n * ```\n *\n * The advert will be presented to the user, and several more events can be triggered such as the user clicking the\n * advert or closing it.\n */\nexport class InterstitialAd extends MobileAd {\n protected static _interstitialRequest = 0;\n /**\n * Creates a new InterstitialAd instance.\n *\n * #### Example\n *\n * ```js\n * import { InterstitialAd, AdEventType, TestIds } from 'react-native-google-mobile-ads';\n *\n * const interstitialAd = await InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {\n * requestAgent: 'CoolAds',\n * });\n *\n * interstitialAd.addAdEventListener(AdEventType.Loaded, () => {\n * interstitialAd.show();\n * });\n *\n * interstitialAd.load();\n * ```\n *\n * @param adUnitId The Ad Unit ID for the Interstitial. You can find this on your Google Mobile Ads dashboard.\n * @param requestOptions Optional RequestOptions used to load the ad.\n */\n static createForAdRequest(adUnitId: string, requestOptions?: RequestOptions) {\n if (!isString(adUnitId)) {\n throw new Error(\"InterstitialAd.createForAdRequest(*) 'adUnitId' expected an string value.\");\n }\n\n let options = {};\n try {\n options = validateAdRequestOptions(requestOptions);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`InterstitialAd.createForAdRequest(_, *) ${e.message}.`);\n }\n }\n\n const requestId = InterstitialAd._interstitialRequest++;\n return new InterstitialAd('interstitial', MobileAds(), requestId, adUnitId, options);\n }\n\n addAdEventsListener<T extends AdEventType>(listener: AdEventsListener<T>) {\n return this._addAdEventsListener(listener);\n }\n\n addAdEventListener<T extends AdEventType>(type: T, listener: AdEventListener<T>) {\n return this._addAdEventListener(type, listener);\n }\n}\n"]}
@@ -16,9 +16,12 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
16
16
  * limitations under the License.
17
17
  *
18
18
  */
19
+ import { isFunction, isOneOf } from '../common';
19
20
  import { NativeError } from '../internal/NativeError';
20
- import { RewardedAdEventType } from '../RewardedAdEventType';
21
21
  import { AdEventType } from '../AdEventType';
22
+ import { RewardedAdEventType } from '../RewardedAdEventType';
23
+ import { GAMAdEventType } from '../GAMAdEventType';
24
+ import { validateAdShowOptions } from '../validateAdShowOptions';
22
25
  export class MobileAd {
23
26
  constructor(type, googleMobileAds, requestId, adUnitId, requestOptions) {
24
27
  _defineProperty(this, "_type", void 0);
@@ -35,7 +38,13 @@ export class MobileAd {
35
38
 
36
39
  _defineProperty(this, "_isLoadCalled", void 0);
37
40
 
38
- _defineProperty(this, "_onAdEventHandler", void 0);
41
+ _defineProperty(this, "_adEventsListeners", void 0);
42
+
43
+ _defineProperty(this, "_adEventListenersMap", void 0);
44
+
45
+ _defineProperty(this, "_adEventsListenerId", void 0);
46
+
47
+ _defineProperty(this, "_adEventListenerId", void 0);
39
48
 
40
49
  _defineProperty(this, "_nativeListener", void 0);
41
50
 
@@ -46,7 +55,18 @@ export class MobileAd {
46
55
  this._requestOptions = requestOptions;
47
56
  this._loaded = false;
48
57
  this._isLoadCalled = false;
49
- this._onAdEventHandler = null;
58
+ this._adEventsListeners = new Map();
59
+ this._adEventListenersMap = new Map();
60
+ Object.values({ ...AdEventType,
61
+ ...RewardedAdEventType,
62
+ ...GAMAdEventType,
63
+ _: AdEventType.LOADED // since AdEventType.LOADED is overwritten by RewardedAdEventType.LOADED
64
+
65
+ }).forEach(type => {
66
+ this._adEventListenersMap.set(type, new Map());
67
+ });
68
+ this._adEventListenerId = 0;
69
+ this._adEventsListenerId = 0;
50
70
  this._nativeListener = googleMobileAds.emitter.addListener(`google_mobile_ads_${type}_event:${adUnitId}:${requestId}`, this._handleAdEvent.bind(this));
51
71
  }
52
72
 
@@ -66,20 +86,116 @@ export class MobileAd {
66
86
  this._isLoadCalled = false;
67
87
  }
68
88
 
69
- if (this._onAdEventHandler) {
70
- let nativeError;
89
+ let payload = data;
71
90
 
72
- if (error) {
73
- nativeError = NativeError.fromEvent(error, 'googleMobileAds');
74
- }
91
+ if (error) {
92
+ payload = NativeError.fromEvent(error, 'googleMobileAds');
93
+ }
94
+
95
+ this._adEventsListeners.forEach(listener => {
96
+ listener({
97
+ type,
98
+ payload
99
+ });
100
+ });
101
+
102
+ this._getAdEventListeners(type).forEach(listener => {
103
+ listener(payload);
104
+ });
105
+ }
106
+
107
+ _addAdEventsListener(listener) {
108
+ if (!isFunction(listener)) {
109
+ throw new Error(`${this._className}.addAdEventsListener(*) 'listener' expected a function.`);
110
+ }
111
+
112
+ const id = this._adEventsListenerId++;
113
+
114
+ this._adEventsListeners.set(id, listener);
75
115
 
76
- this._onAdEventHandler(type, nativeError, data);
116
+ return () => {
117
+ this._adEventsListeners.delete(id);
118
+ };
119
+ }
120
+
121
+ _addAdEventListener(type, listener) {
122
+ if (!(isOneOf(type, Object.values(AdEventType)) || isOneOf(type, Object.values(RewardedAdEventType)) && this._type === 'rewarded')) {
123
+ throw new Error(`${this._className}.addAdEventListener(*) 'type' expected a valid event type value.`);
77
124
  }
125
+
126
+ if (!isFunction(listener)) {
127
+ throw new Error(`${this._className}.addAdEventListener(_, *) 'listener' expected a function.`);
128
+ }
129
+
130
+ const id = this._adEventListenerId++;
131
+
132
+ this._getAdEventListeners(type).set(id, listener);
133
+
134
+ return () => {
135
+ this._getAdEventListeners(type).delete(id);
136
+ };
78
137
  }
79
138
 
80
- _setAdEventHandler(handler) {
81
- this._onAdEventHandler = handler;
82
- return () => this._onAdEventHandler = null;
139
+ _getAdEventListeners(type) {
140
+ return this._adEventListenersMap.get(type);
141
+ }
142
+
143
+ get _className() {
144
+ return this.constructor.name;
145
+ }
146
+
147
+ get _camelCaseType() {
148
+ let type;
149
+
150
+ if (this._type === 'app_open') {
151
+ type = 'appOpen';
152
+ } else if (this._type === 'rewarded_interstitial') {
153
+ type = 'rewardedInterstitial';
154
+ } else {
155
+ type = this._type;
156
+ }
157
+
158
+ return type;
159
+ }
160
+
161
+ load() {
162
+ // Prevent multiple load calls
163
+ if (this._loaded || this._isLoadCalled) {
164
+ return;
165
+ }
166
+
167
+ this._isLoadCalled = true;
168
+ const load = this._googleMobileAds.native[`${this._camelCaseType}Load`];
169
+ load(this._requestId, this._adUnitId, this._requestOptions);
170
+ }
171
+
172
+ show(showOptions) {
173
+ if (!this._loaded) {
174
+ throw new Error(`${this._className}.show() The requested ${this._className} has not loaded and could not be shown.`);
175
+ }
176
+
177
+ let options;
178
+
179
+ try {
180
+ options = validateAdShowOptions(showOptions);
181
+ } catch (e) {
182
+ if (e instanceof Error) {
183
+ throw new Error(`${this._className}.show(*) ${e.message}.`);
184
+ } else {
185
+ throw e;
186
+ }
187
+ }
188
+
189
+ const show = this._googleMobileAds.native[`${this._camelCaseType}Show`];
190
+ return show(this._requestId, this._adUnitId, options);
191
+ }
192
+
193
+ removeAllListeners() {
194
+ this._adEventsListeners.clear();
195
+
196
+ this._adEventListenersMap.forEach((_, type, map) => {
197
+ map.set(type, new Map());
198
+ });
83
199
  }
84
200
 
85
201
  get adUnitId() {
@@ -1 +1 @@
1
- {"version":3,"sources":["MobileAd.ts"],"names":["NativeError","RewardedAdEventType","AdEventType","MobileAd","constructor","type","googleMobileAds","requestId","adUnitId","requestOptions","_type","_googleMobileAds","_requestId","_adUnitId","_requestOptions","_loaded","_isLoadCalled","_onAdEventHandler","_nativeListener","emitter","addListener","_handleAdEvent","bind","event","error","data","body","LOADED","CLOSED","nativeError","fromEvent","_setAdEventHandler","handler","loaded"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA,SAASA,WAAT,QAA4B,yBAA5B;AACA,SAASC,mBAAT,QAAoC,wBAApC;AACA,SAASC,WAAT,QAA4B,gBAA5B;AAMA,OAAO,MAAMC,QAAN,CAAe;AAWpBC,EAAAA,WAAW,CACTC,IADS,EAETC,eAFS,EAGTC,SAHS,EAITC,QAJS,EAKTC,cALS,EAMT;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AACA,SAAKC,KAAL,GAAaL,IAAb;AACA,SAAKM,gBAAL,GAAwBL,eAAxB;AACA,SAAKM,UAAL,GAAkBL,SAAlB;AACA,SAAKM,SAAL,GAAiBL,QAAjB;AACA,SAAKM,eAAL,GAAuBL,cAAvB;AAEA,SAAKM,OAAL,GAAe,KAAf;AACA,SAAKC,aAAL,GAAqB,KAArB;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AAEA,SAAKC,eAAL,GAAuBZ,eAAe,CAACa,OAAhB,CAAwBC,WAAxB,CACpB,qBAAoBf,IAAK,UAASG,QAAS,IAAGD,SAAU,EADpC,EAErB,KAAKc,cAAL,CAAoBC,IAApB,CAAyB,IAAzB,CAFqB,CAAvB;AAID;;AAEDD,EAAAA,cAAc,CAACE,KAAD,EAMX;AACD,UAAM;AAAElB,MAAAA,IAAF;AAAQmB,MAAAA,KAAR;AAAeC,MAAAA;AAAf,QAAwBF,KAAK,CAACG,IAApC;;AAEA,QAAIrB,IAAI,KAAKH,WAAW,CAACyB,MAArB,IAA+BtB,IAAI,KAAKJ,mBAAmB,CAAC0B,MAAhE,EAAwE;AACtE,WAAKZ,OAAL,GAAe,IAAf;AACD;;AAED,QAAIV,IAAI,KAAKH,WAAW,CAAC0B,MAAzB,EAAiC;AAC/B,WAAKb,OAAL,GAAe,KAAf;AACA,WAAKC,aAAL,GAAqB,KAArB;AACD;;AAED,QAAI,KAAKC,iBAAT,EAA4B;AAC1B,UAAIY,WAAJ;;AACA,UAAIL,KAAJ,EAAW;AACTK,QAAAA,WAAW,GAAG7B,WAAW,CAAC8B,SAAZ,CAAsBN,KAAtB,EAA6B,iBAA7B,CAAd;AACD;;AAED,WAAKP,iBAAL,CAAuBZ,IAAvB,EAA6BwB,WAA7B,EAA0CJ,IAA1C;AACD;AACF;;AAEDM,EAAAA,kBAAkB,CAACC,OAAD,EAA2B;AAC3C,SAAKf,iBAAL,GAAyBe,OAAzB;AACA,WAAO,MAAO,KAAKf,iBAAL,GAAyB,IAAvC;AACD;;AAEW,MAART,QAAQ,GAAG;AACb,WAAO,KAAKK,SAAZ;AACD;;AAES,MAANoB,MAAM,GAAG;AACX,WAAO,KAAKlB,OAAZ;AACD;;AAzEmB","sourcesContent":["/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { EmitterSubscription } from 'react-native';\nimport { NativeError } from '../internal/NativeError';\nimport { RewardedAdEventType } from '../RewardedAdEventType';\nimport { AdEventType } from '../AdEventType';\nimport { AdEventListener } from '../types/AdEventListener';\nimport { RequestOptions } from '../types/RequestOptions';\nimport { MobileAdsModuleInterface } from '../types/MobileAdsModule.interface';\nimport { RewardedAdReward } from '../types/RewardedAdReward';\n\nexport class MobileAd {\n _type: 'app_open' | 'interstitial' | 'rewarded';\n _googleMobileAds: MobileAdsModuleInterface;\n _requestId: number;\n _adUnitId: string;\n _requestOptions: RequestOptions;\n _loaded: boolean;\n _isLoadCalled: boolean;\n _onAdEventHandler: AdEventListener | null;\n _nativeListener: EmitterSubscription;\n\n constructor(\n type: 'app_open' | 'interstitial' | 'rewarded',\n googleMobileAds: MobileAdsModuleInterface,\n requestId: number,\n adUnitId: string,\n requestOptions: RequestOptions,\n ) {\n this._type = type;\n this._googleMobileAds = googleMobileAds;\n this._requestId = requestId;\n this._adUnitId = adUnitId;\n this._requestOptions = requestOptions;\n\n this._loaded = false;\n this._isLoadCalled = false;\n this._onAdEventHandler = null;\n\n this._nativeListener = googleMobileAds.emitter.addListener(\n `google_mobile_ads_${type}_event:${adUnitId}:${requestId}`,\n this._handleAdEvent.bind(this),\n );\n }\n\n _handleAdEvent(event: {\n body: {\n type: AdEventType | RewardedAdEventType;\n error?: { code: string; message: string };\n data?: RewardedAdReward;\n };\n }) {\n const { type, error, data } = event.body;\n\n if (type === AdEventType.LOADED || type === RewardedAdEventType.LOADED) {\n this._loaded = true;\n }\n\n if (type === AdEventType.CLOSED) {\n this._loaded = false;\n this._isLoadCalled = false;\n }\n\n if (this._onAdEventHandler) {\n let nativeError;\n if (error) {\n nativeError = NativeError.fromEvent(error, 'googleMobileAds');\n }\n\n this._onAdEventHandler(type, nativeError, data);\n }\n }\n\n _setAdEventHandler(handler: AdEventListener) {\n this._onAdEventHandler = handler;\n return () => (this._onAdEventHandler = null);\n }\n\n get adUnitId() {\n return this._adUnitId;\n }\n\n get loaded() {\n return this._loaded;\n }\n}\n"]}
1
+ {"version":3,"sources":["MobileAd.ts"],"names":["isFunction","isOneOf","NativeError","AdEventType","RewardedAdEventType","GAMAdEventType","validateAdShowOptions","MobileAd","constructor","type","googleMobileAds","requestId","adUnitId","requestOptions","_type","_googleMobileAds","_requestId","_adUnitId","_requestOptions","_loaded","_isLoadCalled","_adEventsListeners","Map","_adEventListenersMap","Object","values","_","LOADED","forEach","set","_adEventListenerId","_adEventsListenerId","_nativeListener","emitter","addListener","_handleAdEvent","bind","event","error","data","body","CLOSED","payload","fromEvent","listener","_getAdEventListeners","_addAdEventsListener","Error","_className","id","delete","_addAdEventListener","get","name","_camelCaseType","load","native","show","showOptions","options","e","message","removeAllListeners","clear","map","loaded"],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2016-present Invertase Limited & Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this library except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nimport { EmitterSubscription } from 'react-native';\nimport { isFunction, isOneOf } from '../common';\nimport { NativeError } from '../internal/NativeError';\nimport { AdEventType } from '../AdEventType';\nimport { RewardedAdEventType } from '../RewardedAdEventType';\nimport { AdEventListener, AdEventPayload } from '../types/AdEventListener';\nimport { AdEventsListener } from '../types/AdEventsListener';\nimport { AdShowOptions } from '../types/AdShowOptions';\nimport { RequestOptions } from '../types/RequestOptions';\nimport { MobileAdInterface } from '../types/MobileAd.interface';\nimport { MobileAdsModuleInterface } from '../types/MobileAdsModule.interface';\nimport { RewardedAdReward } from '../types/RewardedAdReward';\nimport { GAMAdEventType } from '../GAMAdEventType';\nimport { AppEvent } from '../types/AppEvent';\nimport { validateAdShowOptions } from '../validateAdShowOptions';\n\ntype EventType = AdEventType | RewardedAdEventType | GAMAdEventType;\n\nexport abstract class MobileAd implements MobileAdInterface {\n protected _type: 'app_open' | 'interstitial' | 'rewarded' | 'rewarded_interstitial';\n protected _googleMobileAds: MobileAdsModuleInterface;\n protected _requestId: number;\n protected _adUnitId: string;\n protected _requestOptions: RequestOptions;\n protected _loaded: boolean;\n protected _isLoadCalled: boolean;\n protected _adEventsListeners: Map<number, AdEventsListener<EventType>>;\n protected _adEventListenersMap: Map<EventType, Map<number, AdEventListener<EventType>>>;\n protected _adEventsListenerId: number;\n protected _adEventListenerId: number;\n protected _nativeListener: EmitterSubscription;\n\n protected constructor(\n type: 'app_open' | 'interstitial' | 'rewarded' | 'rewarded_interstitial',\n googleMobileAds: MobileAdsModuleInterface,\n requestId: number,\n adUnitId: string,\n requestOptions: RequestOptions,\n ) {\n this._type = type;\n this._googleMobileAds = googleMobileAds;\n this._requestId = requestId;\n this._adUnitId = adUnitId;\n this._requestOptions = requestOptions;\n\n this._loaded = false;\n this._isLoadCalled = false;\n this._adEventsListeners = new Map();\n this._adEventListenersMap = new Map();\n Object.values({\n ...AdEventType,\n ...RewardedAdEventType,\n ...GAMAdEventType,\n _: AdEventType.LOADED, // since AdEventType.LOADED is overwritten by RewardedAdEventType.LOADED\n }).forEach(type => {\n this._adEventListenersMap.set(type as EventType, new Map());\n });\n this._adEventListenerId = 0;\n this._adEventsListenerId = 0;\n\n this._nativeListener = googleMobileAds.emitter.addListener(\n `google_mobile_ads_${type}_event:${adUnitId}:${requestId}`,\n this._handleAdEvent.bind(this),\n );\n }\n\n protected _handleAdEvent(event: {\n body: {\n type: EventType;\n error?: { code: string; message: string };\n data?: RewardedAdReward | AppEvent;\n };\n }) {\n const { type, error, data } = event.body;\n\n if (type === AdEventType.LOADED || type === RewardedAdEventType.LOADED) {\n this._loaded = true;\n }\n\n if (type === AdEventType.CLOSED) {\n this._loaded = false;\n this._isLoadCalled = false;\n }\n\n let payload: AdEventPayload<EventType> = data;\n if (error) {\n payload = NativeError.fromEvent(error, 'googleMobileAds');\n }\n this._adEventsListeners.forEach(listener => {\n listener({\n type,\n payload,\n });\n });\n this._getAdEventListeners(type).forEach(listener => {\n listener(payload);\n });\n }\n\n protected _addAdEventsListener<T extends EventType>(listener: AdEventsListener<T>) {\n if (!isFunction(listener)) {\n throw new Error(`${this._className}.addAdEventsListener(*) 'listener' expected a function.`);\n }\n\n const id = this._adEventsListenerId++;\n this._adEventsListeners.set(id, listener as AdEventsListener<EventType>);\n return () => {\n this._adEventsListeners.delete(id);\n };\n }\n\n protected _addAdEventListener<T extends EventType>(type: T, listener: AdEventListener<T>) {\n if (\n !(\n isOneOf(type, Object.values(AdEventType)) ||\n (isOneOf(type, Object.values(RewardedAdEventType)) && this._type === 'rewarded')\n )\n ) {\n throw new Error(\n `${this._className}.addAdEventListener(*) 'type' expected a valid event type value.`,\n );\n }\n if (!isFunction(listener)) {\n throw new Error(\n `${this._className}.addAdEventListener(_, *) 'listener' expected a function.`,\n );\n }\n\n const id = this._adEventListenerId++;\n this._getAdEventListeners(type).set(id, listener);\n return () => {\n this._getAdEventListeners(type).delete(id);\n };\n }\n\n protected _getAdEventListeners<T extends EventType>(type: T) {\n return this._adEventListenersMap.get(type) as Map<number, AdEventListener<T>>;\n }\n\n protected get _className() {\n return this.constructor.name;\n }\n\n protected get _camelCaseType() {\n let type: 'appOpen' | 'interstitial' | 'rewarded' | 'rewardedInterstitial';\n if (this._type === 'app_open') {\n type = 'appOpen';\n } else if (this._type === 'rewarded_interstitial') {\n type = 'rewardedInterstitial';\n } else {\n type = this._type;\n }\n return type;\n }\n\n public load() {\n // Prevent multiple load calls\n if (this._loaded || this._isLoadCalled) {\n return;\n }\n\n this._isLoadCalled = true;\n const load = this._googleMobileAds.native[`${this._camelCaseType}Load`];\n load(this._requestId, this._adUnitId, this._requestOptions);\n }\n\n public show(showOptions?: AdShowOptions) {\n if (!this._loaded) {\n throw new Error(\n `${this._className}.show() The requested ${this._className} has not loaded and could not be shown.`,\n );\n }\n\n let options;\n try {\n options = validateAdShowOptions(showOptions);\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`${this._className}.show(*) ${e.message}.`);\n } else {\n throw e;\n }\n }\n\n const show = this._googleMobileAds.native[`${this._camelCaseType}Show`];\n return show(this._requestId, this._adUnitId, options);\n }\n\n public abstract addAdEventsListener<T extends never>(listener: AdEventsListener<T>): () => void;\n\n public abstract addAdEventListener<T extends never>(type: T, listener: AdEventListener<T>): void;\n\n public removeAllListeners() {\n this._adEventsListeners.clear();\n this._adEventListenersMap.forEach((_, type, map) => {\n map.set(type, new Map());\n });\n }\n\n public get adUnitId() {\n return this._adUnitId;\n }\n\n public get loaded() {\n return this._loaded;\n }\n}\n"]}
@@ -1,3 +1,5 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
1
3
  /*
2
4
  * Copyright (c) 2016-present Invertase Limited & Contributors
3
5
  *
@@ -14,12 +16,12 @@
14
16
  * limitations under the License.
15
17
  *
16
18
  */
17
- import { isFunction, isString } from '../common';
19
+ import { isString } from '../common';
18
20
  import { MobileAds } from '../MobileAds';
19
21
  import { validateAdRequestOptions } from '../validateAdRequestOptions';
20
- import { validateAdShowOptions } from '../validateAdShowOptions';
21
22
  import { MobileAd } from './MobileAd';
22
- let _rewardedRequest = 0;
23
+ import { AdEventType } from '../AdEventType';
24
+
23
25
  /**
24
26
  * A class for interacting and showing Rewarded Ads.
25
27
  *
@@ -52,13 +54,11 @@ let _rewardedRequest = 0;
52
54
  * ```js
53
55
  * import { RewardedAdEventType } from 'react-native-google-mobile-ads';
54
56
  *
55
- * rewarded.onAdEvent((type, error, reward) => {
56
- * if (type === RewardedAdEventType.LOADED) {
57
- * rewarded.show();
58
- * }
59
- * if (type === RewardedAdEventType.EARNED_REWARD) {
60
- * console.log('User earned reward of ', reward);
61
- * }
57
+ * rewarded.addAdEventListener(RewardedAdEventType.LOADED. () => {
58
+ * rewarded.show();
59
+ * });
60
+ * rewarded.addAdEventListener(RewardedAdEventType.EARNED_REWARD. (reward) => {
61
+ * console.log('User earned reward of ', reward);
62
62
  * });
63
63
  *
64
64
  * rewarded.load();
@@ -67,7 +67,6 @@ let _rewardedRequest = 0;
67
67
  * The rewarded advert will be presented to the user, and several more events can be triggered such as the user clicking the
68
68
  * advert, closing it or completing the action.
69
69
  */
70
-
71
70
  export class RewardedAd extends MobileAd {
72
71
  /**
73
72
  * Creates a new RewardedAd instance.
@@ -81,12 +80,11 @@ export class RewardedAd extends MobileAd {
81
80
  * requestAgent: 'CoolAds',
82
81
  * });
83
82
  *
84
- * rewardedAd.onAdEvent((type, error, data) => {
85
- * console.log('New event: ', type, error);
86
- *
87
- * if (type === RewardedAdEventType.LOADED) {
88
- * rewardedAd.show();
89
- * }
83
+ * rewarded.addAdEventListener(RewardedAdEventType.LOADED. () => {
84
+ * rewarded.show();
85
+ * });
86
+ * rewarded.addAdEventListener(RewardedAdEventType.EARNED_REWARD. (reward) => {
87
+ * console.log('User earned reward of ', reward);
90
88
  * });
91
89
  *
92
90
  * rewardedAd.load();
@@ -110,46 +108,23 @@ export class RewardedAd extends MobileAd {
110
108
  }
111
109
  }
112
110
 
113
- const requestId = _rewardedRequest++;
111
+ const requestId = RewardedAd._rewardedRequest++;
114
112
  return new RewardedAd('rewarded', MobileAds(), requestId, adUnitId, options);
115
113
  }
116
114
 
117
- load() {
118
- // Prevent multiple load calls
119
- if (this._loaded || this._isLoadCalled) {
120
- return;
121
- }
122
-
123
- this._isLoadCalled = true;
124
-
125
- this._googleMobileAds.native.rewardedLoad(this._requestId, this._adUnitId, this._requestOptions);
115
+ addAdEventsListener(listener) {
116
+ return this._addAdEventsListener(listener);
126
117
  }
127
118
 
128
- onAdEvent(handler) {
129
- if (!isFunction(handler)) {
130
- throw new Error("RewardedAd.onAdEvent(*) 'handler' expected a function.");
119
+ addAdEventListener(type, listener) {
120
+ if (type === AdEventType.LOADED) {
121
+ throw new Error('RewardedAd.addAdEventListener(*) use RewardedAdEventType.LOADED instead of AdEventType.LOADED.');
131
122
  }
132
123
 
133
- return this._setAdEventHandler(handler);
134
- }
135
-
136
- show(showOptions) {
137
- if (!this._loaded) {
138
- throw new Error('RewardedAd.show() The requested RewardedAd has not loaded and could not be shown.');
139
- }
140
-
141
- let options;
142
-
143
- try {
144
- options = validateAdShowOptions(showOptions);
145
- } catch (e) {
146
- if (e instanceof Error) {
147
- throw new Error(`RewardedAd.show(*) ${e.message}.`);
148
- }
149
- }
150
-
151
- return this._googleMobileAds.native.rewardedShow(this._requestId, this._adUnitId, options);
124
+ return this._addAdEventListener(type, listener);
152
125
  }
153
126
 
154
127
  }
128
+
129
+ _defineProperty(RewardedAd, "_rewardedRequest", 0);
155
130
  //# sourceMappingURL=RewardedAd.js.map