You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
571 lines
18 KiB
C#
571 lines
18 KiB
C#
namespace GleyMobileAds
|
|
{
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
#if USE_CHARTBOOST
|
|
using ChartboostSDK;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
#endif
|
|
|
|
|
|
public class CustomChartboost : MonoBehaviour, ICustomAds
|
|
{
|
|
#if USE_CHARTBOOST
|
|
UnityAction<bool> OnCompleteMethod;
|
|
UnityAction<bool, string> OnCompleteMethodWithAdvertiser;
|
|
UnityAction OnInterstitialClosed;
|
|
UnityAction<string> OnInterstitialClosedWithAdvertiser;
|
|
string chartboostAppId;
|
|
string chartboostAppSignature;
|
|
float reloadTime = 30;
|
|
bool interstitialLoaded;
|
|
bool rewardedLoaded;
|
|
bool debug;
|
|
bool triggerCompleteMethod;
|
|
|
|
|
|
/// <summary>
|
|
/// Initializing Chartboost
|
|
/// </summary>
|
|
/// <param name="consent">user consent -> if true show personalized ads</param>
|
|
/// <param name="platformSettings">contains all required settings for this publisher</param>
|
|
public void InitializeAds(UserConsent consent, UserConsent ccpaConsent, List<PlatformSettings> platformSettings)
|
|
{
|
|
debug = Advertisements.Instance.debug;
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " " + "Start Initialization");
|
|
ScreenWriter.Write(this + " " + "Start Initialization");
|
|
}
|
|
|
|
//get settings
|
|
#if UNITY_ANDROID
|
|
PlatformSettings settings = platformSettings.First(cond => cond.platform == SupportedPlatforms.Android);
|
|
#endif
|
|
#if UNITY_IOS
|
|
PlatformSettings settings = platformSettings.First(cond => cond.platform == SupportedPlatforms.iOS);
|
|
#endif
|
|
|
|
//apply settings
|
|
chartboostAppId = settings.appId.id;
|
|
chartboostAppSignature = settings.idInterstitial.id;
|
|
|
|
CBSettings.setAppId(chartboostAppId, chartboostAppSignature);
|
|
gameObject.AddComponent<Chartboost>();
|
|
|
|
//preparing Chartboost SDK for initialization
|
|
if (consent == UserConsent.Deny)
|
|
{
|
|
Chartboost.addDataUseConsent(CBGDPRDataUseConsent.NoBehavioral);
|
|
}
|
|
else
|
|
{
|
|
Chartboost.addDataUseConsent(CBGDPRDataUseConsent.Behavioral);
|
|
}
|
|
|
|
if (ccpaConsent == UserConsent.Deny)
|
|
{
|
|
Chartboost.addDataUseConsent(CBCCPADataUseConsent.OptOutSale);
|
|
}
|
|
else
|
|
{
|
|
Chartboost.addDataUseConsent(CBCCPADataUseConsent.OptInSale);
|
|
}
|
|
|
|
//add listeners
|
|
Chartboost.didFailToLoadInterstitial += FailInterstitial;
|
|
Chartboost.didCacheInterstitial += InterstitialLoaded;
|
|
Chartboost.didDismissInterstitial += ReloadInterstitial;
|
|
Chartboost.didCompleteRewardedVideo += RewardedVideoCompleted;
|
|
Chartboost.didFailToLoadRewardedVideo += FailRewarded;
|
|
Chartboost.didCacheRewardedVideo += RewardedLoaded;
|
|
Chartboost.didDismissRewardedVideo += ReloadRewarded;
|
|
Chartboost.didInitialize += InitializationSuccess;
|
|
|
|
//start loading ads
|
|
LoadInterstitial();
|
|
LoadRewardedVideo();
|
|
}
|
|
|
|
private void InitializationSuccess(bool success)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " Initialization Success " + success);
|
|
ScreenWriter.Write(this + " Initialization Success " + success);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates consent at runtime
|
|
/// </summary>
|
|
/// <param name="consent">the new consent</param>
|
|
public void UpdateConsent(UserConsent consent, UserConsent ccpaConsent)
|
|
{
|
|
if (consent == UserConsent.Deny)
|
|
{
|
|
Chartboost.addDataUseConsent(CBGDPRDataUseConsent.NoBehavioral);
|
|
}
|
|
else
|
|
{
|
|
Chartboost.addDataUseConsent(CBGDPRDataUseConsent.Behavioral);
|
|
}
|
|
|
|
if (ccpaConsent == UserConsent.Deny)
|
|
{
|
|
Chartboost.addDataUseConsent(CBCCPADataUseConsent.OptOutSale);
|
|
}
|
|
else
|
|
{
|
|
Chartboost.addDataUseConsent(CBCCPADataUseConsent.OptInSale);
|
|
}
|
|
|
|
Debug.Log(this + " Update consent to " + consent);
|
|
ScreenWriter.Write(this + " Update consent to " + consent);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check if Chartboost interstitial is available
|
|
/// </summary>
|
|
/// <returns>true if an interstitial is available</returns>
|
|
public bool IsInterstitialAvailable()
|
|
{
|
|
return interstitialLoaded;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Show Chartboost interstitial
|
|
/// </summary>
|
|
/// <param name="InterstitialClosed">callback called when user closes interstitial</param>
|
|
public void ShowInterstitial(UnityAction InterstitialClosed)
|
|
{
|
|
if (IsInterstitialAvailable())
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " ShowInterstitialAdChartboost");
|
|
ScreenWriter.Write(this + " ShowInterstitialAdChartboost");
|
|
}
|
|
|
|
OnInterstitialClosed = InterstitialClosed;
|
|
|
|
Chartboost.showInterstitial(CBLocation.Default);
|
|
interstitialLoaded = false;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Show Chartboost interstitial
|
|
/// </summary>
|
|
/// <param name="InterstitialClosed">callback called when user closes interstitial</param>
|
|
public void ShowInterstitial(UnityAction<string> InterstitialClosed)
|
|
{
|
|
if (IsInterstitialAvailable())
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " ShowInterstitialAdChartboost");
|
|
ScreenWriter.Write(this + " ShowInterstitialAdChartboost");
|
|
}
|
|
|
|
OnInterstitialClosedWithAdvertiser = InterstitialClosed;
|
|
|
|
Chartboost.showInterstitial(CBLocation.Default);
|
|
interstitialLoaded = false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Check if Chartboost rewarded video is available
|
|
/// </summary>
|
|
/// <returns>true if a rewarded video is available</returns>
|
|
public bool IsRewardVideoAvailable()
|
|
{
|
|
return rewardedLoaded;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Show Chartboost rewarded video
|
|
/// </summary>
|
|
/// <param name="CompleteMethod">callback called when user closes the rewarded video -> if true, video was not skipped</param>
|
|
public void ShowRewardVideo(UnityAction<bool> CompleteMethod)
|
|
{
|
|
if (IsRewardVideoAvailable())
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " ShowRewardedVideoChartboost");
|
|
ScreenWriter.Write(this + " ShowRewardedVideoChartboost");
|
|
}
|
|
|
|
OnCompleteMethod = CompleteMethod;
|
|
|
|
Chartboost.showRewardedVideo(CBLocation.Default);
|
|
rewardedLoaded = false;
|
|
triggerCompleteMethod = true;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Show Chartboost rewarded video
|
|
/// </summary>
|
|
/// <param name="CompleteMethod">callback called when user closes the rewarded video -> if true, video was not skipped</param>
|
|
public void ShowRewardVideo(UnityAction<bool, string> CompleteMethod)
|
|
{
|
|
if (IsRewardVideoAvailable())
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " ShowRewardedVideoChartboost");
|
|
ScreenWriter.Write(this + " ShowRewardedVideoChartboost");
|
|
}
|
|
|
|
OnCompleteMethodWithAdvertiser = CompleteMethod;
|
|
|
|
Chartboost.showRewardedVideo(CBLocation.Default);
|
|
rewardedLoaded = false;
|
|
triggerCompleteMethod = true;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Loads an Chartboost interstitial
|
|
/// </summary>
|
|
void LoadInterstitial()
|
|
{
|
|
#if UNITY_IOS
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " LoadInterstitial id:" + CBSettings.getIOSAppId() + " signature " + CBSettings.getIOSAppSecret());
|
|
ScreenWriter.Write(this + " LoadInterstitial id:" + CBSettings.getIOSAppId() + " signature " + CBSettings.getIOSAppSecret());
|
|
}
|
|
#else
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " LoadInterstitial id:" + CBSettings.getAndroidAppId() + " signature " + CBSettings.getAndroidAppSecret());
|
|
ScreenWriter.Write(this + " LoadInterstitial id:" + CBSettings.getAndroidAppId() + " signature " + CBSettings.getAndroidAppSecret());
|
|
}
|
|
#endif
|
|
Chartboost.cacheInterstitial(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event called after an interstitial was loaded
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
void InterstitialLoaded(CBLocation obj)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " InterstitialLoaded");
|
|
ScreenWriter.Write(this + " InterstitialLoaded");
|
|
}
|
|
interstitialLoaded = true;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event called after failed to load
|
|
/// </summary>
|
|
/// <param name="arg1"></param>
|
|
/// <param name="arg2"></param>
|
|
void FailInterstitial(CBLocation arg1, CBImpressionError arg2)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + "FailInterstitial Reason:" + arg2);
|
|
ScreenWriter.Write(this + "FailInterstitial Reason:" + arg2);
|
|
}
|
|
Invoke("ReloadInterstitialCB", reloadTime);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// called with delay to reload an interstitial after the previous one failed to load
|
|
/// </summary>
|
|
void ReloadInterstitialCB()
|
|
{
|
|
ReloadInterstitial(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event triggered after an interstitial was closed
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
void ReloadInterstitial(CBLocation obj)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " ReloadInterstitial");
|
|
ScreenWriter.Write(this + " ReloadInterstitial");
|
|
}
|
|
if (OnInterstitialClosed != null)
|
|
{
|
|
OnInterstitialClosed();
|
|
OnInterstitialClosed = null;
|
|
}
|
|
|
|
if (OnInterstitialClosedWithAdvertiser != null)
|
|
{
|
|
OnInterstitialClosedWithAdvertiser(SupportedAdvertisers.Chartboost.ToString());
|
|
OnInterstitialClosedWithAdvertiser = null;
|
|
}
|
|
|
|
//reload another ad
|
|
Chartboost.cacheInterstitial(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Loads a Chartboost rewarded video
|
|
/// </summary>
|
|
void LoadRewardedVideo()
|
|
{
|
|
#if UNITY_IOS
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " LoadRewardedVideo id:" + CBSettings.getIOSAppId() + " signature " + CBSettings.getIOSAppSecret());
|
|
ScreenWriter.Write(this + " LoadRewardedVideo id:" + CBSettings.getIOSAppId() + " signature " + CBSettings.getIOSAppSecret());
|
|
}
|
|
#else
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " LoadRewardedVideo id:" + CBSettings.getAndroidAppId() + " signature " + CBSettings.getAndroidAppSecret());
|
|
ScreenWriter.Write(this + " LoadRewardedVideo id:" + CBSettings.getAndroidAppId() + " signature " + CBSettings.getAndroidAppSecret());
|
|
}
|
|
#endif
|
|
Chartboost.cacheRewardedVideo(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event triggered if a rewarded video failed to load
|
|
/// </summary>
|
|
/// <param name="arg1"></param>
|
|
/// <param name="arg2"></param>
|
|
private void FailRewarded(CBLocation arg1, CBImpressionError arg2)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " FailRewarded Reason:" + arg2);
|
|
ScreenWriter.Write(this + " FailRewarded Reason:" + arg2);
|
|
}
|
|
if (triggerCompleteMethod == true)
|
|
{
|
|
if (OnCompleteMethod != null)
|
|
{
|
|
OnCompleteMethod(false);
|
|
OnCompleteMethod = null;
|
|
triggerCompleteMethod = false;
|
|
}
|
|
if (OnCompleteMethodWithAdvertiser != null)
|
|
{
|
|
OnCompleteMethodWithAdvertiser(false, SupportedAdvertisers.Chartboost.ToString());
|
|
OnCompleteMethodWithAdvertiser = null;
|
|
triggerCompleteMethod = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " FailRewarded Reload...");
|
|
ScreenWriter.Write(this + " FailRewarded Reload...");
|
|
}
|
|
Invoke("ReloadVideoCB", reloadTime);
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// called with delay to reload a rewarded video after the previous one failed to load
|
|
/// </summary>
|
|
void ReloadVideoCB()
|
|
{
|
|
ReloadRewarded(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event triggered after a rewarded video is loaded and ready to be watched
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
void RewardedLoaded(CBLocation obj)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " RewardedLoaded");
|
|
ScreenWriter.Write(this + " RewardedLoaded");
|
|
}
|
|
rewardedLoaded = true;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event triggered after a rewarded video was closed
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
void ReloadRewarded(CBLocation obj)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + "ReloadRewarded");
|
|
ScreenWriter.Write(this + "ReloadRewarded");
|
|
}
|
|
if (triggerCompleteMethod == true)
|
|
{
|
|
if (OnCompleteMethod != null)
|
|
{
|
|
OnCompleteMethod(false);
|
|
OnCompleteMethod = null;
|
|
triggerCompleteMethod = false;
|
|
}
|
|
if (OnCompleteMethodWithAdvertiser != null)
|
|
{
|
|
OnCompleteMethodWithAdvertiser(false, SupportedAdvertisers.Chartboost.ToString());
|
|
OnCompleteMethodWithAdvertiser = null;
|
|
triggerCompleteMethod = false;
|
|
}
|
|
}
|
|
|
|
//load another rewarded video
|
|
Chartboost.cacheRewardedVideo(CBLocation.Default);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Chartboost specific event triggered after a rewarded video was fully watched
|
|
/// </summary>
|
|
/// <param name="arg1"></param>
|
|
/// <param name="arg2"></param>
|
|
void RewardedVideoCompleted(CBLocation arg1, int arg2)
|
|
{
|
|
if (debug)
|
|
{
|
|
Debug.Log(this + " RewardedVideoCompleted");
|
|
ScreenWriter.Write(this + " RewardedVideoCompleted");
|
|
}
|
|
if (OnCompleteMethod != null)
|
|
{
|
|
OnCompleteMethod(true);
|
|
OnCompleteMethod = null;
|
|
}
|
|
|
|
if (OnCompleteMethodWithAdvertiser != null)
|
|
{
|
|
OnCompleteMethodWithAdvertiser(true, SupportedAdvertisers.Chartboost.ToString());
|
|
OnCompleteMethodWithAdvertiser = null;
|
|
}
|
|
|
|
triggerCompleteMethod = false;
|
|
}
|
|
|
|
|
|
//chartboost does not support banners
|
|
public void HideBanner()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
public bool IsBannerAvailable()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
|
|
public void ResetBannerUsage()
|
|
{
|
|
}
|
|
|
|
|
|
public bool BannerAlreadyUsed()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
|
|
public void ShowBanner(BannerPosition position, BannerType bannerType, UnityAction<bool, BannerPosition, BannerType> DisplayResult)
|
|
{
|
|
|
|
}
|
|
#else
|
|
//dummy interface implementation, used when Chartboost is not enabled
|
|
public void HideBanner()
|
|
{
|
|
|
|
}
|
|
|
|
public void InitializeAds(UserConsent consent, UserConsent ccpaConsent, System.Collections.Generic.List<PlatformSettings> platformSettings)
|
|
{
|
|
|
|
}
|
|
|
|
public bool IsBannerAvailable()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public void ResetBannerUsage()
|
|
{
|
|
|
|
}
|
|
|
|
public bool BannerAlreadyUsed()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public bool IsInterstitialAvailable()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public bool IsRewardVideoAvailable()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public void ShowBanner(BannerPosition position, BannerType type, UnityAction<bool, BannerPosition, BannerType> DisplayResult)
|
|
{
|
|
|
|
}
|
|
|
|
public void ShowInterstitial(UnityAction InterstitialClosed = null)
|
|
{
|
|
|
|
}
|
|
|
|
public void ShowInterstitial(UnityAction<string> InterstitialClosed)
|
|
{
|
|
|
|
}
|
|
|
|
public void ShowRewardVideo(UnityAction<bool> CompleteMethod)
|
|
{
|
|
|
|
}
|
|
|
|
public void ShowRewardVideo(UnityAction<bool, string> CompleteMethod)
|
|
{
|
|
|
|
}
|
|
|
|
public void UpdateConsent(UserConsent consent, UserConsent ccpaConsent)
|
|
{
|
|
|
|
}
|
|
#endif
|
|
}
|
|
}
|