Floxis SDK testing and troubleshooting guide#
This guide helps you check a Floxis SDK integration before release and find out why Floxis ads are not showing. It covers every Floxis SDK: Android with AdMob (classic and Next-Gen), Google Ad Manager, AppLovin MAX and Unity LevelPlay, and iOS with AdMob.
Setup for each integration is in its own guide: In-app SDK (Android), In-app SDK (iOS, AdMob), In-app SDK (Google Ad Manager), In-app SDK (AppLovin MAX) and In-app SDK (Unity LevelPlay). Consent rules are in SDK privacy and consent, and every class and status is listed in SDK API reference.
Only the Android AdMob artifacts (floxis-sdk and floxis-sdk-nextgen) are released today. The Google Ad Manager,
AppLovin MAX, Unity LevelPlay and iOS SDKs are available from the next release; contact your Floxis account manager
for early access.
How a Floxis ad gets to the screen#
Most problems sit at one of these four steps, so check them in order:
- Initialise. The SDK connects to the Floxis endpoint for your seat and region. Until this finishes, ad loads skip Floxis and your ad server loads on its own.
- Auction. Before each load, the SDK asks Floxis for a bid. The result is
BID,NO_BID,TIMEOUT,ERRORor a skip. - Ad server picks. A winning bid carries its price tier (
hb_pb, for example0.70). Your AdMob Custom Event, Ad Manager line item, MAX placement or LevelPlay instance for that tier has to win in the ad server. - Render. The Prebid adapter shows the Floxis creative.
A BID result only proves step 2. Step 3 needs a matching entry for every price tier in your ad server.
1. Turn on test mode and logs#
| SDK | Test traffic | Logs |
|---|---|---|
| Android: AdMob, Next-Gen, Ad Manager, MAX | FloxisConfig(..., debug = true, testMode = true) | adb logcat -s Floxis |
| iOS | FloxisConfiguration(..., debug: true, testMode: true) | Xcode console lines that start with Floxis, or Floxis.shared.onDiagnostic |
| Unity LevelPlay | No test switch: every LevelPlay auction is live. | LevelPlay callbacks and LevelPlay.setAdaptersDebug(true) |
Android, in a debug build:
Floxis.initialize(
applicationContext,
FloxisConfig(seat = "YOUR_SEAT", region = "us-e", debug = true, testMode = true),
) { status, description -> Log.d("FloxisTest", "init $status $description") }iOS, in a build you run from Xcode:
let configuration = try FloxisConfiguration(seat: "YOUR_SEAT", region: "us-e", debug: true, testMode: true)
Floxis.shared.onDiagnostic = { diagnostic in print("Floxis", diagnostic.code, diagnostic.message) }
Floxis.shared.initialize(configuration) { status, detail in print("Floxis init:", status, detail ?? "") }What test mode does:
- It sets the OpenRTB
testflag on each auction, which asks buyers to treat the auction as not billable. Not every buyer honours the flag, so keep test builds to test devices. Many buyers do not bid on test traffic, so **few or no Floxis wins in a test build is normal**. - It only works in a debuggable build. On Android that is a build with
android:debuggableset, which debug builds have by default. On iOS it is the Simulator, or a device build signed with a development profile. A release, App Store or TestFlight build ignorestestModeand logsFLX-105, so the setting can never send test traffic from production. - It does not change what the SDK does with a bid. A test win goes through your ad server exactly like a live one.
What debug does:
- Android: turns on the debug log lines below and raises Prebid Mobile's log level to debug. Warnings log even when
debugis off. - iOS: prints every diagnostic to the console.
onDiagnosticreceives them whetherdebugis on or off. - It never changes what is sent to Floxis. Turn it off before release to keep the log quiet.
Before you release, set testMode back to false and remove any test device IDs you added to your ad server SDK.
2. Read the log#
Android#
Every Floxis line has the tag Floxis and starts with a code. Lines marked warning always log; debug lines
need debug = true.
| Code | Level | Meaning |
|---|---|---|
FLX-100 | debug | Initialisation started. Shows the auction and status URLs for your seat. |
FLX-101 | debug | Initialisation finished, with SUCCEEDED, SERVER_STATUS_WARNING or FAILED. |
FLX-102 | warning | enabled = false in FloxisConfig, so Floxis did not start. |
FLX-103 | warning | Initialisation threw an error, or the bundled scripts could not be put in place. A failed start without an error shows as FLX-101 FAILED. |
FLX-104 | warning | Retrying a failed initialisation (at most every 30 seconds, on the next ad load). |
FLX-105 | warning | testMode ignored because the app is not debuggable. |
FLX-200 | debug | One auction finished. Shows the full result. |
FLX-201 | debug | Auction skipped, with the reason. |
FLX-202 | warning | A Floxis bid expired before the ad server load. |
FLX-203 | warning | Auction error. |
FLX-204 | warning | A rewarded video bid was turned down because Prebid Mobile cannot play it. |
FLX-300 to FLX-303 | debug (FLX-302 warning) | Banner refresh: fired, deferred (app in background or banner not visible), failed, stopped. |
FLX-400 | warning | A full-screen show was refused, with the reason. |
A healthy start in a debug build looks like this:
D Floxis : FLX-100 auction=https://...?seat=YOUR_SEAT status=...
D Floxis : FLX-101 SUCCEEDED ...
D Floxis : FLX-200 AuctionOutcome(status=BID, priceBucket=0.70, latencyMs=312, detail=null, responseId=...)
D Floxis : FLX-200 AuctionOutcome(status=NO_BID, priceBucket=null, latencyMs=280, detail=null, responseId=null)The AdMob, Next-Gen and MAX SDKs write an FLX-200 line for every auction that runs, and FLX-201 for every skipped
one. The Ad Manager SDK writes only the
initialisation lines and FLX-204; read its auction result from the Prebid listener instead (see section 3).
To see what Prebid Mobile did as well, filter on both tags:
adb logcat | grep -E "Floxis|PrebidMobile"iOS#
With debug: true, each diagnostic prints as Floxis <code> <message>. Auction and show messages include the format
and your configID.
| Code | Meaning |
|---|---|
FLX-101 | Initialisation finished. |
FLX-103 | Initialisation failed. |
FLX-105 | testMode ignored: the app is not a development-signed build. |
FLX-201 | Auction skipped (disabled, personalised ads off, or not initialised yet). |
FLX-202 | A loaded Floxis bid expired before show. |
FLX-203 | Auction timed out or failed. |
FLX-400 | A Floxis win was refused at show because Floxis was disabled or consent was withdrawn. |
FLX-500 | The AdMob load failed. The message has AdMob's error. For a banner, it is written only when you pass AdMob's error to adMobDidFailToLoad(_:). |
iOS writes nothing for BID and NO_BID. Read those from the load completion (see section 3).
Unity LevelPlay#
The LevelPlay adapter has no log tag of its own. Every failure reaches LevelPlay's load, show or init callback with a
message from section 6. Turn on LevelPlay.setAdaptersDebug(true) in a debug build to see LevelPlay's adapter log.
3. Confirm that Floxis won and rendered#
AdMob on Android (classic and Next-Gen)#
Full-screen ads tell you directly:
override fun onAdLoaded(ad: FloxisInterstitialAd) {
Log.d("FloxisTest", "auction=${ad.auction.status} tier=${ad.auction.priceBucket} floxisWon=${ad.isFloxisWinner}")
}FloxisRewardedAd, FloxisNextGenInterstitialAd and FloxisNextGenRewardedAd have the same auction and
isFloxisWinner properties.
For a classic banner, use the auction listener and AdMob's own listener on the AdView:
adView.adListener = object : AdListener() {
override fun onAdLoaded() {
Log.d("FloxisTest", "served by ${adView.responseInfo?.loadedAdapterResponseInfo?.adapterClassName}")
}
}When Floxis won, the class is org.prebid.mobile.admob.PrebidBannerAdapter. For a Next-Gen banner, pass a
loadListener to FloxisNextGenBannerAd and read ad.getResponseInfo().loadedAdSourceResponseInfo?.adapterClassName
in onBannerLoaded.
AdMob on iOS#
interstitial.load { outcome, error in
print("auction:", outcome.status, outcome.priceBucket ?? "-", "floxisWon:", interstitial.isFloxisWinner)
}FloxisRewardedAd works the same way. For a banner, load(completion:) gives you the auction outcome, and the
banner's responseInfo?.loadedAdNetworkResponseInfo?.adNetworkClassName ends in PrebidAdMobBannerAdapter when
Floxis won. If isFloxisWinner stays false while Ad Inspector shows the Floxis Custom Event filled, tell support
your Google Mobile Ads version.
Google Ad Manager#
The Ad Manager SDK uses Prebid Mobile's listeners. In onAdLoaded, the Floxis bid is on the ad unit:
override fun onAdLoaded(interstitialAdUnit: InterstitialAdUnit) {
val response = interstitialAdUnit.bidResponse
Log.d("FloxisTest", "Floxis bid=${response?.winningBid?.price ?: "none"} hb_pb=${response?.targeting?.get("hb_pb")}")
}A banner exposes the same bidResponse on the BannerView in BannerViewListener.onAdLoaded. A bid there means
Floxis bid; whether your line item for that tier then won is decided in Ad Manager (section 4).
AppLovin MAX#
The auction listener on load gives the Floxis result, and MAX's own listener tells you which network filled:
FloxisMaxInterstitialAd(this, interstitial, "level_end_interstitial").load { outcome ->
Log.d("FloxisTest", "auction=${outcome.status} tier=${outcome.priceBucket}")
}
// In your MaxAdListener:
override fun onAdLoaded(ad: MaxAd) {
Log.d("FloxisTest", "filled by ${ad.networkName} placement ${ad.networkPlacement}")
}When Floxis won, networkName is the name you gave the Floxis custom network in MAX.
Unity LevelPlay#
A Floxis fill reaches your LevelPlay listener as an ordinary load from the Floxis custom network instance. A Floxis no-bid or privacy block reaches the waterfall as a no-fill, and LevelPlay moves on to the next instance.
In the dashboard (AdMob)#
Open the app's endpoint on the Supply page. Under the integration panel, the AdMob price tier check shows, for
each placement and hb_pb tier over the Auction dates (UTC) you pick:
- Returned: bids the device received at this tier.
- Won in AdMob: AdMob called the Custom Event for this tier and the ad loaded.
- Rendered: the creative's impression pixel fired.
A tier flagged Step missing in AdMob got bids but never won, while its neighbours did. That is almost always a missing Custom Event.
4. Use your ad server's debugging tools#
AdMob (and Ad Manager): Ad Inspector#
Ad Inspector shows each ad request, the waterfall and which ad source filled. Open it from a test device:
MobileAds.openAdInspector(activity) { error -> Log.d("FloxisTest", "Ad Inspector closed: $error") }On Next-Gen, call MobileAds.openAdInspector with an OnAdInspectorClosedListener. On iOS, call
MobileAds.shared.presentAdInspector(from: viewController) { error in }.
Register your phone as a test device first, in the AdMob or Ad Manager UI or in code:
MobileAds.setRequestConfiguration(
RequestConfiguration.Builder().setTestDeviceIds(listOf("YOUR_TEST_DEVICE_ID")).build()
)On Next-Gen, the same RequestConfiguration.Builder().setTestDeviceIds(...) comes from
com.google.android.libraries.ads.mobile.sdk.common. On iOS, set
MobileAds.shared.requestConfiguration.testDeviceIdentifiers = ["YOUR_TEST_DEVICE_ID"]. Google prints
your device ID in the log the first time an ad loads.
Keep in mind:
- Google's demo ad unit IDs have no Floxis Custom Events, so they can never show a Floxis ad. Test with your own ad units that have the Custom Events from the setup sheet.
- Mediated ads, Floxis included, do not carry Google's "Test Ad" label.
- In Ad Inspector, a Floxis fill shows as the Custom Event row with the label from your setup sheet.
Google Ad Manager: delivery tools#
Use Ad Inspector on the device, and Ad Manager's delivery troubleshooting in the web UI, to see which line item served
a request. A Floxis win serves your Floxis line item for that hb_pb tier, and its creative hands the ad back to the
SDK to render. If the line item never serves, check its targeting: Floxis sends hb_pb, hb_bidder=floxis,
hb_env=mobile-app and, when the bid has a size, hb_size. It never sends hb_format, so a line item that targets
hb_format never matches.
AppLovin MAX: Mediation Debugger and test mode#
val config = AppLovinSdkInitializationConfiguration.builder("YOUR_SDK_KEY", this)
.setMediationProvider(AppLovinMediationProvider.MAX)
.setTestDeviceAdvertisingIds(listOf("YOUR_GAID"))
.build()
AppLovinSdk.getInstance(this).settings.setVerboseLogging(true)
AppLovinSdk.getInstance(this).initialize(config) {
AppLovinSdk.getInstance(this).showMediationDebugger()
}Run this from the Floxis.initialize callback, whatever its status, as in the In-app SDK (AppLovin MAX) guide: Prebid's
MAX adapter needs Floxis initialised first. In the Mediation Debugger, check that MAX found the adapter
com.applovin.mediation.adapters.PrebidMaxMediationAdapter for your Floxis custom network. Remove the test device
IDs before release.
Unity LevelPlay: integration test suite#
LevelPlay.setMetaData("is_test_suite", "enable") // before LevelPlay init
LevelPlay.setAdaptersDebug(true)
// after LevelPlay init:
LevelPlay.launchTestSuite(this)The test suite shows the networks LevelPlay set up for the app. If Floxis is missing, check that the Floxis custom network is added with the network key from your account manager, and that custom adapters are enabled on your LevelPlay account (Unity support enables them). Remove both test settings before release.
5. Common problems#
| What you see | Likely cause | Fix |
|---|---|---|
FLX-201 SKIPPED_NOT_INITIALIZED on the first loads | Ads load before Floxis.initialize has called back. | Load ads from the initialisation callback, or accept that the first loads go to your ad server alone. |
FLX-101 FAILED or FLX-103 | No network, a wrong seat or region, or a blocked connection. | Check the seat and region against your endpoint's integration panel. The SDK retries on a later ad load, at most every 30 seconds. |
FLX-101 SERVER_STATUS_WARNING | The status check did not answer as expected. | Auctions still run. If it persists, contact support with the log. |
FLX-102, or every auction SKIPPED_DISABLED | enabled = false, or Floxis.setEnabled(false) from your remote config. | Call Floxis.setEnabled(true) when Floxis should run. |
Every auction SKIPPED_NO_CONSENT | personalizedAds = false, or Floxis.setPersonalizedAds(false). | Expected: Floxis does not bid on non-personalised requests. Update the flag when consent changes. |
Mostly NO_BID in a test build | Test traffic gets few bids. | Normal. Check a release build with live traffic, together with your account manager. |
Mostly NO_BID from the EU | Buyers rarely bid on EU traffic without a TCF consent string. | Run your CMP and grant consent on the test device, or test from outside the EU. |
TIMEOUT with no response within 1500ms | The device's network is slow or the timeout is short. | Test on a good connection. If many live users time out, raise timeoutMs (200–10,000). Your ad server waits that long before loading. |
BID in the log, but the ad comes from another source | The ad server has no entry for that tier, the entry's parameter does not match exactly, or another source beat its eCPM. | Create every row of the setup sheet. The parameter must be exactly {"hb_pb":"0.70"} for tier 0.70. Re-export the sheet after changing price tiers. Check the AdMob price tier check. |
| AdMob never calls the Custom Event | The ad unit is not in the mediation group, the group is for another platform or format, or the class name is wrong. | Add the ad unit to a mediation group for its platform and format, and copy the class name from the setup sheet. Confirm in Ad Inspector. |
| Floxis ads show on Android but not on iOS | iOS uses different Custom Event class names. | Pick iOS as the platform in the setup sheet and create those rows in an iOS mediation group. |
| Two auctions per banner refresh, or a Floxis banner replaced too soon | AdMob's own banner refresh is on. | Turn off automatic refresh on the AdMob banner ad unit. The Floxis banner refreshes itself (30–120 s). |
| Banner never refreshes | The app is in the background, or the banner is not on screen. On Android that also covers a screen that is off or a banner less than half visible (FLX-301); on iOS, a banner that is not in a window. | Expected: refresh waits for the banner to be on screen. |
show returns EXPIRED | The ad was loaded too long before it was shown. Android uses the bid's expiry (5 minutes by default) and logs FLX-400 EXPIRED; iOS allows one hour and logs FLX-202. | Load closer to the moment you show, and reload when show returns EXPIRED. |
show returns DISABLED, with FLX-400 | Floxis was turned off with setEnabled(false) after a Floxis ad loaded. On iOS, turning personalised ads off does the same. | Expected. Load a new ad. |
FLX-204 on a rewarded ad | The buyer's rewarded video had neither a click-through nor an end card, which Prebid Mobile cannot play. | Nothing to fix: the bid is turned down and your ad server loads without it. |
| Next-Gen interstitial or rewarded loads but never shows | MobileAds.initialize got an application context from an activity that was already running. | Pass it an Activity, or call it from Application.onCreate. |
| Gradle: capability conflict between Floxis artifacts | Two Floxis artifacts that cannot share an app: floxis-sdk with floxis-sdk-nextgen, or floxis-sdk-nextgen with floxis-sdk-gam. | Keep one of them. The setup guides list the allowed combinations. |
R8 release build fails on LoudnessCodecController | The app compiles against API 34. | Set compileSdk = 35. |
| Floxis works in debug but not in a minified release build | Your build ignores keep rules from libraries. | The SDK ships its own R8 rules, so most apps add none. If your build skips library rules, add the rules below. |
Ad Manager: GAM ad slot already loaded; create a new wrapper for each request | load() was called twice on one Floxis Ad Manager object. | Create a new FloxisGamBannerAd, FloxisGamInterstitialAd or FloxisGamRewardedAd for each request. |
| Ad Manager line item never serves | It targets a key Floxis does not send, such as hb_format, or no line item exists for the tier. | Target hb_pb for each tier, as in the In-app SDK (Google Ad Manager) guide. |
| MAX adapter fails to initialise | MAX started before Floxis finished initialising. | Initialise MAX from the Floxis.initialize callback. |
MAX banner throws IllegalArgumentException | FloxisMaxBannerAd only takes FloxisSize(320, 50) or FloxisSize(300, 250). | Use one of those two sizes. |
LevelPlay: Invalid Floxis seat, region, or timeoutMs | An app-level field of the Floxis custom network is wrong. | Type plain values: seat from your endpoint, region such as us-e, timeoutMs a whole number from 200 to 10,000. Leave the last two blank for the defaults. |
LevelPlay: Missing configId | An instance has no configId. | Set configId on each instance. |
LevelPlay: Advertising restricted by privacy signals | LevelPlay consent is false, GDPR applies without Purpose 1 consent, or a US privacy or GPP opt-out is recorded. | Expected. See SDK privacy and consent. |
LevelPlay: Prebid already initialized for another auction host or account, or Prebid auction host or account changed | Another Floxis SDK in the app uses a different seat or region. | Use the same seat and region everywhere in the app. |
LevelPlay logs failed to load <name> | The custom network was added with a key that does not belong to Floxis, or the adapter is not in the app. | Add floxis-sdk-levelplay and use the network key from your account manager. |
| Battery, dark-mode and session signals missing from requests | The consent gate is closed: they need personalised ads on, Purpose 1 consent where GDPR applies, and no opt-out in the US privacy string or an applicable GPP US section. | Expected. See SDK privacy and consent. |
Android: the battery and dark-mode fields are not in device.ext of a request you captured on the device | Prebid Mobile on Android drops device.ext from what the SDK hands it, so the SDK sends these fields in user.ext.floxis.device. The exchange moves them into device.ext before buyers see the request. | Look under user.ext.floxis.device. iOS sends them in device.ext directly. |
user.ext.impdepth is back at 1 | On Android, more than 30 minutes without a Floxis auction that carried the signals starts a new session. | Expected. See SDK privacy and consent. |
A constructor throws IllegalArgumentException | A blank configId or ad unit ID, an empty size list, or a seat, region or timeout outside the allowed range. | Fix the argument. The SDK checks arguments when you create objects; failures during a load are caught and logged. |
R8 rules, only if your build skips the rules shipped inside the SDK:
-keep class com.floxis.sdk.** { public *; }
-keep class org.prebid.mobile.admob.** { *; }
-keepnames interface com.floxis.sdk.internal.GmaBridge
-keep class * implements com.floxis.sdk.internal.GmaBridge { <init>(); }For Ad Manager, add -keep class org.prebid.mobile.eventhandlers.** { *; }. For MAX, add
-keep class com.applovin.mediation.adapters.PrebidMaxMediationAdapter { *; }. For LevelPlay, keep the four
com.ironsource.adapters.custom.floxis classes listed in the In-app SDK (Unity LevelPlay) guide.
6. Status and error reference#
Auction results (Android AuctionStatus, iOS FloxisAuctionStatus)#
| Android | iOS | Meaning | Your ad server still loads? |
|---|---|---|---|
BID | .bid | Floxis bid. priceBucket is the hb_pb tier. | Yes, with the Floxis tier. |
NO_BID | .noBid | No buyer bid, or a bid was turned down (detail says why). | Yes. |
TIMEOUT | .timeout | No answer within timeoutMs. | Yes. |
ERROR | .error | Something failed. detail has the reason. | Yes. |
SKIPPED_DISABLED | .skippedDisabled | Floxis is switched off (enabled = false or setEnabled(false)). On iOS, also any load before initialize is called. | Yes. |
SKIPPED_NO_CONSENT | .skippedNoConsent | Personalised ads are off. | Yes. AdMob and Ad Manager requests carry npa=1. |
SKIPPED_NOT_INITIALIZED | .skippedNotInitialized | Initialisation has not finished, or failed. | Yes. |
On Android, AuctionOutcome also has latencyMs and, for a BID, responseId. Include the responseId when you
contact support about a specific ad.
Initialisation results#
Android FloxisInitStatus | iOS FloxisInitializationStatus | Meaning |
|---|---|---|
SUCCEEDED | .succeeded | Ready. |
SERVER_STATUS_WARNING | .serverStatusWarning | Ready; the status check answered unexpectedly. |
FAILED | .failed | Not ready. Retried on a later ad load. |
DISABLED | .disabled | enabled is false. |
On iOS, calling initialize again with a different seat or region returns .failed with
Floxis is already configured for another seat or region.
Full-screen show results (FloxisShowResult)#
These come from show on the AdMob and Next-Gen interstitial and rewarded ads, on Android and iOS. The Ad Manager
show() returns true or false, and MAX and LevelPlay report show results through their own listeners.
| Result | Meaning | Code passed to your show-failure callback (Android) |
|---|---|---|
SHOWN | The ad is showing. | — |
ALREADY_SHOWN | This ad was already shown. Load a new one. | 1 |
DESTROYED | destroy() was called. | 2 |
EXPIRED | The bid expired. Load a new one. | 3 |
DISABLED | Floxis was turned off after the load (on iOS, also personalised ads). | 4 |
notReady (iOS only) | No ad is loaded yet. | — |
On Android, a refused show also calls your onAdFailedToShowFullScreenContent with the domain com.floxis.sdk
(FloxisShowError.DOMAIN) and the code above. On Next-Gen, the error's code is INTERNAL_ERROR and the Floxis domain
and code are on its mediationAdError. Use FloxisShowError.codeFor(result) to compare.
Unity LevelPlay messages#
| Callback | Code | Message |
|---|---|---|
| Init failed | 1002 (missing params) | Invalid Floxis seat, region, or timeoutMs |
| Init failed | 1000 (internal) | Floxis process already configured for a different seat, region, or timeout |
| Init failed | 1000 | Prebid already initialized for another auction host or account |
| Init failed | 1000 | Prebid auction host or account differs from Floxis configuration |
| Init failed | 1000 | Prebid Mobile's initialisation error, or Prebid initialization failed |
| Load failed | 1000 | Floxis not initialized |
| Load failed | 1000 | Prebid auction host or account changed |
| Load failed | 1000 | Floxis configuration differs from initialized network |
| Load failed | 1002 | Missing configId |
| Load failed | 1002 | Invalid banner size |
| Load failed, no fill | 10001 | Advertising restricted by privacy signals |
| Load failed, no fill | 10001 | No buyer bid (Prebid Mobile's no-bids message) |
| Load failed, no fill | 1000 | declined: rewarded VAST without ClickThrough or companion end card |
| Show failed | 1001 (expired) | Floxis interstitial unavailable or Floxis rewarded unavailable: the ad expired, was already shown, or consent was withdrawn |
7. FAQ#
Does test mode cost me or buyers money? Test mode sets the OpenRTB test flag, which asks buyers to treat the
auction as not billable. Not every buyer honours it, so run test builds on test devices only. It only works in
debuggable builds, so production traffic is never marked as test.
Can I leave debug = true in a release build? It never changes what is sent, but turn it off. On Android it also
raises Prebid Mobile's log level, which writes far more to the device log.
Why don't I see a "Test Ad" label on Floxis ads? Google only labels its own test ads. Mediated ads, Floxis included, show the real creative.
Can I test with Google's demo ad units? You can check that the SDK initialises and runs auctions, but a Floxis ad can only show through your own ad units that have the Floxis Custom Events.
The auction says BID, so why is no impression counted? A bid is not an impression. Your ad server must pick the
Floxis entry for that tier, and the creative must render. Check the AdMob price tier check and Ad Inspector.
How long can I keep a loaded interstitial or rewarded ad? On Android, until the bid expires (the buyer's
expiry, 5 minutes by default). On iOS, one hour. show returns EXPIRED after that.
Do I need to add R8 or ProGuard rules? No, unless your build skips the rules that come inside the SDK.
8. Contact support#
First check that you are on the newest release: https://maven.floxis.tech lists the published versions of each
Android artifact.
Email [email protected], or your Floxis account manager. Include:
- The app's package name or bundle ID, and the endpoint name on the Supply page.
- The SDK and version (on Android,
Floxis.SDK_VERSIONreturns it; on iOS,Floxis.sdkVersion), and your ad server SDK and version. - The platform, device model and OS version.
- The placement
configIdand the ad unit ID. - A log from app start to the problem, with
debug = true:- Android:
adb logcat -d | grep -E "Floxis|PrebidMobile" > floxis-log.txt - iOS: the Xcode console lines starting with
Floxis, or youronDiagnosticoutput. - LevelPlay: the load and show callback messages and the LevelPlay adapter log.
- Android:
- For a specific ad, the
responseIdfrom the auction result and the time it happened, with the time zone. - A screenshot of Ad Inspector, the MAX Mediation Debugger or the LevelPlay test suite, if you used one.
Remove user identifiers, consent strings and advertising IDs from logs before you send them.