Integration verification
To verify that integration run your application in debug mode on device or simulator with logs enabled:
NeftaAdapterEvents.EnableLogging(true);
MaxSdk.SetVerboseLogging(true);
NeftaPlugin.EnableLogging(enable: true)
ALSdk.shared().settings.isVerboseLoggingEnabled = true
NeftaPlugin.EnableLogging(true);
AppLovinSdk.getInstance(this).getSettings().setVerboseLogging(true);
[NeftaPlugin EnableLogging: true];
Nefta.enableLogging(true);
Dynamic ad unit
Before every ad request to the dynamic ad unit a new insight should be requested from Nefta with the latest recommended bid floor:
NeftaPlugin com.nefta.max D pool-3-thread-2 POST https://rtb.nefta.app/behaviour/insight: {"insights":["floor_price_interstitial"],"devi...
NeftaPlugin com.nefta.max D pool-3-thread-2 POST /insight success 200: {"floor_price":{"interstitial_configuration":{"floor_price":500}}}
[NeftaPlugin] POST https://rtb.nefta.app/behaviour/insight: {"session":{"session_durat...
[NeftaPlugin] POST success https://rtb.nefta.app/behaviour/insight: 200: {"floor_price":{"interstitial_configuration":{"floor_price":500}}}
Ad request
Every ad request and it's response should be logged:
AppLovinSdk com.nefta.max D [TaskFetchMediatedAd] Fetching next ad for INTER ad unit 7267e7f4187b95b2
NeftaPlugin com.nefta.max D pool-3-thread-1 OnExternalMediationRequest: {"ad_unit_id":"7267e7f4187b95b2", ...
[AppLovinSdk] DEBUG [ALTaskFetchMediatedAd] Fetching next ad for INTER ad unit 6d318f954e2630a8
2025-09-15 14:33:36.566 8 [NeftaPlugin] OnExternalMediationRequest: {"ad_type":"interstitial","calculated_floor_price":-1,"time":1757939616565,"app_id":"5661184053215232","ext":{"test_group":"split-max"},"ad_unit_id":"6d318f954e2630a8","sd..
For dynamic ad unit request, the response from MAX mediation should come back in seconds. If it is not, make sure to set disable_auto_retries
to true
when making the request:
Ad response
Every ad response should be logged:
AppLovinSdk com.nefta.max I [AppLovinMediationAdapter] Interstitial ad loaded
NeftaPlugin com.nefta.max D pool-3-thread-2 OnExternalMediationResponse: {"nuid":"be070483-ff8
[AppLovinSdk] DEBUG [MAInterstitialAd] -[MAAdDelegate didFailToLoadAdForAdUnitIdentifier: e5dc3548d4a0913f withError: [MAError: code=204, message=MAX returned no eligible ads from any mediated netw...
[NeftaPlugin] OnExternalMediationResponse: {"auction_id":1,"ad_unit_id":"e5dc3548d4a0913f","se...
Ad failed to load
In case of fail callback for the dynamic ad unit (with disabled auto retries) make sure to wait for:
- 2 seconds after first ad fail
- 4 seconds after second ad fail
- exponentially increasing wait duration to max 1min
Then you should see a new insight request to nefta followed by ad load request with new bid floor to the dynamic ad unit.
Ad load
When an ad loads, the fill should never be discarded. So after ad is received for ad unit it should be shown first before making a new request to it. Failure to do so will result in decrease of fill rate which will cause problems with the mediation.
In case you see that loaded dynamic ad unit has revenue bellow requested bid floor, make sure the dynamic ad unit is in the list of adunits that have disabled back to back loading before MAX initiazliation.
Every impression should be logged:
AppLovinSdk com.nefta.max D [MaxInterstitialAd] MaxAdRevenueListener.onAdRevenuePaid(ad=MediatedAd{thirdPartyAdPlacementId=inter_regular, adUnitId=7267e7f4187b95b2, format=INTER, networkName='AppLovin'}), listener=com.nefta.max.InterstitialWrapper@e744d9f
NeftaPlugin com.nefta.max D pool-3-thread-2 OnExternalMediationImpression: {"format":"INTER","size":"0x0",...
[MAAdRevenueDelegate didPayRevenueForAd: [ALMediatedFullscreenAd thirdPartyAdPlacementIdentifier=inter_regular, adUnitIdentifier=6d318f954e2630a8, format=INTER, networkName=AppLovin]], delegate: (null)
[NeftaPlugin] OnExternalMediationImpression: {"device_battery_level":0.89999997615814209,"auction_id":1,"creative_id":"1000373714","app_id":"5661184053215232","nuid":"5b2d9a33-6fd3-4e3a-a632-27ea2341a202","app_version":"4.4.0","ad_opportunity_id":2,"waterfall_test_name":"Control","session_id":62,"revenue":0.0014683221578598027,"ad_unit_id":"6d318f954e2630a8"....
Best to track clicks as well:
AppLovinSdk com.nefta.max I [AdWebView] Processing click on ad URL "applovin://com.appl...
NeftaPlugin com.nefta.max D pool-3-thread-2 OnExternalMediationImpression click: {"format":"INTER","size":...
[AppLovinSdk] DEBUG [MAInterstitialAd] -[MAAdDelegate didClickAd: [ALMediatedFullscreenAd thirdPartyAdPlacementIdentifier=inter_regular, adUnitIdentifier=6d318f954e2630a8, format=INTER, networkName=AppLovin]], delegate: <MaxI...
[NeftaPlugin] OnExternalMediationImpression click: {"device_battery_level":0.89999997615814209,"auction_id":1,"creative
After ad exit
After closing an ad you can proceed with loading of the shown ad unit. If dynamic was shown new insights should be requested. Or requesting default ad unit from the mediation, if the ad from the default ad unit was just shown.
Updated about 5 hours ago