1 | 'use strict';
|
2 |
|
3 | import { NativeModules, DeviceEventEmitter } from 'react-native';
|
4 |
|
5 | const RNAdMobInterstitial = NativeModules.RNAdMobInterstitial;
|
6 |
|
7 | const eventHandlers = {
|
8 | interstitialDidLoad: new Map(),
|
9 | interstitialDidFailToLoad: new Map(),
|
10 | interstitialDidOpen: new Map(),
|
11 | interstitialDidClose: new Map(),
|
12 | interstitialWillLeaveApplication: new Map(),
|
13 | };
|
14 |
|
15 | const addEventListener = (type, handler) => {
|
16 | switch (type) {
|
17 | case 'interstitialDidLoad':
|
18 | eventHandlers[type].set(
|
19 | handler,
|
20 | DeviceEventEmitter.addListener(type, handler)
|
21 | );
|
22 | break;
|
23 | case 'interstitialDidFailToLoad':
|
24 | eventHandlers[type].set(
|
25 | handler,
|
26 | DeviceEventEmitter.addListener(type, error => {
|
27 | handler(error);
|
28 | })
|
29 | );
|
30 | break;
|
31 | case 'interstitialDidOpen':
|
32 | eventHandlers[type].set(
|
33 | handler,
|
34 | DeviceEventEmitter.addListener(type, handler)
|
35 | );
|
36 | break;
|
37 | case 'interstitialDidClose':
|
38 | eventHandlers[type].set(
|
39 | handler,
|
40 | DeviceEventEmitter.addListener(type, handler)
|
41 | );
|
42 | break;
|
43 | case 'interstitialWillLeaveApplication':
|
44 | eventHandlers[type].set(
|
45 | handler,
|
46 | DeviceEventEmitter.addListener(type, handler)
|
47 | );
|
48 | break;
|
49 | default:
|
50 | console.log(`Event with type ${type} does not exist.`);
|
51 | }
|
52 | };
|
53 |
|
54 | const removeEventListener = (type, handler) => {
|
55 | if (!eventHandlers[type].has(handler)) {
|
56 | return;
|
57 | }
|
58 | eventHandlers[type].get(handler).remove();
|
59 | eventHandlers[type].delete(handler);
|
60 | };
|
61 |
|
62 | const removeAllListeners = () => {
|
63 | DeviceEventEmitter.removeAllListeners('interstitialDidLoad');
|
64 | DeviceEventEmitter.removeAllListeners('interstitialDidFailToLoad');
|
65 | DeviceEventEmitter.removeAllListeners('interstitialDidOpen');
|
66 | DeviceEventEmitter.removeAllListeners('interstitialDidClose');
|
67 | DeviceEventEmitter.removeAllListeners('interstitialWIllLeaveApplication');
|
68 | };
|
69 |
|
70 |
|
71 | const tryShowNewInterstitial = testID => {
|
72 | console.warn(
|
73 | `tryShowNewInterstitial method is deprecated and will be removed in the next major release, please use requestAd() and showAd() directly.\n\nExample: AdMobInterstitial.requestAd(AdMobInterstitial.showAd)`
|
74 | );
|
75 | if (testID) {
|
76 | RNAdMobInterstitial.setTestDeviceID(testID);
|
77 | }
|
78 |
|
79 | RNAdMobInterstitial.isReady(isReady => {
|
80 | if (isReady) {
|
81 | RNAdMobInterstitial.showAd(() => {});
|
82 | } else {
|
83 | RNAdMobInterstitial.requestAd(() => RNAdMobInterstitial.showAd(() => {}));
|
84 | }
|
85 | });
|
86 | };
|
87 |
|
88 | module.exports = {
|
89 | ...RNAdMobInterstitial,
|
90 | requestAd: (cb = () => {}) => RNAdMobInterstitial.requestAd(cb),
|
91 | showAd: (cb = () => {}) => RNAdMobInterstitial.showAd(cb),
|
92 | tryShowNewInterstitial,
|
93 | addEventListener,
|
94 | removeEventListener,
|
95 | removeAllListeners,
|
96 | setAdUnitId: id => {
|
97 | RNAdMobInterstitial.setAdUnitID(id);
|
98 | console.warn(
|
99 | `setAdUnitId will be deprecated soon. Please use setAdUnitID instead.`
|
100 | );
|
101 | },
|
102 | };
|