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_retriesto 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.