Banner & MREC Ads

Integrate CloudX banner and MREC ads in React Native apps

Component Banner

Use CloudXBannerView when the ad should participate in your React Native layout. The component renders as a normal view, so parent layout, spacing, safe areas, overlays, and z-ordering work the same way as the rest of your app UI.

import React from 'react';
import { View } from 'react-native';
import { CloudXBannerView } from 'cloudx-react-native';

const AD_UNIT_ID = 'home_banner';

export function HomeScreen() {
    return (
        <View>
            <CloudXBannerView
                adUnitId={AD_UNIT_ID}
                placement="home_screen"
                customData="subscriber"
                extraParameters={{
                    section: 'top_stories',
                    refreshIndex: 1,
                    loggedIn: true,
                    experiments: ['component_banner'],
                    user: {
                        cohort: 'sports',
                    },
                }}
                onAdLoaded={(adInfo) => {
                    console.log('Banner loaded from', adInfo.networkName);
                }}
                onAdLoadFailed={(error) => {
                    console.log('Banner failed:', error.code, error.message);
                }}
                onAdClicked={(adInfo) => {
                    console.log('Banner clicked:', adInfo.adUnitId);
                }}
                onAdRevenuePaid={(adInfo) => {
                    console.log('Banner revenue:', adInfo.revenue);
                }}
            />
        </View>
    );
}

CloudXBannerView defaults to 320x50 on phones and 728x90 on tablets. You can pass normal React Native ViewProps, including style, testID, and accessibility props.

The component owns the native ad lifecycle. Do not call CloudXBannerAd.createAd(), showAd(), or destroyAd() for a component placement. If you need to change adUnitId, remount the component with a different React key.

<CloudXBannerView
    adUnitId="home_banner"
    style={{ alignSelf: 'center', marginVertical: 12 }}
/>

Component MREC

Use CloudXMRECView for an in-tree 300x250 MREC placement. It supports the same component props and callbacks as CloudXBannerView.

The component owns the native ad lifecycle. Do not call CloudXMRECAd.createAd(), showAd(), or destroyAd() for a component placement.

import React from 'react';
import { View } from 'react-native';
import { CloudXMRECView } from 'cloudx-react-native';

export function ArticleScreen() {
    return (
        <View>
            <CloudXMRECView
                adUnitId="article_mrec"
                placement="article_body"
                customData="sports_article"
                onAdLoaded={(adInfo) => {
                    console.log('MREC loaded from', adInfo.networkName);
                }}
                onAdLoadFailed={(error) => {
                    console.log('MREC failed:', error.code, error.message);
                }}
                onAdClicked={(adInfo) => {
                    console.log('MREC clicked:', adInfo.adUnitId);
                }}
                onAdRevenuePaid={(adInfo) => {
                    console.log('MREC revenue:', adInfo.revenue);
                }}
            />
        </View>
    );
}

Component Props

PropTypeDescription
adUnitIdstringRequired CloudX ad unit ID.
placementstring or nullOptional placement name for reporting.
customDatastring or nullOptional custom data string.
extraParametersCloudXExtraParameters or nullOptional extra parameters for network or server-side configuration.
onAdLoaded(adInfo) => voidCalled when an ad loads.
onAdLoadFailed(error) => voidCalled when an ad load fails.
onAdClicked(adInfo) => voidCalled when the ad is clicked.
onAdRevenuePaid(adInfo) => voidCalled when impression-level revenue is available.

CloudXExtraParameters accepts string, number, boolean, null, arrays, and nested objects.

<CloudXBannerView
    adUnitId="home_banner"
    extraParameters={{
        screen: 'home',
        position: 1,
        autoplay: false,
        keywords: ['sports', 'scores'],
        auction: {
            floor: 0.5,
        },
    }}
/>

Programmatic Overlay Banner

Use CloudXBannerAd when you need the existing native overlay behavior. Programmatic banners overlay your content at a fixed screen position.

import { CloudXBannerAd, CloudXAdPosition } from 'cloudx-react-native';

const AD_UNIT_ID = 'home_banner';

