- Get Unity AppLovin Plug-in. In Unity, select Assets > Import Package > Custom Package….
2. Create public class AdsAppLovin
using System;
using System.Collections;
using System.Collections.Generic;
#if USE_APPLOVIN
//using AppLovinMax.Internal.API;
#endif
#if UNITY_IPHONE
using Unity.Advertisement.IosSupport;
#endif
using UnityEngine;
public class AdsAppLovin : MonoBehaviour
{
}
Declare Variables
[Header("SDK INFORMATION")]
[SerializeField] string SDK_KEY = "SDK KEY";
[SerializeField] string USER_ID = "USER_ID";
int retryAttempt;
int retryAttemptReward;
//
bool isBannerShowing;
bool isBannerLoaded;
bool isIntersitialLoaded;
bool isRewardedLoaded;
// Start is called before the first frame update
[Header("iOS PLACEMENT")]
[SerializeField] string BANNER_IOS_ID;
[SerializeField] string INTER_IOS_ID;
// [SerializeField] string NATIVE_IOS_ID;
[SerializeField] string REWARDED_IOS_ID;
[Header("ANDROID PLACEMENT")]
[SerializeField] string BANNER_ANDROID_ID;
[SerializeField] string INTER_ANDROID_ID;
// [SerializeField] string NATIVE_ANDROID_ID;
[SerializeField] string REWARDED_ANDROID_ID;
[SerializeField] bool isAllowRewarded;
private string BANNER_ID;
private string INTER_ID;
private string REWARDED_ID;
public static AdsAppLovin THIS;
public Action rewardAdsLoadedEvent;
public Action rewardAdsHideEvent;
public Action InitAdsEvent;
public Action insterAdsLoadedEvent;
public Action InsterAdsShowCompletedEvent;
MaxSdkBase.AdViewPosition bannerPos;
Init AppLovin Service
private void Awake()
{
if (THIS != null)
{
Destroy(THIS);
}
THIS = this;
DontDestroyOnLoad(this);
}
public void InitAppLovinService()
{
isBannerLoaded = false;
isIntersitialLoaded = false;
isRewardedLoaded = false;
#if UNITY_ANDROID
BANNER_ID = BANNER_ANDROID_ID;
INTER_ID = INTER_ANDROID_ID;
REWARDED_ID = REWARDED_ANDROID_ID;
#elif UNITY_IPHONE
BANNER_ID = BANNER_IOS_ID;
INTER_ID = INTER_IOS_ID;
REWARDED_ID = REWARDED_IOS_ID;
#else
BANNER_ID = BANNER_ANDROID_ID;
INTER_ID = INTER_ANDROID_ID;
REWARDED_ID = REWARDED_ANDROID_ID;
#endif
Debug.Log("Start AppLovin SDK with BANNER_ID " + BANNER_ID);
Debug.Log("Start AppLovin SDK with INTER_ID " + INTER_ID);
MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) =>
{
// AppLovin SDK is initialized, start loading ads
//Debug.Log("AppLovin SDK is initialized, start loading ads");
// InitAdsEvent += SceneManager._This.startApp;
InitializeInterstitialAds();
if (isAllowRewarded) InitializeRewardedAds();
if (InitAdsEvent != null) InitAdsEvent();
};
//MaxSdk.SetSdkKey(SDK_KEY);
MaxSdk.SetHasUserConsent(true);
MaxSdk.SetDoNotSell(true);
MaxSdk.InitializeSdk();
isBannerShowing = false;
}
Show Banner Ads
// BANNER
public void showBanner()
{
MaxSdk.ShowBanner(BANNER_ID);
}
public void hideBanner()
{
// stopBannerAutoRefesh();
MaxSdk.HideBanner(BANNER_ID);
}
public void destroyBanner()
{
MaxSdk.DestroyBanner(BANNER_ID);
}
public void loadBanner(MaxSdkBase.AdViewPosition pos)
{
bannerPos = pos;
InitializeBannerAds();
}
public bool isBannerShow()
{
return isBannerShowing;
}
public void stopBannerAutoRefesh()
{
MaxSdk.StopBannerAutoRefresh(BANNER_ID);
}
private void InitializeBannerAds()
{
isBannerShowing = false;
// Banners are automatically sized to 320×50 on phones and 728×90 on tablets
// You may call the utility method MaxSdkUtils.isTablet() to help with view sizing adjustments
MaxSdkBase.AdViewConfiguration adViewConfiguration = new MaxSdkBase.AdViewConfiguration(bannerPos);
MaxSdk.CreateBanner(BANNER_ID, adViewConfiguration);
// Set background or background color for banners to be fully functional
MaxSdk.SetBannerBackgroundColor(BANNER_ID, Color.clear);
MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent;
MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailedEvent;
MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdExpandedEvent += OnBannerAdExpandedEvent;
MaxSdkCallbacks.Banner.OnAdCollapsedEvent += OnBannerAdCollapsedEvent;
MaxSdk.LoadBanner(BANNER_ID);
showBanner();
}
private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Debug.Log("OnBannerAdLoadedEvent Load Banner success");
isBannerShowing = true;
isBannerLoaded = true;
}
private void OnBannerAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) { isBannerLoaded = false; }
private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }
private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }
private void OnBannerAdExpandedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }
private void OnBannerAdCollapsedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { }
Show Interstitial Ads
// INTER
public void showInterstitialAds()
{
MaxSdk.ShowInterstitial(INTER_ID);
}
public bool isInterstitialAdsReady()
{
return isIntersitialLoaded;
}
private void InitializeInterstitialAds()
{
// Attach callback
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;
// Load the first interstitial
LoadInterstitial();
}
private void LoadInterstitial()
{
MaxSdk.LoadInterstitial(INTER_ID);
}
private void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad is ready for you to show. MaxSdk.IsInterstitialReady(adUnitId) now returns 'true'
// Reset retry attempt
isIntersitialLoaded = true;
if (insterAdsLoadedEvent != null)
{
insterAdsLoadedEvent();
Debug.Log("Interstitial ad insterAdsLoadedEvent");
}
retryAttempt = 0;
}
private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// Interstitial ad failed to load
// AppLovin recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds)
isIntersitialLoaded = false;
retryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttempt));
Invoke("LoadInterstitial", (float)retryDelay);
}
private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Time.timeScale = 0f;
}
private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad failed to display. AppLovin recommends that you load the next ad.
if (InsterAdsShowCompletedEvent != null) InsterAdsShowCompletedEvent();
Time.timeScale = 1f;
LoadInterstitial();
}
private void OnInterstitialClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { Time.timeScale = 1f; }
private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad is hidden. Pre-load the next ad.
if (InsterAdsShowCompletedEvent != null) InsterAdsShowCompletedEvent();
Time.timeScale = 1f;
LoadInterstitial();
}
Show Rewarded Ads
// REWARDED
Action<bool, int> rewaredCallBack;
public void showRewardedVideo(Action<bool, int> callBack)
{
rewaredCallBack = callBack;
MaxSdk.ShowRewardedAd(REWARDED_ID);
}
public void showRewardedVideo2()
{
rewaredCallBack = null;
MaxSdk.ShowRewardedAd(REWARDED_ID);
}
public bool isAdsRewardedReady()
{
return isRewardedLoaded;
}
private void InitializeRewardedAds()
{
// Attach callback
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdLoadFailedEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent;
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdHiddenEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
// Load the first rewarded ad
LoadRewardedAd();
}
private void LoadRewardedAd()
{
MaxSdk.LoadRewardedAd(REWARDED_ID);
}
private void OnRewardedAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad is ready for you to show. MaxSdk.IsRewardedAdReady(adUnitId) now returns 'true'.
if (rewardAdsLoadedEvent != null)
{
rewardAdsLoadedEvent();
}
// Reset retry attempt
isRewardedLoaded = true;
retryAttemptReward = 0;
}
private void OnRewardedAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// Rewarded ad failed to load
// AppLovin recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds).
isRewardedLoaded = false;
retryAttemptReward++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttemptReward));
Invoke("LoadRewardedAd", (float)retryDelay);
}
private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Time.timeScale = 0f;
isRewardedLoaded = false;
}
private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad failed to display. AppLovin recommends that you load the next ad.
Time.timeScale = 1f;
isRewardedLoaded = false;
retryAttemptReward++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttemptReward));
Invoke("LoadRewardedAd", (float)retryDelay);
}
private void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Time.timeScale = 1f;
}
private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad is hidden. Pre-load the next ad
Time.timeScale = 1f;
if (rewardAdsHideEvent != null)
{
rewardAdsHideEvent();
}
retryAttemptReward++;
double retryDelay = Math.Pow(2, Math.Min(6, retryAttemptReward));
Invoke("LoadRewardedAd", (float)retryDelay);
}
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
{
// The rewarded ad displayed and the user should receive the reward.
if (rewaredCallBack != null)
{
rewaredCallBack(true, 10);
}
Time.timeScale = 1f;
}
private void OnRewardedAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
/*
if (rewaredCallBack != null)
{
rewaredCallBack(true, 10);
}
Time.timeScale = 1f;
*/
}