UNPKG

ironsource-mediation

Version:

IronSource ad mediation React-Native plugin. Monetize apps with rewarded video, interstitial, banner, and native ads.

1,004 lines (921 loc) 33.5 kB
/** * This is the main IronSource bridge module. */ import { NativeModules, Platform, NativeEventEmitter } from 'react-native' import { ANDROID_SDK_VERSION, IOS_SDK_VERSION, PLUGIN_TYPE, PLUGIN_VERSION, } from './utils/IronSourceConstants' import { type AdUnit, type IronSourceBannerOptions, type IronSourceRVPlacement, type IronSourceSegment, } from './models' import { impressionDataFromMap, conentViewErrorFromMap, ironSourceAdInfoFromMap, ironSourceErrorFromMap, ironSourceRvPlacementFromMap, } from './utils/utils'; import type { InitializationListener, ConsentViewListener, ImpressionDataListener, LevelPlayBannerListener, LevelPlayInterstitialListener, LevelPlayRewardedVideoListener, LevelPlayRewardedVideoManualListener, } from './models/listeners' import { setPluginData } from './utils/IronSourceConfig'; /** Extract IronSourceMediation module **/ const { IronSourceMediation } = NativeModules /** Types =======================================================================**/ /** * Native Module Type * Descriptions show the function names of native SDKs. */ type IronSourceNativeModuleType = { /** Base API =============================================================**/ /** * Android: getAdvertiserId * iOS: advertiserId * @deprecated This API will be removed in version 4.0.0. */ getAdvertiserId(): Promise<string | null> /** * Android: validateIntegration * iOS: validateIntegration * @deprecated This API will be removed in version 4.0.0. */ validateIntegration(): Promise<void> /** * Android: shouldTrackNetworkState * iOS: shouldTrackReachability *@deprecated This API will be removed in version 4.0.0. */ shouldTrackNetworkState(isEnabled: boolean): Promise<void> /** * Android: setDynamicUserId * iOS: setDynamicUserId * * For RV server-to-server callback. * Must be set before showRV. * @deprecated This API will be removed in version 4.0.0. */ setDynamicUserId(userId: string): Promise<void> /** * Android: setAdaptersDebug * iOS: setAdaptersDebug * @deprecated This API will be removed in version 4.0.0. */ setAdaptersDebug(isEnabled: boolean): Promise<void> /** * Android: setConsent * iOS: setConsent * @deprecated This API will be removed in version 4.0.0. */ setConsent(isConsent: boolean): Promise<void> /** * Android: setMetaData * iOS: setMetaDataWithKey * @deprecated This API will be removed in version 4.0.0. */ setMetaData(key: string, values: Array<string>): Promise<void> /** * Android: setSegment * iOS: setSegment * @deprecated This API will be removed in version 4.0.0. */ setSegment(segment: IronSourceSegment): Promise<void> /** * Android: launchTestSuite * iOS: launchTestSuite * @deprecated This API will be removed in version 4.0.0. */ launchTestSuite(): Promise<void> /** * Android: setWaterfallConfiguration * iOS: setWaterfallConfiguration * @deprecated This API will be removed in version 4.0.0. */ setWaterfallConfiguration( ceiling: number, floor: number, adUnit: AdUnit ): Promise<void> /** * Android: clearWaterfallConfiguration * iOS: clearWaterfallConfiguration * @deprecated This API will be removed in version 4.0.0. */ clearWaterfallConfiguration(adUnit: AdUnit): Promise<void> /** * Android: setClientSideCallbacks * iOS: setUseClientSideCallbacks * @deprecated This API will be removed in version 4.0.0. * * This must be called before init. * OW client side automatic result polling * https://developers.is.com/ironsource-mobile/android/offerwall-integration-android/#step-3 */ setClientSideCallbacks(isEnabled: boolean): Promise<void> /** init API =============================================================**/ /** * Android: setUserId * iOS: setUserId * * When an empty string was passed as userId, SDK falls back to default. * @deprecated This API will be removed in version 4.0.0. */ setUserId(userId: string): Promise<void> /** * Android: init * iOS: initWithAppKey * * Use init to init with all ad units. * Use initWithAdUnits to init with only specific ad units. @deprecated This API will be removed in version 4.0.0. */ init(appKey: string): Promise<void> /** * @deprecated This API will be removed in version 4.0.0. */ initWithAdUnits(appKey: string, adUnits: Array<AdUnit>): Promise<void> /** Rewarded Video API ===============================================================**/ /** * Android: showRewardedVideo * iOS: showRewardedVideoWithViewController * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#showAd()} instead. */ showRewardedVideo(): Promise<void> /** * @deprecated Use the alternate API {@link LevelPlayRewardedAd#showAd(placementName)} instead. */ showRewardedVideoForPlacement(placementName: string): Promise<void> /** * Android: isRewardedVideoAvailable * iOS: hasRewardedVideo * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#isAdReady()} instead. */ isRewardedVideoAvailable(): Promise<boolean> /** * Android: getRewardedVideoPlacementInfo * iOS: rewardedVideoPlacementInfo * * Must be called after init success, otherwise returns null. * This defaults back to DefaultPlacement if none matched. * * @deprecated This method will be removed in future versions. */ getRewardedVideoPlacementInfo( placementName: string ): Promise<IronSourceRVPlacement | undefined> /** * Android: isRewardedVideoPlacementCapped * iOS: isRewardedVideoCappedForPlacement * * If none matches with the name, returns false. * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#isPlacementCapped(placementName)} instead. */ isRewardedVideoPlacementCapped(placementName: string): Promise<boolean> /** * Android: setRewardedVideoServerParameters * iOS: setRewardedVideoServerParameters * * Must be called before showRewardedVideo * * @deprecated This method will be removed in future versions. */ setRewardedVideoServerParams(params: { [key: string]: string }): Promise<void> /** * Android: clearRewardedVideoServerParameters * iOS: clearRewardedVideoServerParameters * * @deprecated This method will be removed in future versions. */ clearRewardedVideoServerParams(): Promise<void> /** * For Manual Load RV mode * Android: loadRewardedVideo * iOS: loadRewardedVideo * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#loadAd()} instead. */ loadRewardedVideo(): Promise<void> /** * Must be called before init. * Android: setLevelPlayRewardedVideoManual * iOS: setLevelPlayRewardedVideoManual * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#setListener(LevelPlayRewardedAdListener)} instead. */ setLevelPlayRewardedVideoManual(): Promise<void> /** Interstitial API ===============================================================**/ /** * Android: loadInterstitial * iOS: loadInterstitial * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#loadAd()} instead. */ loadInterstitial(): Promise<void> /** * Android: showInterstitial * iOS: showInterstitialWithViewController * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#showAd()} instead. */ showInterstitial(): Promise<void> /** * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#showAd(placementName)} instead. */ showInterstitialForPlacement(placementName: string): Promise<void> /** * Android: isInterstitialReady * iOS: hasInterstitial * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#isAdReady()} instead. */ isInterstitialReady(): Promise<boolean> /** * Android: isInterstitialPlacementCapped * iOS: isInterstitialCappedForPlacement * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#isPlacementCapped(placementName)} instead. */ isInterstitialPlacementCapped(placementName: string): Promise<boolean> /** Banner API ===============================================================**/ /** * Android: loadBanner * iOS: loadBannerWithViewController * * It falls back to BANNER in the case of invalid sizeDescriptions. * * @deprecated Use the alternate API {@link LevelPlayBannerAdView#loadAd()} instead. */ loadBanner(options: IronSourceBannerOptions): Promise<void> /** * Android: destroyBanner * iOS: destroyBanner * * @deprecated Use the alternate API {@link LevelPlayBannerAdView#destroy()} instead. */ destroyBanner(): Promise<void> /** * Android: n/a * iOS: n/a * * This simply changes the visibility of the hidden banner view. * * @deprecated This method will be removed in future versions. */ displayBanner(): Promise<void> /** * Android: n/a * iOS: n/a * This simply changes the visibility of the banner view. * Reloading does not take place while it's hidden. * * @deprecated This method will be removed in future versions. */ hideBanner(): Promise<void> /** * Android: isBannerPlacementCapped * iOS: isBannerCappedForPlacement * * @deprecated Capping is no longer supported for Banners. */ isBannerPlacementCapped(placementName: string): Promise<boolean> /** * Android: getMaximalAdaptiveHeight * iOS: getMaximalAdaptiveHeight * * @deprecated This method will be removed in future versions. */ getMaximalAdaptiveHeight(width: number): Promise<number> /** iOS ConversionValue API ========================================================**/ /** * Android: n/a * iOS: getConversionValue * * Returns undefined for Android * @deprecated This method will be removed in 4.0.0 version. */ getConversionValue(): Promise<number | undefined> /** iOS ConsentView API ============================================================**/ /** * Android: n/a * iOS: loadConsentViewWithType * * use "pre" for all your consentViewType * https://developers.is.com/ironsource-mobile/ios/permission-popup-ios/#step-1 * @deprecated This method will be removed in 4.0.0 version. */ loadConsentViewWithType(consentViewType: string): Promise<void> /** * Android: n/a * iOS: showConsentViewWithType * * use "pre" for all your consentViewType * https://developers.is.com/ironsource-mobile/ios/permission-popup-ios/#step-1 * @deprecated This method will be removed in 4.0.0 version. */ showConsentViewWithType(consentViewType: string): Promise<void> } /** * These are needed since ReactNative NativeModules does not support function overload or optional arguments. * @deprecated This method will be removed in 4.0.0 version. */ type InitFunction = (appKey: string, adUnits?: Array<AdUnit>) => Promise<void> type ShowFunction = (placementName?: string) => Promise<void> type IronSourceProxyType = { /** * Android: init * iOS: initWithAppKey * @deprecated This method will be removed in 4.0.0 version. */ init: InitFunction /** * Android: showRewardedVideo * iOS: showRewardedVideoWithViewController * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#showAd()} instead. */ showRewardedVideo: ShowFunction /** * Android: showInterstitial * iOS: showInterstitialWithViewController * * @deprecated Use the alternate API {@link LevelPlayInterstitiald#showAd()} instead. */ showInterstitial: ShowFunction } type UtilFunctions = { /** * @deprecated This method will be removed in 4.0.0 version. */ getPluginVersion: () => string /** * @deprecated This method will be removed in 4.0.0 version. */ getNativeSDKVersion: () => string } type LevelPlayListeners = { /** * Sets the setInitializationListener to handle initialization events. * @deprecated This Listener will be removed in 4.0.0 version. */ setInitializationListener: (listener: InitializationListener) => void /** * @deprecated This method will be removed in 4.0.0 version. */ setImpressionDataListener: (listener: ImpressionDataListener) => void /** * Sets the setConsentViewListener to handle consent view events. * @deprecated This Listener will be removed in 4.0.0 version. */ setConsentViewListener: (listener: ConsentViewListener) => void /** * Sets the setLevelPlayBannerListener to handle banner ad events. * @param listener The setLevelPlayBannerListener object containing event handlers. * * @deprecated Use the alternate API LevelPlayBannerAdView with LevelPlayBannerAdViewListener instead. */ setLevelPlayBannerListener: (listener: LevelPlayBannerListener) => void /** * Sets the setLevelPlayInterstitialListener to handle interstitial ad events. * @param listener The setLevelPlayInterstitialListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#setListener(LevelPlayInterstitialAdListener)} instead. */ setLevelPlayInterstitialListener: (listener: LevelPlayInterstitialListener) => void /** * Sets the setLevelPlayRewardedVideoListener to handle rewarded video ad events. * @param listener The setLevelPlayRewardedVideoListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#setListener(LevelPlayRewardedAdListener)} instead. */ setLevelPlayRewardedVideoListener: (listener: LevelPlayRewardedVideoListener) => void /** * Sets the setLevelPlayRewardedVideoManualListener to handle rewarded video ad events. * @param listener The setLevelPlayRewardedVideoManualListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#setListener(LevelPlayRewardedAdListener)} instead. */ setLevelPlayRewardedVideoManualListener: (listener: LevelPlayRewardedVideoManualListener) => void } /** * Exposed Module Type */ type IronSourceType = UtilFunctions & LevelPlayListeners & IronSourceProxyType & Omit<IronSourceNativeModuleType, | 'init' | 'initWithAdUnits' | 'showRewardedVideo' | 'showRewardedVideoForPlacement' | 'showInterstitial' | 'showInterstitialForPlacement' > /** Util =========================================================================**/ /** * @deprecated This method will be removed in 4.0.0 version. */ const getReactNativeVersion = (): string => { let version = '' try { version = require('react-native/package.json').version as string } catch (e) { console.warn('IronSource - failed to get the ReactNative version') } finally { return version } } /** * @deprecated This method will be removed in 4.0.0 version. */ const getPluginVersion: () => string = () => { return PLUGIN_VERSION } /** * @deprecated This method will be removed in 4.0.0 version. */ const getNativeSDKVersion: () => string = () => { return Platform.OS === 'android' ? ANDROID_SDK_VERSION : Platform.OS === 'ios' ? IOS_SDK_VERSION : 'unsupported' } /** Module =======================================================================**/ const IronSourceNativeModule: IronSourceNativeModuleType = IronSourceMediation /** * Proxy Functions */ /** * @deprecated This method will be removed in 4.0.0 version. */ const init: InitFunction = async ( appKey: string, adUnits?: Array<AdUnit> ): Promise<void> => { try { const reactNativeVersion = getReactNativeVersion() // set plugin data await setPluginData(PLUGIN_TYPE, PLUGIN_VERSION, reactNativeVersion) } catch (e) { // log? console.warn('failed to set plugin data') } // init return adUnits === undefined || adUnits.length === 0 ? IronSourceNativeModule.init(appKey) : IronSourceNativeModule.initWithAdUnits(appKey, adUnits) } /** * @deprecated Use the alternate API {@link LevelPlayRewardedAd#showAd()} instead. */ const showRewardedVideo: ShowFunction = async ( placementName?: string ): Promise<void> => { return placementName === undefined ? IronSourceNativeModule.showRewardedVideo() : IronSourceNativeModule.showRewardedVideoForPlacement(placementName) } /** * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#showAd()} instead. */ const showInterstitial: ShowFunction = async ( placementName?: string ): Promise<void> => { return placementName === undefined ? IronSourceNativeModule.showInterstitial() : IronSourceNativeModule.showInterstitialForPlacement(placementName) } /** * iOS specific function stubs for Android. * No rejects for now in the case of these being called on Android. */ const IOSMethodStubs = { /** iOS ConversionValue API ========================================================**/ /** * @deprecated This method will be removed in 4.0.0 version. */ getConversionValue: () => Promise.resolve(undefined), /** iOS ConsentView API ============================================================**/ /** * @deprecated This method will be removed in 4.0.0 version. */ loadConsentViewWithType: (_: string) => Promise.resolve(), /** * @deprecated This method will be removed in 4.0.0 version. */ showConsentViewWithType: (_: string) => Promise.resolve(), } /** LevelPlay Listeners Setters =================================================================**/ const eventEmitter = new NativeEventEmitter(IronSourceMediation) // Event Name Constants defined on each platform const { // Initialization ON_INITIALIZATION_COMPLETE, // ImpressionData ON_IMPRESSION_SUCCESS, // ConsentView CONSENT_VIEW_DID_LOAD_SUCCESS, CONSENT_VIEW_DID_FAIL_TO_LOAD, CONSENT_VIEW_DID_SHOW_SUCCESS, CONSENT_VIEW_DID_FAIL_TO_SHOW, CONSENT_VIEW_DID_ACCEPT, // LevelPlayBanner LP_BN_ON_AD_LOADED, LP_BN_ON_AD_LOAD_FAILED, LP_BN_ON_AD_CLICKED, LP_BN_ON_AD_SCREEN_PRESENTED, LP_BN_ON_AD_SCREEN_DISMISSED, LP_BN_ON_AD_LEFT_APPLICATION, // LevelPlayInterstitial LP_IS_ON_AD_READY, LP_IS_ON_AD_LOAD_FAILED, LP_IS_ON_AD_OPENED, LP_IS_ON_AD_CLOSED, LP_IS_ON_AD_SHOW_FAILED, LP_IS_ON_AD_CLICKED, LP_IS_ON_AD_SHOW_SUCCEEDED, // LevelPlayRewardedVideo LP_RV_ON_AD_AVAILABLE, LP_RV_ON_AD_UNAVAILABLE, LP_RV_ON_AD_OPENED, LP_RV_ON_AD_CLOSED, LP_RV_ON_AD_REWARDED, LP_RV_ON_AD_SHOW_FAILED, LP_RV_ON_AD_CLICKED, // Manual Load RV Events LP_MANUAL_RV_ON_AD_READY, LP_MANUAL_RV_ON_AD_LOAD_FAILED, } = IronSourceMediation.getConstants() /** * Sets the setInitializationListener to handle impression data events. * @param listener The setInitializationListener object containing event handlers. * * @deprecated This Listener will be removed in 4.0.0 version. */ const setInitializationListener = (listener: InitializationListener) => { // Remove any existing listeners eventEmitter.removeAllListeners(ON_INITIALIZATION_COMPLETE) // Add the new listener if provided if (listener.onInitializationComplete) { eventEmitter.addListener(ON_INITIALIZATION_COMPLETE, () => { listener.onInitializationComplete!() }) } } /** * Sets the setImpressionDataListener to handle impression data events. * @param listener The setImpressionDataListener object containing event handlers. * * @deprecated This Listener will be removed in 4.0.0 version. */ const setImpressionDataListener = (listener: ImpressionDataListener) => { // Remove any existing listeners eventEmitter.removeAllListeners(ON_IMPRESSION_SUCCESS) // Add the new listener if provided if (listener.onImpressionSuccess) { eventEmitter.addListener(ON_IMPRESSION_SUCCESS, (data?: any) => { const impressionData = data ? impressionDataFromMap(data) : undefined listener.onImpressionSuccess!(impressionData) }) } } /** * Sets the consentViewListener to handle consent view events. * @param listener The consentViewListener object containing event handlers. * * @deprecated This method will be removed in 4.0.0 version. */ const setConsentViewListener = (listener: ConsentViewListener) => { if (Platform.OS !== 'ios') { console.error('Only supported for iOS.') return } // Remove all existing listeners for these events eventEmitter.removeAllListeners(CONSENT_VIEW_DID_LOAD_SUCCESS) eventEmitter.removeAllListeners(CONSENT_VIEW_DID_FAIL_TO_LOAD) eventEmitter.removeAllListeners(CONSENT_VIEW_DID_SHOW_SUCCESS) eventEmitter.removeAllListeners(CONSENT_VIEW_DID_FAIL_TO_SHOW) eventEmitter.removeAllListeners(CONSENT_VIEW_DID_ACCEPT) // Add the new listeners if provided if (listener.onConsentViewDidLoadSuccess) { eventEmitter.addListener( CONSENT_VIEW_DID_LOAD_SUCCESS, (data: any) => { const consentViewType = data.consentViewType as string; listener.onConsentViewDidLoadSuccess!(consentViewType); } ) } if (listener.onConsentViewDidFailToLoad) { eventEmitter.addListener( CONSENT_VIEW_DID_FAIL_TO_LOAD, (data: any) => { const error = conentViewErrorFromMap(data); listener.onConsentViewDidFailToLoad!(error) } ) } if (listener.onConsentViewDidShowSuccess) { eventEmitter.addListener( CONSENT_VIEW_DID_SHOW_SUCCESS, (data: any) => { const consentViewType = data.consentViewType as string; listener.onConsentViewDidShowSuccess!(consentViewType) } ) } if (listener.onConsentViewDidFailToShow) { eventEmitter.addListener( CONSENT_VIEW_DID_FAIL_TO_SHOW, (data: any) => { const error = conentViewErrorFromMap(data); listener.onConsentViewDidFailToShow!(error) } ) } if (listener.onConsentViewDidAccept) { eventEmitter.addListener( CONSENT_VIEW_DID_ACCEPT, (data: any) => { const consentViewType = data.consentViewType as string; listener.onConsentViewDidAccept!(consentViewType) } ) } } /** * Sets the setLevelPlayBannerListener to handle banner ad events. * @param listener The setLevelPlayBannerListener object containing event handlers. * * @deprecated This method will be removed in future versions. Please use LevelPlayBannerAdView with LevelPlayBannerAdViewListenr instead. */ const setLevelPlayBannerListener = (listener: LevelPlayBannerListener) => { // Remove existing listeners eventEmitter.removeAllListeners(LP_BN_ON_AD_LOADED) eventEmitter.removeAllListeners(LP_BN_ON_AD_LOAD_FAILED) eventEmitter.removeAllListeners(LP_BN_ON_AD_CLICKED) eventEmitter.removeAllListeners(LP_BN_ON_AD_SCREEN_PRESENTED) eventEmitter.removeAllListeners(LP_BN_ON_AD_SCREEN_DISMISSED) eventEmitter.removeAllListeners(LP_BN_ON_AD_LEFT_APPLICATION) // Add new listeners if (listener.onAdLoaded) { eventEmitter.addListener(LP_BN_ON_AD_LOADED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdLoaded!(ironSourceAdInfo) }) } if (listener.onAdLoadFailed) { eventEmitter.addListener(LP_BN_ON_AD_LOAD_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data); listener.onAdLoadFailed!(ironSourceError); }) } if (listener.onAdClicked) { eventEmitter.addListener(LP_BN_ON_AD_CLICKED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdClicked!(ironSourceAdInfo) }) } if (listener.onAdScreenPresented) { eventEmitter.addListener(LP_BN_ON_AD_SCREEN_PRESENTED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdScreenPresented!(ironSourceAdInfo) } ) } if (listener.onAdScreenDismissed) { eventEmitter.addListener(LP_BN_ON_AD_SCREEN_DISMISSED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdScreenDismissed!(ironSourceAdInfo) } ) } if (listener.onAdLeftApplication) { eventEmitter.addListener(LP_BN_ON_AD_LEFT_APPLICATION, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdScreenDismissed!(ironSourceAdInfo) } ) } } /** * Sets the LevelPlayInterstitialListener to handle interstitial ad events. * @param listener The LevelPlayInterstitialListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayInterstitialAd#setListener(LevelPlayInterstitialAdListener)} instead. */ const setLevelPlayInterstitialListener = ( listener: LevelPlayInterstitialListener ) => { eventEmitter.removeAllListeners(LP_IS_ON_AD_READY) eventEmitter.removeAllListeners(LP_IS_ON_AD_LOAD_FAILED) eventEmitter.removeAllListeners(LP_IS_ON_AD_OPENED) eventEmitter.removeAllListeners(LP_IS_ON_AD_CLOSED) eventEmitter.removeAllListeners(LP_IS_ON_AD_SHOW_FAILED) eventEmitter.removeAllListeners(LP_IS_ON_AD_CLICKED) eventEmitter.removeAllListeners(LP_IS_ON_AD_SHOW_SUCCEEDED) if (listener.onAdReady) { eventEmitter.addListener(LP_IS_ON_AD_READY, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdReady!(ironSourceAdInfo) }) } if (listener.onAdLoadFailed) { eventEmitter.addListener(LP_IS_ON_AD_LOAD_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data); listener.onAdLoadFailed!(ironSourceError); }) } if (listener.onAdOpened) { eventEmitter.addListener(LP_IS_ON_AD_OPENED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdOpened!(ironSourceAdInfo) }) } if (listener.onAdClosed) { eventEmitter.addListener(LP_IS_ON_AD_CLOSED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdClosed!(ironSourceAdInfo) }) } if (listener.onAdShowFailed) { eventEmitter.addListener(LP_IS_ON_AD_SHOW_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data.error); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdShowFailed!(ironSourceError, ironSourceAdInfo) }) } if (listener.onAdClicked) { eventEmitter.addListener(LP_IS_ON_AD_CLICKED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdClicked!(ironSourceAdInfo) }) } if (listener.onAdShowSucceeded) { eventEmitter.addListener(LP_IS_ON_AD_SHOW_SUCCEEDED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdShowSucceeded!(ironSourceAdInfo) } ) } } /** * Sets the LevelPlayRewardedVideoListener to handle rewarded video ad events. * @param listener The LevelPlayRewardedVideoListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#setListener(LevelPlayRewardedAdListener)} instead. */ const setLevelPlayRewardedVideoListener = ( listener: LevelPlayRewardedVideoListener ) => { eventEmitter.removeAllListeners(LP_RV_ON_AD_AVAILABLE) eventEmitter.removeAllListeners(LP_RV_ON_AD_UNAVAILABLE) eventEmitter.removeAllListeners(LP_RV_ON_AD_OPENED) eventEmitter.removeAllListeners(LP_RV_ON_AD_CLOSED) eventEmitter.removeAllListeners(LP_RV_ON_AD_REWARDED) eventEmitter.removeAllListeners(LP_RV_ON_AD_SHOW_FAILED) eventEmitter.removeAllListeners(LP_RV_ON_AD_CLICKED) if (listener.onAdAvailable) { eventEmitter.addListener(LP_RV_ON_AD_AVAILABLE, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdAvailable!(ironSourceAdInfo) }) } if (listener.onAdUnavailable) { eventEmitter.addListener(LP_RV_ON_AD_UNAVAILABLE, () => listener.onAdUnavailable!() ) } if (listener.onAdOpened) { eventEmitter.addListener(LP_RV_ON_AD_OPENED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdOpened!(ironSourceAdInfo) }) } if (listener.onAdClosed) { eventEmitter.addListener(LP_RV_ON_AD_CLOSED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdClosed!(ironSourceAdInfo) }) } if (listener.onAdRewarded) { eventEmitter.addListener(LP_RV_ON_AD_REWARDED, (data: any) => { const ironSourcePlacement = ironSourceRvPlacementFromMap(data.placement); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdRewarded!(ironSourcePlacement, ironSourceAdInfo) }) } if (listener.onAdShowFailed) { eventEmitter.addListener(LP_RV_ON_AD_SHOW_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data.error); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdShowFailed!(ironSourceError, ironSourceAdInfo); }) } if (listener.onAdClicked) { eventEmitter.addListener(LP_RV_ON_AD_CLICKED, (data: any) => { const ironSourcePlacement = ironSourceRvPlacementFromMap(data.placement); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdClicked!(ironSourcePlacement, ironSourceAdInfo) }) } } /** * Sets the LevelPlayRewardedVideoManualListener to handle rewarded video ad events. * @param listener The LevelPlayRewardedVideoManualListener object containing event handlers. * * @deprecated Use the alternate API {@link LevelPlayRewardedAd#setListener(LevelPlayRewardedAdListener)} instead. */ const setLevelPlayRewardedVideoManualListener = async ( listener: LevelPlayRewardedVideoManualListener ) => { eventEmitter.removeAllListeners(LP_RV_ON_AD_OPENED) eventEmitter.removeAllListeners(LP_RV_ON_AD_CLOSED) eventEmitter.removeAllListeners(LP_RV_ON_AD_REWARDED) eventEmitter.removeAllListeners(LP_RV_ON_AD_SHOW_FAILED) eventEmitter.removeAllListeners(LP_RV_ON_AD_CLICKED) eventEmitter.removeAllListeners(LP_MANUAL_RV_ON_AD_READY) eventEmitter.removeAllListeners(LP_MANUAL_RV_ON_AD_LOAD_FAILED) await IronSource.setLevelPlayRewardedVideoManual() if (listener.onAdOpened) { eventEmitter.addListener(LP_RV_ON_AD_OPENED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdOpened!(ironSourceAdInfo) }) } if (listener.onAdClosed) { eventEmitter.addListener(LP_RV_ON_AD_CLOSED, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdClosed!(ironSourceAdInfo) }) } if (listener.onAdRewarded) { eventEmitter.addListener(LP_RV_ON_AD_REWARDED, (data: any) => { const ironSourcePlacement = ironSourceRvPlacementFromMap(data.placement); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdRewarded!(ironSourcePlacement, ironSourceAdInfo) }) } if (listener.onAdShowFailed) { eventEmitter.addListener(LP_RV_ON_AD_SHOW_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data.error); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdShowFailed!(ironSourceError, ironSourceAdInfo); }) } if (listener.onAdClicked) { eventEmitter.addListener(LP_RV_ON_AD_CLICKED, (data: any) => { const ironSourcePlacement = ironSourceRvPlacementFromMap(data.placement); const ironSourceAdInfo = ironSourceAdInfoFromMap(data.adInfo); listener.onAdClicked!(ironSourcePlacement, ironSourceAdInfo) }) } if (listener.onAdReady) { eventEmitter.addListener(LP_MANUAL_RV_ON_AD_READY, (data: any) => { const ironSourceAdInfo = ironSourceAdInfoFromMap(data); listener.onAdReady!(ironSourceAdInfo) }) } if (listener.onAdLoadFailed) { eventEmitter.addListener(LP_MANUAL_RV_ON_AD_LOAD_FAILED, (data: any) => { const ironSourceError = ironSourceErrorFromMap(data); listener.onAdLoadFailed!(ironSourceError) } ) } } /**=======================================================================================**/ /** * @deprecated This method will be removed in 4.0.0 version. */ export const IronSource: IronSourceType = Object.create(Platform.OS === 'ios' ? IronSourceMediation: // overwrite stub iOS related methods { ...IronSourceMediation, ...IOSMethodStubs } , { getPluginVersion: { value: getPluginVersion, enumerable: true }, getNativeSDKVersion: { value: getNativeSDKVersion, enumerable: true }, init: { value: init, enumerable: true }, showRewardedVideo: { value: showRewardedVideo, enumerable: true }, showInterstitial: { value: showInterstitial, enumerable: true }, setInitializationListener: { value: setInitializationListener, enumerable: true }, setImpressionDataListener: { value: setImpressionDataListener, enumerable: true }, setConsentViewListener: { value: setConsentViewListener, enumerable: true }, setLevelPlayBannerListener: { value: setLevelPlayBannerListener, enumerable: true }, setLevelPlayInterstitialListener: { value: setLevelPlayInterstitialListener, enumerable: true }, setLevelPlayRewardedVideoListener: { value: setLevelPlayRewardedVideoListener, enumerable: true }, setLevelPlayRewardedVideoManualListener: { value: setLevelPlayRewardedVideoManualListener, enumerable: true }, })