CloudXBannerAd.addAdLoadedEventListener((adInfo) => {
    console.log('Banner loaded from', adInfo.networkName);
});
CloudXBannerAd.addAdLoadFailedEventListener((error) => {
    console.log('Banner failed:', error.code, error.message);
});
CloudXBannerAd.addAdClickedEventListener((adInfo) => {
    console.log('Banner clicked');
});
CloudXBannerAd.addAdExpandedEventListener((adInfo) => {
    console.log('Banner expanded');
});
CloudXBannerAd.addAdCollapsedEventListener((adInfo) => {
    console.log('Banner collapsed');
});
CloudXBannerAd.addAdRevenuePaidListener((adInfo) => {
    console.log('Banner revenue:', adInfo.revenue);
});

CloudXBannerAd.createAd(AD_UNIT_ID, CloudXAdPosition.BOTTOM_CENTER);
CloudXBannerAd.showAd(AD_UNIT_ID);

CloudXBannerAd.hideAd(AD_UNIT_ID);
CloudXBannerAd.destroyAd(AD_UNIT_ID);

Auto-refresh is enabled by default. To control it manually:

CloudXBannerAd.stopAutoRefresh(AD_UNIT_ID);
CloudXBannerAd.startAutoRefresh(AD_UNIT_ID);

Use CloudXAdPosition to place the overlay banner:

TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTERED, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT

For pixel-level control, use offsets:

CloudXBannerAd.createAdWithOffsets(AD_UNIT_ID, CloudXAdPosition.TOP_CENTER, 0, 50);
CloudXBannerAd.updatePosition(AD_UNIT_ID, CloudXAdPosition.BOTTOM_CENTER);
CloudXBannerAd.updateOffsets(AD_UNIT_ID, 0, 20);

Optional placement and custom data for tracking:

CloudXBannerAd.setBackgroundColor(AD_UNIT_ID, '#000000');
CloudXBannerAd.setPlacement(AD_UNIT_ID, 'home_screen');
CloudXBannerAd.setCustomData(AD_UNIT_ID, 'custom_data');

Programmatic Overlay MREC

MREC overlays use CloudXMRECAd and a 300x250 size.

import { CloudXMRECAd, CloudXAdPosition } from 'cloudx-react-native';

const AD_UNIT_ID = 'home_mrec';

CloudXMRECAd.addAdLoadedEventListener((adInfo) => {
    console.log('MREC loaded from', adInfo.networkName);
});
CloudXMRECAd.addAdLoadFailedEventListener((error) => {
    console.log('MREC failed:', error.code, error.message);
});
CloudXMRECAd.addAdClickedEventListener((adInfo) => {
    console.log('MREC clicked');
});
CloudXMRECAd.addAdExpandedEventListener((adInfo) => {
    console.log('MREC expanded');
});
CloudXMRECAd.addAdCollapsedEventListener((adInfo) => {
    console.log('MREC collapsed');
});
CloudXMRECAd.addAdRevenuePaidListener((adInfo) => {
    console.log('MREC revenue:', adInfo.revenue);
});

CloudXMRECAd.createAd(AD_UNIT_ID, CloudXAdPosition.CENTERED);
CloudXMRECAd.showAd(AD_UNIT_ID);

CloudXMRECAd.destroyAd(AD_UNIT_ID);

CloudXMRECAd has the same API surface as CloudXBannerAd, including positioning, offsets, background color, placement, custom data, auto-refresh control, and event listeners.

React Hook

import React, { useEffect } from 'react';
import { Text } from 'react-native';
import { useCloudXBanner, CloudXBannerAd, CloudXAdPosition } from 'cloudx-react-native';

function HomeScreen() {
    const { isLoaded, error } = useCloudXBanner('home_banner');

    useEffect(() => {
        CloudXBannerAd.createAd('home_banner', CloudXAdPosition.BOTTOM_CENTER);
        CloudXBannerAd.showAd('home_banner');
        return () => CloudXBannerAd.destroyAd('home_banner');
    }, []);

    return <Text>{isLoaded ? 'Banner showing' : error?.message ?? 'Loading banner...'}</Text>;
}

Returns: { isLoaded, error }