BiddingStack React Native SDK

BiddingStack React Native SDK Integration Guide

BiddingStack React Native SDK provides cross-platform header bidding for iOS and Android with Google Ad Manager (GAM) integration. It wraps the native iOS and Android SDKs via native modules. View Changelog.

Requirements

ComponentMinimum Version
React Native0.72+
iOS15.6+
Android Min SDK23

Installation

1. Install Packages

npm install ../biddingstack-core-26.7.20.tgz
npm install ../biddingstack-gam-adapter-26.7.20.tgz

2. Import

import { BiddingStack, BiddingStackBannerAdUnit, BiddingStackAdSize } from 'biddingstack-core';
import { BiddingStackGAMAdapter, BiddingStackGAMBannerView, GAMBannerProvider } from 'biddingstack-gam-adapter';

3. iOS Setup

Add to Info.plist:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX</string>

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>

<key>SKAdNetworkItems</key>
<array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>2fnua5tdw4.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>2u9pt9hc89.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>3qcr597p9d.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>3qy4746246.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>3rd42ekr43.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>3sh42y64q3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4468km3ulz.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>44jx6755aq.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>47vhws6wlr.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4dzt52r2t5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4fzdc2evr5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>578prtvx9j.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>7ug5zh24hu.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>8c4e2ghe7u.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>8s468mfl3y.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>97r2b46745.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>9t245vhmpl.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>a2p9lx4jpn.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>c3frkrj4fj.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>c6k4g5qg8m.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>cp8zw746q7.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>cstr6suwn9.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>e5fvkxwrpn.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>f38h382jlk.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>gta9lk7p23.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>hs6bdukanm.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>k674qkevps.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>kbd757ywx3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>kbmxgpxpgc.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>klf5c3l5u5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ludvb6z3bs.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>mlmmfzh3r3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>n38lu8286q.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>p78axxw29g.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ppxm28t8ap.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>s39g8k73mm.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>su67r6k2v3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>t38b2kh725.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>tl55sbb4fm.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>uw77j35x4d.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>v4nxqhlyqp.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>v72qych5uu.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>v9wttpbfk9.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>vutu7akeur.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>wg4vff78zm.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>wzmmz9fp6w.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>y5ghdn5j9k.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>yclnxrl5pm.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ydx93a7ass.skadnetwork</string>
    </dict>
</array>
SKAdNetwork ID reference table
SKAdNetwork IDCompany
cstr6suwn9Google
4fzdc2evr5Aarki
2fnua5tdw4AppLovin
ydx93a7assAdikteev
p78axxw29gByteDance (Pangle)
v72qych5uuAppier
c6k4g5qg8mBeeswax (Freewheel)
hs6bdukanmCriteo
mlmmfzh3r3Appreciate
wzmmz9fp6wSnap Inc.
yclnxrl5pmJampp
t38b2kh725Lifestreet
7ug5zh24huLiftoff (Vungle)
9t245vhmplMoloco
44jx6755aqPersona.ly
4468km3ulzKayzen
tl55sbb4fmPubNative (Verve Group)
2u9pt9hc89Remerge
8s468mfl3yRTB House
klf5c3l5u5Sift
ppxm28t8apSmadex
3rd42ekr43YouAppi
OthersGoogle (Demand Partners)

Install pods: cd ios && bundle exec pod install

4. Android Setup

Update AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application ...>
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"/>
</application>

Add BiddingStack packages in MainApplication.kt:

PackageList(this).packages.apply {
    add(BiddingStackPackage())
    add(BiddingStackGAMAdapterPackage())
}

SDK Initialization

Initialize from TypeScript before rendering any ads. initialize() returns a Promise; await it to ensure the remote config is loaded before rendering ad views:

import { BiddingStack } from 'biddingstack-core';

await BiddingStack.initialize('YOUR_BS_ACCOUNT_ID', '', '', '', 2000, true);

Important: iOS and Android use separate BiddingStack account IDs and config IDs. See Platform-Specific Configuration for how to pass the correct values per platform.

Initialize Parameters

ParameterTypeDefaultDescription
accountIdstringrequiredYour BiddingStack Account ID
appBundlestring''App bundle ID (auto-detected if empty)
appNamestring''App name (resolved from config if empty)
appStoreIdstring''App Store / Play Store ID (resolved from config if empty)
timeoutnumber2000Bid request timeout in ms
enableTestModebooleanfalseEnable debug logging and test mode
currencystring'USD'Currency code for bid requests
enableCMPbooleantrueAuto-read IAB CMP strings from UserDefaults/SharedPreferences
requestATTPermissionbooleantrueiOS only: prompt for App Tracking Transparency permission during initialization

Note: App bundle, name, store ID, and GAM ad unit paths are resolved automatically from the remote config.

Ad Formats

