// ReSharper disable RedundantArgumentDefaultValue
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
using AppLovinMax.ThirdParty.MiniJson;
using AppLovinMax.Internal;
///
/// This is is a global Unity object that is used to forward callbacks from native iOS / Android Max code to the application.
///
public static class MaxSdkCallbacks
{
///
/// Fired when the SDK has finished initializing
///
private static Action onSdkInitializedEvent;
public static event Action OnSdkInitializedEvent
{
add
{
LogSubscribedToEvent("OnSdkInitializedEvent");
onSdkInitializedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnSdkInitializedEvent");
onSdkInitializedEvent -= value;
}
}
///
/// Fired when the application is paused or resumed.
///
private static Action onApplicationStateChangedEvent;
public static event Action OnApplicationStateChangedEvent
{
add
{
LogSubscribedToEvent("OnApplicationStateChangedEvent");
onApplicationStateChangedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnApplicationStateChangedEvent");
onApplicationStateChangedEvent -= value;
}
}
public static class Interstitial
{
internal static Action onAdLoadedEvent;
public static event Action OnAdLoadedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdLoadedEvent");
onAdLoadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdLoadedEvent");
onAdLoadedEvent -= value;
}
}
internal static Action onAdLoadFailedEvent;
public static event Action OnAdLoadFailedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdLoadFailedEvent");
onAdLoadFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdLoadFailedEvent");
onAdLoadFailedEvent -= value;
}
}
///
/// Fired when an interstitial ad is displayed (may not be received by Unity until the interstitial ad closes).
///
internal static Action onAdDisplayedEvent;
public static event Action OnAdDisplayedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdDisplayedEvent");
onAdDisplayedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdDisplayedEvent");
onAdDisplayedEvent -= value;
}
}
internal static Action onAdDisplayFailedEvent;
public static event Action OnAdDisplayFailedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdDisplayFailedEvent");
onAdDisplayFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdDisplayFailedEvent");
onAdDisplayFailedEvent -= value;
}
}
internal static Action onAdClickedEvent;
public static event Action OnAdClickedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdClickedEvent");
onAdClickedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdClickedEvent");
onAdClickedEvent -= value;
}
}
///
/// Fired when an interstitial ad impression was validated and revenue will be paid.
/// Executed on a background thread to avoid any delays in execution.
///
internal static Action onAdRevenuePaidEvent;
public static event Action OnAdRevenuePaidEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdRevenuePaidEvent");
onAdRevenuePaidEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdRevenuePaidEvent");
onAdRevenuePaidEvent -= value;
}
}
///
/// Fired when an expired interstitial ad is reloaded.
///
internal static Action onExpiredAdReloadedEvent;
public static event Action OnExpiredAdReloadedEvent
{
add
{
LogSubscribedToEvent("OnExpiredInterstitialAdReloadedEvent");
onExpiredAdReloadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnExpiredInterstitialAdReloadedEvent");
onExpiredAdReloadedEvent -= value;
}
}
///
/// Fired when an Ad Review Creative ID has been generated.
/// The parameters returned are the adUnitIdentifier, adReviewCreativeId, and adInfo in that respective order.
/// Executed on a background thread to avoid any delays in execution.
///
internal static Action onAdReviewCreativeIdGeneratedEvent;
public static event Action OnAdReviewCreativeIdGeneratedEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent -= value;
}
}
internal static Action onAdHiddenEvent;
public static event Action OnAdHiddenEvent
{
add
{
LogSubscribedToEvent("OnInterstitialAdHiddenEvent");
onAdHiddenEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnInterstitialAdHiddenEvent");
onAdHiddenEvent -= value;
}
}
}
public static class AppOpen
{
internal static Action onAdLoadedEvent;
public static event Action OnAdLoadedEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdLoadedEvent");
onAdLoadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdLoadedEvent");
onAdLoadedEvent -= value;
}
}
internal static Action onAdLoadFailedEvent;
public static event Action OnAdLoadFailedEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdLoadFailedEvent");
onAdLoadFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdLoadFailedEvent");
onAdLoadFailedEvent -= value;
}
}
///
/// Fired when an app open ad is displayed (may not be received by Unity until the app open ad closes).
///
internal static Action onAdDisplayedEvent;
public static event Action OnAdDisplayedEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdDisplayedEvent");
onAdDisplayedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdDisplayedEvent");
onAdDisplayedEvent -= value;
}
}
internal static Action onAdDisplayFailedEvent;
public static event Action OnAdDisplayFailedEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdDisplayFailedEvent");
onAdDisplayFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdDisplayFailedEvent");
onAdDisplayFailedEvent -= value;
}
}
internal static Action onAdClickedEvent;
public static event Action OnAdClickedEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdClickedEvent");
onAdClickedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdClickedEvent");
onAdClickedEvent -= value;
}
}
///
/// Fired when an app open ad impression was validated and revenue will be paid.
/// Executed on a background thread to avoid any delays in execution.
///
internal static Action onAdRevenuePaidEvent;
public static event Action OnAdRevenuePaidEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdRevenuePaidEvent");
onAdRevenuePaidEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdRevenuePaidEvent");
onAdRevenuePaidEvent -= value;
}
}
///
/// Fired when an expired app open ad is reloaded.
///
internal static Action onExpiredAdReloadedEvent;
public static event Action OnExpiredAdReloadedEvent
{
add
{
LogSubscribedToEvent("OnExpiredAppOpenAdReloadedEvent");
onExpiredAdReloadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnExpiredAppOpenAdReloadedEvent");
onExpiredAdReloadedEvent -= value;
}
}
internal static Action onAdHiddenEvent;
public static event Action OnAdHiddenEvent
{
add
{
LogSubscribedToEvent("OnAppOpenAdHiddenEvent");
onAdHiddenEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnAppOpenAdHiddenEvent");
onAdHiddenEvent -= value;
}
}
}
public static class Rewarded
{
internal static Action onAdLoadedEvent;
public static event Action OnAdLoadedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdLoadedEvent");
onAdLoadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdLoadedEvent");
onAdLoadedEvent -= value;
}
}
internal static Action onAdLoadFailedEvent;
public static event Action OnAdLoadFailedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdLoadFailedEvent");
onAdLoadFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdLoadFailedEvent");
onAdLoadFailedEvent -= value;
}
}
///
///Fired when a rewarded ad is displayed (may not be received by Unity until the rewarded ad closes).
///
internal static Action onAdDisplayedEvent;
public static event Action OnAdDisplayedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdDisplayedEvent");
onAdDisplayedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdDisplayedEvent");
onAdDisplayedEvent -= value;
}
}
internal static Action onAdDisplayFailedEvent;
public static event Action OnAdDisplayFailedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdDisplayFailedEvent");
onAdDisplayFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdDisplayFailedEvent");
onAdDisplayFailedEvent -= value;
}
}
internal static Action onAdClickedEvent;
public static event Action OnAdClickedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdClickedEvent");
onAdClickedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdClickedEvent");
onAdClickedEvent -= value;
}
}
///
/// Fired when a rewarded ad impression was validated and revenue will be paid.
/// Executed on a background thread to avoid any delays in execution.
///
internal static Action onAdRevenuePaidEvent;
public static event Action OnAdRevenuePaidEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdRevenuePaidEvent");
onAdRevenuePaidEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdRevenuePaidEvent");
onAdRevenuePaidEvent -= value;
}
}
///
/// Fired when an expired rewarded ad is reloaded.
///
internal static Action onExpiredAdReloadedEvent;
public static event Action OnExpiredAdReloadedEvent
{
add
{
LogSubscribedToEvent("OnExpiredRewardedAdReloadedEvent");
onExpiredAdReloadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnExpiredRewardedAdReloadedEvent");
onExpiredAdReloadedEvent -= value;
}
}
///
/// Fired when an Ad Review Creative ID has been generated.
///
internal static Action onAdReviewCreativeIdGeneratedEvent;
public static event Action OnAdReviewCreativeIdGeneratedEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent -= value;
}
}
internal static Action onAdReceivedRewardEvent;
public static event Action OnAdReceivedRewardEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdReceivedRewardEvent");
onAdReceivedRewardEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdReceivedRewardEvent");
onAdReceivedRewardEvent -= value;
}
}
internal static Action onAdHiddenEvent;
public static event Action OnAdHiddenEvent
{
add
{
LogSubscribedToEvent("OnRewardedAdHiddenEvent");
onAdHiddenEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnRewardedAdHiddenEvent");
onAdHiddenEvent -= value;
}
}
}
public static class Banner
{
internal static Action onAdLoadedEvent;
public static event Action OnAdLoadedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdLoadedEvent");
onAdLoadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdLoadedEvent");
onAdLoadedEvent -= value;
}
}
internal static Action onAdLoadFailedEvent;
public static event Action OnAdLoadFailedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdLoadFailedEvent");
onAdLoadFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdLoadFailedEvent");
onAdLoadFailedEvent -= value;
}
}
internal static Action onAdClickedEvent;
public static event Action OnAdClickedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdClickedEvent");
onAdClickedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdClickedEvent");
onAdClickedEvent -= value;
}
}
internal static Action onAdRevenuePaidEvent;
public static event Action OnAdRevenuePaidEvent
{
add
{
LogSubscribedToEvent("OnBannerAdRevenuePaidEvent");
onAdRevenuePaidEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdRevenuePaidEvent");
onAdRevenuePaidEvent -= value;
}
}
internal static Action onAdReviewCreativeIdGeneratedEvent;
public static event Action OnAdReviewCreativeIdGeneratedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent -= value;
}
}
internal static Action onAdExpandedEvent;
public static event Action OnAdExpandedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdExpandedEvent");
onAdExpandedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdExpandedEvent");
onAdExpandedEvent -= value;
}
}
internal static Action onAdCollapsedEvent;
public static event Action OnAdCollapsedEvent
{
add
{
LogSubscribedToEvent("OnBannerAdCollapsedEvent");
onAdCollapsedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnBannerAdCollapsedEvent");
onAdCollapsedEvent -= value;
}
}
}
public static class MRec
{
internal static Action onAdLoadedEvent;
public static event Action OnAdLoadedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdLoadedEvent");
onAdLoadedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdLoadedEvent");
onAdLoadedEvent -= value;
}
}
internal static Action onAdLoadFailedEvent;
public static event Action OnAdLoadFailedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdLoadFailedEvent");
onAdLoadFailedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdLoadFailedEvent");
onAdLoadFailedEvent -= value;
}
}
internal static Action onAdClickedEvent;
public static event Action OnAdClickedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdClickedEvent");
onAdClickedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdClickedEvent");
onAdClickedEvent -= value;
}
}
internal static Action onAdRevenuePaidEvent;
public static event Action OnAdRevenuePaidEvent
{
add
{
LogSubscribedToEvent("OnMRecAdRevenuePaidEvent");
onAdRevenuePaidEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdRevenuePaidEvent");
onAdRevenuePaidEvent -= value;
}
}
///
/// Fired when an Ad Review Creative ID has been generated.
///
internal static Action onAdReviewCreativeIdGeneratedEvent;
public static event Action OnAdReviewCreativeIdGeneratedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdReviewCreativeIdGeneratedEvent");
onAdReviewCreativeIdGeneratedEvent -= value;
}
}
internal static Action onAdExpandedEvent;
public static event Action OnAdExpandedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdExpandedEvent");
onAdExpandedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdExpandedEvent");
onAdExpandedEvent -= value;
}
}
internal static Action onAdCollapsedEvent;
public static event Action OnAdCollapsedEvent
{
add
{
LogSubscribedToEvent("OnMRecAdCollapsedEvent");
onAdCollapsedEvent += value;
}
remove
{
LogUnsubscribedToEvent("OnMRecAdCollapsedEvent");
onAdCollapsedEvent -= value;
}
}
}
public static void ForwardEvent(string eventPropsStr)
{
var eventProps = Json.Deserialize(eventPropsStr) as Dictionary;
if (eventProps == null)
{
MaxSdkLogger.E("Failed to forward event due to invalid event data");
return;
}
var keepInBackground = MaxSdkUtils.GetBoolFromDictionary(eventProps, "keepInBackground", false);
var eventName = MaxSdkUtils.GetStringFromDictionary(eventProps, "name", "");
if (eventName == "OnInitialCallbackEvent")
{
MaxSdkLogger.D("Initial background callback.");
}
else if (eventName == "OnSdkInitializedEvent")
{
var sdkConfiguration = MaxSdkBase.SdkConfiguration.Create(eventProps);
InvokeEvent(onSdkInitializedEvent, sdkConfiguration, eventName, keepInBackground);
}
else if (eventName == "OnCmpCompletedEvent")
{
var errorProps = MaxSdkUtils.GetDictionaryFromDictionary(eventProps, "error");
MaxCmpService.NotifyCompletedIfNeeded(errorProps);
}
else if (eventName == "OnApplicationStateChanged")
{
var isPaused = MaxSdkUtils.GetBoolFromDictionary(eventProps, "isPaused");
InvokeEvent(onApplicationStateChangedEvent, isPaused, eventName, keepInBackground);
}
// Ad Events
else
{
var isExpiredAdReloadedEvent = Regex.IsMatch(eventName, @"^OnExpired\w+AdReloadedEvent$");
var adInfoEventProps = isExpiredAdReloadedEvent ? MaxSdkUtils.GetDictionaryFromDictionary(eventProps, "newAdInfo") : eventProps;
var adInfo = new MaxSdkBase.AdInfo(adInfoEventProps);
var adUnitIdentifier = MaxSdkUtils.GetStringFromDictionary(adInfoEventProps, "adUnitId", "");
// Expired ad reloaded callbacks pass down multiple adInfo objects
if (isExpiredAdReloadedEvent)
{
var expiredAdInfo = new MaxSdkBase.AdInfo(MaxSdkUtils.GetDictionaryFromDictionary(eventProps, "expiredAdInfo"));
if (eventName == "OnExpiredInterstitialAdReloadedEvent")
{
InvokeEvent(Interstitial.onExpiredAdReloadedEvent, adUnitIdentifier, expiredAdInfo, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnExpiredAppOpenAdReloadedEvent")
{
InvokeEvent(AppOpen.onExpiredAdReloadedEvent, adUnitIdentifier, expiredAdInfo, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnExpiredRewardedAdReloadedEvent")
{
InvokeEvent(Rewarded.onExpiredAdReloadedEvent, adUnitIdentifier, expiredAdInfo, adInfo, eventName, keepInBackground);
}
else
{
MaxSdkLogger.UserWarning("Unknown MAX Ads event fired: " + eventName);
}
}
else if (eventName == "OnBannerAdLoadedEvent")
{
InvokeEvent(Banner.onAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdLoadFailedEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(Banner.onAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdClickedEvent")
{
InvokeEvent(Banner.onAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdRevenuePaidEvent")
{
InvokeEvent(Banner.onAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdReviewCreativeIdGeneratedEvent")
{
var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", "");
InvokeEvent(Banner.onAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdExpandedEvent")
{
InvokeEvent(Banner.onAdExpandedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnBannerAdCollapsedEvent")
{
InvokeEvent(Banner.onAdCollapsedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdLoadedEvent")
{
InvokeEvent(MRec.onAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdLoadFailedEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(MRec.onAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdClickedEvent")
{
InvokeEvent(MRec.onAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdRevenuePaidEvent")
{
InvokeEvent(MRec.onAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdReviewCreativeIdGeneratedEvent")
{
var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", "");
InvokeEvent(MRec.onAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdExpandedEvent")
{
InvokeEvent(MRec.onAdExpandedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnMRecAdCollapsedEvent")
{
InvokeEvent(MRec.onAdCollapsedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialLoadedEvent")
{
InvokeEvent(Interstitial.onAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialLoadFailedEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(Interstitial.onAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialHiddenEvent")
{
InvokeEvent(Interstitial.onAdHiddenEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialDisplayedEvent")
{
InvokeEvent(Interstitial.onAdDisplayedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialAdFailedToDisplayEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(Interstitial.onAdDisplayFailedEvent, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialClickedEvent")
{
InvokeEvent(Interstitial.onAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialAdRevenuePaidEvent")
{
InvokeEvent(Interstitial.onAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnInterstitialAdReviewCreativeIdGeneratedEvent")
{
var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", "");
InvokeEvent(Interstitial.onAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdLoadedEvent")
{
InvokeEvent(AppOpen.onAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdLoadFailedEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(AppOpen.onAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdHiddenEvent")
{
InvokeEvent(AppOpen.onAdHiddenEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdDisplayedEvent")
{
InvokeEvent(AppOpen.onAdDisplayedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdFailedToDisplayEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(AppOpen.onAdDisplayFailedEvent, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdClickedEvent")
{
InvokeEvent(AppOpen.onAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnAppOpenAdRevenuePaidEvent")
{
InvokeEvent(AppOpen.onAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdLoadedEvent")
{
InvokeEvent(Rewarded.onAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdLoadFailedEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(Rewarded.onAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdDisplayedEvent")
{
InvokeEvent(Rewarded.onAdDisplayedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdHiddenEvent")
{
InvokeEvent(Rewarded.onAdHiddenEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdClickedEvent")
{
InvokeEvent(Rewarded.onAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdRevenuePaidEvent")
{
InvokeEvent(Rewarded.onAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdReviewCreativeIdGeneratedEvent")
{
var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", "");
InvokeEvent(Rewarded.onAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdFailedToDisplayEvent")
{
var errorInfo = new MaxSdkBase.ErrorInfo(eventProps);
InvokeEvent(Rewarded.onAdDisplayFailedEvent, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground);
}
else if (eventName == "OnRewardedAdReceivedRewardEvent")
{
var reward = new MaxSdkBase.Reward
{
Label = MaxSdkUtils.GetStringFromDictionary(eventProps, "rewardLabel", ""),
Amount = MaxSdkUtils.GetIntFromDictionary(eventProps, "rewardAmount", 0)
};
InvokeEvent(Rewarded.onAdReceivedRewardEvent, adUnitIdentifier, reward, adInfo, eventName, keepInBackground);
}
else
{
MaxSdkLogger.UserWarning("Unknown MAX Ads event fired: " + eventName);
}
}
}
#if UNITY_EDITOR
public static void EmitSdkInitializedEvent()
{
if (onSdkInitializedEvent == null) return;
onSdkInitializedEvent(MaxSdkBase.SdkConfiguration.CreateEmpty());
}
#endif
private static void InvokeEvent(Action evt, string eventName, bool keepInBackground)
{
if (!CanInvokeEvent(evt)) return;
MaxSdkLogger.UserDebug("Invoking event: " + eventName);
if (ShouldInvokeInBackground(keepInBackground))
{
try
{
evt();
}
catch (Exception exception)
{
MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception);
MaxSdkLogger.LogException(exception);
}
}
else
{
MaxEventExecutor.ExecuteOnMainThread(evt, eventName);
}
}
private static void InvokeEvent(Action evt, T param, string eventName, bool keepInBackground)
{
if (!CanInvokeEvent(evt)) return;
MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Param: " + param);
if (ShouldInvokeInBackground(keepInBackground))
{
try
{
evt(param);
}
catch (Exception exception)
{
MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception);
MaxSdkLogger.LogException(exception);
}
}
else
{
MaxEventExecutor.ExecuteOnMainThread(() => evt(param), eventName);
}
}
private static void InvokeEvent(Action evt, T1 param1, T2 param2, string eventName, bool keepInBackground)
{
if (!CanInvokeEvent(evt)) return;
MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2);
if (ShouldInvokeInBackground(keepInBackground))
{
try
{
evt(param1, param2);
}
catch (Exception exception)
{
MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception);
MaxSdkLogger.LogException(exception);
}
}
else
{
MaxEventExecutor.ExecuteOnMainThread(() => evt(param1, param2), eventName);
}
}
private static void InvokeEvent(Action evt, T1 param1, T2 param2, T3 param3, string eventName, bool keepInBackground)
{
if (!CanInvokeEvent(evt)) return;
MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2 + ", " + param3);
if (ShouldInvokeInBackground(keepInBackground))
{
try
{
evt(param1, param2, param3);
}
catch (Exception exception)
{
MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception);
MaxSdkLogger.LogException(exception);
}
}
else
{
MaxEventExecutor.ExecuteOnMainThread(() => evt(param1, param2, param3), eventName);
}
}
private static bool CanInvokeEvent(Delegate evt)
{
if (evt == null) return false;
// Check that publisher is not over-subscribing
if (evt.GetInvocationList().Length > 5)
{
MaxSdkLogger.UserWarning("Ads Event (" + evt + ") has over 5 subscribers. Please make sure you are properly un-subscribing to actions!!!");
}
return true;
}
private static bool ShouldInvokeInBackground(bool keepInBackground)
{
return MaxSdkBase.InvokeEventsOnUnityMainThread == null ? keepInBackground : !MaxSdkBase.InvokeEventsOnUnityMainThread.Value;
}
private static void LogSubscribedToEvent(string eventName)
{
MaxSdkLogger.D("Listener has been added to callback: " + eventName);
}
private static void LogUnsubscribedToEvent(string eventName)
{
MaxSdkLogger.D("Listener has been removed from callback: " + eventName);
}
#if UNITY_EDITOR && UNITY_2019_2_OR_NEWER
///
/// Resets static event handlers so they still get reset even if Domain Reloading is disabled
///
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
private static void ResetOnDomainReload()
{
onSdkInitializedEvent = null;
Interstitial.onAdLoadedEvent = null;
Interstitial.onAdLoadFailedEvent = null;
Interstitial.onAdDisplayedEvent = null;
Interstitial.onAdDisplayFailedEvent = null;
Interstitial.onAdClickedEvent = null;
Interstitial.onAdRevenuePaidEvent = null;
Interstitial.onAdReviewCreativeIdGeneratedEvent = null;
Interstitial.onAdHiddenEvent = null;
AppOpen.onAdLoadedEvent = null;
AppOpen.onAdLoadFailedEvent = null;
AppOpen.onAdDisplayedEvent = null;
AppOpen.onAdDisplayFailedEvent = null;
AppOpen.onAdClickedEvent = null;
AppOpen.onAdRevenuePaidEvent = null;
AppOpen.onAdHiddenEvent = null;
Rewarded.onAdLoadedEvent = null;
Rewarded.onAdLoadFailedEvent = null;
Rewarded.onAdDisplayedEvent = null;
Rewarded.onAdDisplayFailedEvent = null;
Rewarded.onAdClickedEvent = null;
Rewarded.onAdRevenuePaidEvent = null;
Rewarded.onAdReviewCreativeIdGeneratedEvent = null;
Rewarded.onAdReceivedRewardEvent = null;
Rewarded.onAdHiddenEvent = null;
Banner.onAdLoadedEvent = null;
Banner.onAdLoadFailedEvent = null;
Banner.onAdClickedEvent = null;
Banner.onAdRevenuePaidEvent = null;
Banner.onAdReviewCreativeIdGeneratedEvent = null;
Banner.onAdExpandedEvent = null;
Banner.onAdCollapsedEvent = null;
MRec.onAdLoadedEvent = null;
MRec.onAdLoadFailedEvent = null;
MRec.onAdClickedEvent = null;
MRec.onAdRevenuePaidEvent = null;
MRec.onAdReviewCreativeIdGeneratedEvent = null;
MRec.onAdExpandedEvent = null;
MRec.onAdCollapsedEvent = null;
}
#endif
}