Integration
This guide explains how to install the React Native bridge and configure both Android and iOS native projects.
Step 1: Install the Package
npm install @empower-nokta/react-native-mobile-ads
The package supports autolinking — no manual native linking is needed.
Step 2: Android Configuration
Add the Maven Repository
Add the Empower Maven repository to your project-level android/build.gradle:
// android/build.gradle
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://maven.empower.net/release' }
}
}
Or if your project uses settings.gradle (newer RN versions):
// android/settings.gradle
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url 'https://maven.empower.net/release' }
}
}
Configure AndroidManifest
Add the following <meta-data> tags inside the <application> block of android/app/src/main/AndroidManifest.xml:
<application>
<!-- Existing configuration -->
<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true"/>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
Note: Replace the
APPLICATION_IDvalue with your actual Google Ads Application ID. Contact Empower support if you need assistance obtaining this ID.
Kotlin Version Compatibility
The Empower native SDK is compiled with Kotlin 2.2.0. If your project uses an older Kotlin compiler (1.9.x), you may see a version compatibility warning. Add this line to android/gradle.properties:
# Empower Mobile Ads SDK — Kotlin compatibility
kotlin.suppressKotlinVersionCompatibilityCheck=2.2.0
That's it — the SDK automatically injects the -Xskip-metadata-version-check compiler flag into all Kotlin compile tasks, so no additional Gradle configuration is needed.
⚠️ Important: Do not use
resolutionStrategy.forceto downgradekotlin-stdlibto 1.9.x. The Empower SDK depends on Kotlin 2.x coroutine classes (such asSpillingKt) at runtime. Forcing a stdlib downgrade will cause aNoClassDefFoundErrorcrash.
New Architecture (React Native 0.76+)
If your app uses the New Architecture (Fabric / TurboModules), update MainApplication.kt to use OpenSourceMergedSoMapping for SoLoader initialization:
// android/app/src/main/java/.../MainApplication.kt
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader
// In onCreate():
SoLoader.init(this, OpenSourceMergedSoMapping)
React Native 0.76+ merges several native libraries into libreactnative.so. Without this mapping, SoLoader cannot find the merged libraries and the app will crash on startup with a libreact_featureflagsjni.so not-found error.
Note: This change is only required for New Architecture. Old Architecture apps should keep the default
SoLoader.init(this, false).
Core Library Desugaring (SDK 5.7.10+)
The Empower SDK uses Java 8+ APIs that are not available on older Android versions without desugaring. Enable core library desugaring in your android/app/build.gradle:
// android/app/build.gradle
android {
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
}
Note: Without core library desugaring, builds targeting
minSdk < 26may fail with missing class errors at runtime.
Step 3: iOS Configuration
Update Your Podfile (before installing)
⚠️ Order matters. Add the Empower specs source and
use_frameworks!to your Podfile first, then runpod install. If you install before adding the source, CocoaPods cannot resolveEmpowerMobileAdsand the build fails with "Native module not found".
Add the Empower specs source to the top of your ios/Podfile:
source 'https://github.com/empowernet/specs.git'
source 'https://cdn.cocoapods.org/'
Ensure use_frameworks! is present in your target block:
target 'YourApp' do
use_frameworks!
# ...existing pods...
end
Install CocoaPods Dependencies
Now install (use --repo-update so the specs repo is fetched):
cd ios && pod install --repo-update && cd ..
Update Info.plist
Add your Google Ads Application ID to ios/YourApp/Info.plist:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
Configure SKAdNetwork
Required for production. Ad networks use SKAdNetwork to attribute installs on iOS without
tracking the user; if a network's ID isn't listed, it can't attribute conversions, which lowers your
fill and revenue. Add an SKAdNetworkItems array to your Info.plist:
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<!-- …add the full list here -->
</array>
Ask Empower for the current SKAdNetwork ID list to add here.
Update Build Settings
Add ${inherited} to Other Linker Flags in your Xcode project:
Target → Build Settings → Other Linker Flags
Step 4: Build and Run
# Android
npx react-native run-android
# iOS
npx react-native run-ios
Mediation Adapters
Android
Configure Repositories
Pick the path that matches your build policy. The settings plugin is the default and stays in sync with the SDK automatically. Use the manual setup only when third-party Gradle plugins are restricted in your project.
Standard setup (settings plugin)
Add the Empower maven to pluginManagement.repositories, then apply the settings plugin. The plugin registers every Maven repo the SDK and its mediation adapters need (Empower, AppLovin, Pangle, IronSource, Ogury). Bumping the plugin version is enough when networks change in a future release.
- Kotlin DSL
- Groovy
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url = uri("https://maven.empower.net/release") }
}
}
plugins {
id("net.empower.mobile.ads.settings") version "5.7.16"
}
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url 'https://maven.empower.net/release' }
}
}
plugins {
id 'net.empower.mobile.ads.settings' version '5.7.16'
}
If your project already declares dependencyResolutionManagement (including with repositoriesMode = FAIL_ON_PROJECT_REPOS), the plugin appends to it without conflict.
Without the settings plugin
Declare every Maven repository the SDK needs yourself. You will need to add new repositories manually when the SDK adds networks in future releases.
- Kotlin DSL
- Groovy
//settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
// Empower Mobile Ads SDK
maven {
url = uri("https://maven.empower.net/release")
content { includeGroup("net.empower.mobile.ads") }
}
// AppLovin SDK & mediation adapters
maven {
url = uri("https://artifacts.applovin.com/android")
content { includeGroupByRegex("com\\.applovin.*") }
}
// Pangle / ByteDance
maven {
url = uri("https://artifact.bytedance.com/repository/pangle/")
content { includeGroupByRegex("com\\.(bytedance|pangle).*") }
}
// IronSource / Fyber / DT Exchange
maven {
url = uri("https://android-sdk.is.com/")
content { includeGroupByRegex("com\\.(ironsource|fyber).*") }
}
// Ogury
maven {
url = uri("https://maven.ogury.co")
content { includeGroupByRegex("co\\.ogury.*") }
}
}
}
//settings.gradle
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
// Empower Mobile Ads SDK
maven {
url 'https://maven.empower.net/release'
content { includeGroup 'net.empower.mobile.ads' }
}
// AppLovin SDK & mediation adapters
maven {
url 'https://artifacts.applovin.com/android'
content { includeGroupByRegex 'com\\.applovin.*' }
}
// Pangle / ByteDance
maven {
url 'https://artifact.bytedance.com/repository/pangle/'
content { includeGroupByRegex 'com\\.(bytedance|pangle).*' }
}
// IronSource / Fyber / DT Exchange
maven {
url 'https://android-sdk.is.com/'
content { includeGroupByRegex 'com\\.(ironsource|fyber).*' }
}
// Ogury
maven {
url 'https://maven.ogury.co'
content { includeGroupByRegex 'co\\.ogury.*' }
}
}
}
iOS
Installing EmpowerMobileAds already pulls in Google Mobile Ads, the AppLovin SDK, Google
IMA, and Amazon Publisher Services — don't add those yourself. Add the adapter pods for the
networks Empower has enabled for your account to your ios/Podfile:
target 'YourApp' do
use_frameworks!
# AppLovin MAX adapters
pod 'AppLovinMediationGoogleAdManagerAdapter' # Google Ad Manager
pod 'AppLovinMediationGoogleAdapter' # Google / AdMob bidding
pod 'AppLovinMediationByteDanceAdapter' # Pangle
pod 'AppLovinMediationFacebookAdapter' # Meta Audience Network
pod 'AppLovinMediationFyberAdapter' # DT Exchange (Fyber)
pod 'AppLovinMediationInMobiAdapter' # InMobi
pod 'AppLovinMediationMintegralAdapter' # Mintegral
pod 'AppLovinMediationOguryPresageAdapter' # Ogury
pod 'AppLovinMediationUnityAdsAdapter' # Unity Ads
pod 'AppLovinMediationVungleAdapter' # Liftoff Monetize (Vungle)
pod 'AppLovinMediationYandexAdapter' # Yandex
# Google Mobile Ads (GAM) mediation adapters
pod 'GoogleMobileAdsMediationInMobi' # InMobi
pod 'GoogleMobileAdsMediationMintegral' # Mintegral
pod 'GoogleMobileAdsMediationPangle' # Pangle
pod 'GoogleMobileAdsMediationUnity' # Unity Ads
end
Then run cd ios && pod install --repo-update.
Note: Contact your Empower account manager for the recommended adapter configuration based on your target markets and revenue goals.
Troubleshooting
Native Module Not Found
If you see @empower-nokta/react-native-mobile-ads: Native module not found:
Android:
- Run:
cd android && ./gradlew clean && cd .. && npx react-native run-android - Ensure
maven { url 'https://maven.empower.net/release' }is inandroid/build.gradle
iOS:
- Run:
cd ios && pod install && cd .. && npx react-native run-ios - Ensure
source 'https://github.com/empowernet/specs.git'is in your Podfile - Ensure
use_frameworks!is in your Podfile
Kotlin Version Mismatch
If you see errors about Kotlin version incompatibility, add kotlin.suppressKotlinVersionCompatibilityCheck=2.2.0 to android/gradle.properties as described in the Android Configuration section above. Do not force-downgrade kotlin-stdlib — this causes runtime crashes.
App Crashes on Startup (New Architecture)
If you see libreact_featureflagsjni.so not found or similar SO loading errors, make sure you're using SoLoader.init(this, OpenSourceMergedSoMapping) in MainApplication.kt. See the New Architecture section above.
Build Fails After Adding Mediation Adapters
Run a clean build:
# Android
cd android && ./gradlew clean && cd ..
# iOS
cd ios && pod deintegrate && pod install --repo-update && cd ..