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.
CrowdControl/Assets/GleyPlugins/Ads/Scripts/SupportedAdvertisers/CustomChartboost.cs

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
}
}