UNPKG

3.01 kBJavaScriptView Raw
1'use strict';
2
3import { NativeModules, DeviceEventEmitter } from 'react-native';
4
5const RNAdMobInterstitial = NativeModules.RNAdMobInterstitial;
6
7const eventHandlers = {
8 interstitialDidLoad: new Map(),
9 interstitialDidFailToLoad: new Map(),
10 interstitialDidOpen: new Map(),
11 interstitialDidClose: new Map(),
12 interstitialWillLeaveApplication: new Map(),
13};
14
15const 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
54const 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
62const removeAllListeners = () => {
63 DeviceEventEmitter.removeAllListeners('interstitialDidLoad');
64 DeviceEventEmitter.removeAllListeners('interstitialDidFailToLoad');
65 DeviceEventEmitter.removeAllListeners('interstitialDidOpen');
66 DeviceEventEmitter.removeAllListeners('interstitialDidClose');
67 DeviceEventEmitter.removeAllListeners('interstitialWIllLeaveApplication');
68};
69
70// replaces deprecated API
71const 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
88module.exports = {
89 ...RNAdMobInterstitial,
90 requestAd: (cb = () => {}) => RNAdMobInterstitial.requestAd(cb), // requestAd callback is optional
91 showAd: (cb = () => {}) => RNAdMobInterstitial.showAd(cb), // showAd callback is optional
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};