Simple integration (Unity)
We provide MAX SDK wrapper for simple integration. Or you can implement dual track ad loading from it for complete control. Even with wrapper, you can still simply disable Nefta optimization with: NeftaSdk.IsNeftaDisabled = trueand all ad logic will be passed through to MAX.
If you have MAX integrated similar to AppLovin recommendation like this:
Initialization
For dynamic bid floors you have disable back to back preloading for those ad units. This should only be done for players in optimized group (so the group with InitConfiguration._skipOptimization set to false). So the measured uplift will compare real default behaviour to the optimized one.
/ MAX initialization
//MaxSdkCallbacks.OnSdkInitializedEvent += sdkConfiguration =>
//{
// Debug.Log("MAX SDK Initialized");
//};
//MaxSdk.InitializeSdk();
// New: Initialize Nefta and then MAX
NeftaAdapterEvents.OnReady = (InitConfiguration config) =>
{
MaxSdk.SetVerboseLogging(true);
if (!config._skipOptimization)
{
MaxSdk.SetExtraParameter("disable_b2b_ad_unit_ids", string.Join(",", _adUnits));
}
MaxSdk.InitializeSdk();
};
NeftaAdapterEvents.Init(NeftaId, false);Interstitials
Replace your existing Interstitial calls to MAX with calls to Nefta SDK:
// Default MAX integration:
//MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnAdLoadedEvent;
//MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnAdLoadFailedEvent;
//MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnAdDisplayFailedEvent;
//MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnAdHiddenEvent;
NeftaSdk.Interstitial.InitializeDualTrack(AdUnitIdA, AdUnitIdB);
NeftaSdk.Interstitial.OnAdLoadedEvent += OnAdLoadedEvent;
NeftaSdk.Interstitial.OnAdLoadFailedEvent += OnAdLoadFailedEvent;
NeftaSdk.Interstitial.OnAdDisplayFailedEvent += OnAdDisplayFailedEvent;
NeftaSdk.Interstitial.OnAdHiddenEvent += OnAdHiddenEvent;
private void Load()
{
//MaxSdk.LoadInterstitial(AdUnitIdA);
NeftaSdk.LoadInterstitial(AdUnitIdA);
}
private void OnShowClick()
{
_show.interactable = false;
//if (MaxSdk.IsInterstitialReady(AdUnitIdA))
if (NeftaSdk.IsInterstitialReady(AdUnitIdA))
{
//MaxSdk.ShowInterstitial(AdUnitIdA);
NeftaSdk.ShowInterstitial(AdUnitIdA);
}
}Full reference implementation: https://github.com/Nefta-io/NeftaMAXAdapter-Unity/blob/main/Assets/AdDemo/InterstitialController.cs
Rewarded
Replace your existing Rewarded calls to MAX with calls to Nefta SDK:
//MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnAdLoadedEvent;
//MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnAdLoadFailedEvent;
//MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnAdDisplayFailedEvent;
//MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnAdHiddenEvent;
//MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnAdReceivedRewardEvent;
NeftaSdk.Rewarded.InitializeDualTrack(AdUnitIdA, AdUnitIdB);
NeftaSdk.Rewarded.OnAdLoadedEvent += OnAdLoadedEvent;
NeftaSdk.Rewarded.OnAdLoadFailedEvent += OnAdLoadFailedEvent;
NeftaSdk.Rewarded.OnAdDisplayFailedEvent += OnAdDisplayFailedEvent;
NeftaSdk.Rewarded.OnAdReceivedRewardEvent += OnAdReceivedRewardEvent;
NeftaSdk.Rewarded.OnAdHiddenEvent += OnAdHiddenEvent;
}
private void Load()
{
//MaxSdk.LoadRewardedAd(AdUnitIdA);
NeftaSdk.LoadRewardedAd(AdUnitIdA);
}
private void OnShowClick()
{
_show.interactable = false;
//if (MaxSdk.IsRewardedAdReady(AdUnitIdA))
if (NeftaSdk.IsRewardedAdReady(AdUnitIdA))
{
//MaxSdk.ShowRewardedAd(AdUnitIdA);
NeftaSdk.ShowRewardedAd(AdUnitIdA);
}
}Full reference implementation: https://github.com/Nefta-io/NeftaMAXAdapter-Unity/blob/main/Assets/AdDemo/RewardedNeftaWrapper.cs
Wrapper flow
Under the hood, the flow would look like this:
Disabled Wrapper Flow
In case you want to disable Wrapper logic in real time, or if Init configuration comes with skip nefta optimization (to switch to default flow for AB testing), the calls will be just forwarded to MAX:

Updated 12 days ago