UNPKG

3.25 kBPlain TextView Raw
1import { EventEmitter, Subscription, UnavailabilityError } from '@unimodules/core';
2
3import { setTestDeviceIDAsync } from './AdMob';
4import AdMobNativeModule from './ExpoAdsAdMobInterstitialManager';
5
6const moduleName = 'AdMobInterstitial';
7
8const eventNames = [
9 'interstitialDidLoad',
10 'interstitialDidFailToLoad',
11 'interstitialDidOpen',
12 'interstitialDidClose',
13 'interstitialWillLeaveApplication',
14];
15
16type EventNameType =
17 | 'interstitialDidLoad'
18 | 'interstitialDidFailToLoad'
19 | 'interstitialDidOpen'
20 | 'interstitialDidClose'
21 | 'interstitialWillLeaveApplication';
22
23type EventListener = (...args: any[]) => void;
24
25const eventEmitter = new EventEmitter(AdMobNativeModule);
26
27const eventHandlers: { [eventName: string]: Map<EventListener, Subscription> } = {};
28
29for (const eventName of eventNames) {
30 eventHandlers[eventName] = new Map();
31}
32
33export default {
34 async setAdUnitID(id: string): Promise<void> {
35 if (!AdMobNativeModule.setAdUnitID) {
36 throw new UnavailabilityError(moduleName, 'setAdUnitID');
37 }
38
39 await AdMobNativeModule.setAdUnitID(id);
40 },
41
42 /** @deprecated Test device IDs are now set globally. Use `AdMob.setTestDeviceIDAsync` instead. */
43 async setTestDeviceID(id: string): Promise<void> {
44 console.warn(
45 'AdMobInterstitial.setTestDeviceID is deprecated. Test device IDs are now set globally. Use AdMob.setTestDeviceIDAsync instead.'
46 );
47 await setTestDeviceIDAsync(id);
48 },
49 async requestAdAsync(
50 options: {
51 servePersonalizedAds?: boolean;
52 additionalRequestParams?: { [key: string]: string };
53 } = {}
54 ): Promise<void> {
55 if (!AdMobNativeModule.requestAd) {
56 throw new UnavailabilityError(moduleName, 'requestAdAsync');
57 }
58
59 const params: { [key: string]: string } = {
60 ...options.additionalRequestParams,
61 };
62 if (!options.servePersonalizedAds) {
63 params.npa = '1';
64 }
65
66 await AdMobNativeModule.requestAd(params);
67 },
68 async showAdAsync(): Promise<void> {
69 if (!AdMobNativeModule.showAd) {
70 throw new UnavailabilityError(moduleName, 'showAdAsync');
71 }
72
73 await AdMobNativeModule.showAd();
74 },
75 async dismissAdAsync(): Promise<void> {
76 if (!AdMobNativeModule.dismissAd) {
77 throw new UnavailabilityError(moduleName, 'dismissAdAsync');
78 }
79
80 await AdMobNativeModule.dismissAd();
81 },
82 async getIsReadyAsync(): Promise<boolean> {
83 if (!AdMobNativeModule.getIsReady) {
84 throw new UnavailabilityError(moduleName, 'getIsReadyAsync');
85 }
86
87 return await AdMobNativeModule.getIsReady();
88 },
89 addEventListener(type: EventNameType, handler: EventListener) {
90 if (eventNames.includes(type)) {
91 eventHandlers[type].set(handler, eventEmitter.addListener(type, handler));
92 } else {
93 console.log(`Event with type ${type} does not exist.`);
94 }
95 },
96 removeEventListener(type: EventNameType, handler: EventListener) {
97 const eventSubscription = eventHandlers[type].get(handler);
98 if (!eventHandlers[type].has(handler) || !eventSubscription) {
99 return;
100 }
101 eventSubscription.remove();
102 eventHandlers[type].delete(handler);
103 },
104 removeAllListeners() {
105 for (const eventName of eventNames) {
106 eventEmitter.removeAllListeners(eventName);
107 }
108 },
109};