const bannerAdUnit = new BiddingStackBannerAdUnit(
  'YOUR_CONFIG_ID',
  'YOUR_GAM_AD_UNIT_ID', // optional fallback if config API is unavailable
  [new BiddingStackAdSize(300, 250)],
  true  // autoRefreshEnabled
);

<BiddingStackGAMBannerView adUnitObj={bannerAdUnit} />

Outstream Video

const videoAdUnit = new BiddingStackBannerAdUnit(
  'YOUR_CONFIG_ID',
  undefined,
  [new BiddingStackAdSize(300, 250)],
  false, false, true,
  [BiddingStackFormat.video]
);

<BiddingStackGAMVideoBannerView adUnitObj={videoAdUnit} />

Interstitial Ad

// Google interstitial size: 320x480 phone, 768x1024 tablet
const interstitialAdUnit = new BiddingStackInterstitialAdUnit(
  'YOUR_CONFIG_ID',
  undefined,
  new BiddingStackAdSize(320, 480),
);

BiddingStackGAMAdapter.loadAndShowInterstitialAdByGAM(interstitialAdUnit);

Interstitial Banner Ad

const gamBannerProvider = new GAMBannerProvider(
  'AD_UNIT_ID',
  [new BiddingStackAdSize(320, 480)]
);

// Load
BiddingStackGAMAdapter.loadInterstitialAdWithGAMBannerProvider(interstitialAdUnit, gamBannerProvider);

// Show when ready
BiddingStackGAMAdapter.showInterstitialAdWithGAMBannerProvider(interstitialAdUnit);

Rewarded Ad

const rewardedAdUnit = new BiddingStackRewardedAdUnit(
  'YOUR_CONFIG_ID',
  undefined,
  new BiddingStackAdSize(300, 250),
);

BiddingStackGAMAdapter.loadAndShowRewardedAdByGAM(rewardedAdUnit);

Native Ad

const nativeAdUnit = new BiddingStackNativeAdUnit('YOUR_CONFIG_ID');

const ad = await BiddingStack.getNativeAd(nativeAdUnit);
if (ad) {
    console.log(ad.title, ad.body, ad.callToAction);
}

BiddingStackNativeAd Properties

PropertyTypeDescription
titlestring?Ad headline
bodystring?Ad body text
callToActionstring?CTA button text
sponsoredBystring?Sponsor/advertiser name
iconURLstring?Icon image URL
mainImageURLstring?Main image URL
clickURLstringClick-through URL

Advanced Features

Bid Preloading

await BiddingStack.preloadBid(bannerAdUnit);
// Later, the ad view uses the cached bid automatically

User Data & Targeting

BiddingStack.setUserId('user-123');
BiddingStack.setUserGender('M');
BiddingStack.setUserYob(1988);
BiddingStack.setUserLatLng(37.7749, -122.4194);
BiddingStack.setAppStoreUrl('https://apps.apple.com/app/id123456');
BiddingStack.setAppCategories(['IAB1', 'IAB4-3']);
BiddingStack.setExternalUserIds({ uid: 'user12345' });
BiddingStack.setSchainObject(JSON.stringify({ ver: '1.0', complete: 1, nodes: [...] }));
BiddingStack.setBuyerUid('buyer-789');

// Custom targeting
BiddingStack.addTargetingKV('interest', 'gaming');
BiddingStack.addTargetingKV('region', ['us-east', 'us-west']);
BiddingStack.removeTargetingKey('interest');
BiddingStack.clearTargetingKV();

Content URL

Pass the web URL of the content the user is currently viewing so it is included in every bid request as app.content.url. This is important for brand safety and yield: it gives bidders page-level context to verify where their ads run, which increases bid rates and CPMs. Set it before the screen's ad views mount and update it on each screen change; pass null to clear.

BiddingStack.setContentUrl('https://www.example.com/article/12345');

Available since SDK 26.7.1.

Privacy & Compliance

BiddingStack.setCoppa(true);
BiddingStack.setUSPrivacy('1YNN');
BiddingStack.setGppConsent('gpp_string', [1, 2]);
BiddingStack.setGDPR('USER_CONSENT_STRING', true);

PMP Deals

const bannerAdUnit = new BiddingStackBannerAdUnit(
  'YOUR_CONFIG_ID',
  undefined,
  [new BiddingStackAdSize(300, 250)],
  true, true, true,
  [BiddingStackFormat.banner],
  [new BiddingStackDeal('deal-123', 5.50, 'USD')]
);

Platform-Specific Configuration

If iOS and Android use different account IDs or config IDs:

import { Platform } from 'react-native';

await BiddingStack.initialize(
  Platform.OS === 'ios' ? 'IOS_ACCOUNT_ID' : 'ANDROID_ACCOUNT_ID',
  '', '', '', 2000, true
);

const bannerAdUnit = new BiddingStackBannerAdUnit(
  Platform.OS === 'ios' ? 'ios_config_id' : 'android_config_id',
  undefined,
  [new BiddingStackAdSize(300, 250)],
);