626 lines
20 KiB
C#
626 lines
20 KiB
C#
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using AppodealAds.Unity.Api;
|
|
using AppodealAds.Unity.Common;
|
|
using ConsentManager.Common;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace ConsentManager.ConsentManagerDemo.Scripts
|
|
{
|
|
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
|
[SuppressMessage("ReSharper", "ParameterHidesMember")]
|
|
public class AppodealDemo : MonoBehaviour, IAppodealInitializationListener, IInAppPurchaseValidationListener,
|
|
IBannerAdListener, IInterstitialAdListener, IRewardedVideoAdListener, IMrecAdListener,
|
|
IConsentFormListener, IConsentInfoUpdateListener, IAdRevenueListener
|
|
{
|
|
#region Constants
|
|
|
|
private const string CACHE_INTERSTITIAL = "CACHE INTERSTITIAL";
|
|
private const string SHOW_INTERSTITIAL = "SHOW INTERSTITIAL";
|
|
private const string CACHE_REWARDED_VIDEO = "CACHE REWARDED VIDEO";
|
|
|
|
#endregion
|
|
|
|
#region UI
|
|
|
|
[SerializeField] public Toggle tgTesting;
|
|
[SerializeField] public Toggle tgLogging;
|
|
[SerializeField] public Button btnShowInterstitial;
|
|
[SerializeField] public Button btnShowRewardedVideo;
|
|
[SerializeField] public GameObject consentManagerPanel;
|
|
[SerializeField] public GameObject appodealPanel;
|
|
|
|
#endregion
|
|
|
|
#region Application keys
|
|
|
|
#if UNITY_EDITOR && !UNITY_ANDROID && !UNITY_IPHONE
|
|
public static string appKey = "";
|
|
#elif UNITY_ANDROID
|
|
public static string appKey = "fee50c333ff3825fd6ad6d38cff78154de3025546d47a84f";
|
|
#elif UNITY_IPHONE
|
|
public static string appKey = "466de0d625e01e8811c588588a42a55970bc7c132649eede";
|
|
#else
|
|
public static string appKey = "";
|
|
#endif
|
|
|
|
#endregion
|
|
|
|
private Consent currentConsent;
|
|
private ConsentForm consentForm;
|
|
private ConsentManager consentManager;
|
|
|
|
private void Start()
|
|
{
|
|
consentManagerPanel.gameObject.SetActive(true);
|
|
appodealPanel.gameObject.SetActive(false);
|
|
|
|
btnShowInterstitial.GetComponentInChildren<Text>().text = CACHE_INTERSTITIAL;
|
|
btnShowRewardedVideo.GetComponentInChildren<Text>().text = CACHE_REWARDED_VIDEO;
|
|
|
|
consentManager = ConsentManager.getInstance();
|
|
consentManager.setStorage(ConsentManager.Storage.SHARED_PREFERENCE);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
Appodeal.destroy(Appodeal.BANNER);
|
|
}
|
|
|
|
public void RequestConsentInfoUpdate()
|
|
{
|
|
consentManager?.requestConsentInfoUpdate(appKey, this);
|
|
}
|
|
|
|
public void SetCustomVendor()
|
|
{
|
|
var customVendor = new Vendor.Builder(
|
|
"Appodeal Test",
|
|
"com.appodeal.test",
|
|
"https://customvendor.com")
|
|
.setPurposeIds(new List<int> {100, 200, 300})
|
|
.setFeatureIds(new List<int> {400, 500, 600})
|
|
.setLegitimateInterestPurposeIds(new List<int> {700, 800, 900})
|
|
.build();
|
|
|
|
consentManager?.setCustomVendor(customVendor);
|
|
|
|
var vendor = consentManager?.getCustomVendor("com.appodeal.test");
|
|
if (vendor == null) return;
|
|
Debug.Log("Vendor getName: " + vendor.getName());
|
|
Debug.Log("Vendor getBundle: " + vendor.getBundle());
|
|
Debug.Log("Vendor getPolicyUrl: " + vendor.getPolicyUrl());
|
|
foreach (var purposeId in vendor.getPurposeIds())
|
|
{
|
|
Debug.Log("Vendor getPurposeIds: " + purposeId);
|
|
}
|
|
|
|
foreach (var featureId in vendor.getFeatureIds())
|
|
{
|
|
Debug.Log("Vendor getFeatureIds: " + featureId);
|
|
}
|
|
|
|
foreach (var legitimateInterestPurposeId in vendor.getLegitimateInterestPurposeIds())
|
|
{
|
|
Debug.Log("Vendor getLegitimateInterestPurposeIds: " + legitimateInterestPurposeId);
|
|
}
|
|
}
|
|
|
|
public void ShouldShowForm()
|
|
{
|
|
Debug.Log("shouldShowConsentDialog: " + consentManager.shouldShowConsentDialog());
|
|
}
|
|
|
|
public void GetConsentZone()
|
|
{
|
|
Debug.Log("getConsentZone: " + consentManager.getConsentZone());
|
|
}
|
|
|
|
public void GetConsentStatus()
|
|
{
|
|
Debug.Log("getConsentStatus: " + consentManager.getConsentStatus());
|
|
}
|
|
|
|
public void LoadConsentForm()
|
|
{
|
|
consentForm = ConsentForm.GetInstance(this);
|
|
consentForm?.load();
|
|
}
|
|
|
|
public void IsLoadedConsentForm()
|
|
{
|
|
if (consentForm != null)
|
|
{
|
|
Debug.Log("isLoadedConsentForm: " + consentForm.isLoaded());
|
|
}
|
|
}
|
|
|
|
public void ShowFormAsActivity()
|
|
{
|
|
if (consentForm != null)
|
|
{
|
|
consentForm.show();
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("showForm - false");
|
|
}
|
|
}
|
|
|
|
public void ShowFormAsDialog()
|
|
{
|
|
if (consentForm != null)
|
|
{
|
|
consentForm.show();
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("showForm - false");
|
|
}
|
|
}
|
|
|
|
public void PrintIABString()
|
|
{
|
|
Debug.Log("Consent IAB String is: " + consentManager.getConsent().getIabConsentString());
|
|
}
|
|
|
|
public void PrintCurrentConsent()
|
|
{
|
|
if (consentManager.getConsent() == null) return;
|
|
Debug.Log("consent.hasConsentForVendor() - " + consentManager.getConsent().hasConsentForVendor("com.appodeal.test"));
|
|
Debug.Log("consent.getStatus() - " + consentManager.getConsent().getStatus());
|
|
Debug.Log("consent.getZone() - " + consentManager.getConsent().getZone());
|
|
}
|
|
|
|
public void PrintAuthorizationStatus()
|
|
{
|
|
if (consentManager.getConsent() == null) return;
|
|
Debug.Log($"AuthorizationStatus - {consentManager.getConsent().getAuthorizationStatus()} ");
|
|
}
|
|
|
|
public void ShowAppodealLogic()
|
|
{
|
|
consentManagerPanel.SetActive(false);
|
|
appodealPanel.SetActive(true);
|
|
}
|
|
|
|
public void Initialize()
|
|
{
|
|
InitWithConsent(currentConsent != null);
|
|
}
|
|
|
|
public void InitWithConsent(bool isConsent)
|
|
{
|
|
Appodeal.setLogLevel(tgLogging.isOn ? Appodeal.LogLevel.Verbose : Appodeal.LogLevel.None);
|
|
Appodeal.setTesting(tgTesting.isOn);
|
|
Appodeal.setUseSafeArea(true);
|
|
|
|
Appodeal.setUserId("1");
|
|
Appodeal.setCustomFilter(UserSettings.USER_AGE, 18);
|
|
Appodeal.setCustomFilter(UserSettings.USER_GENDER, (int) UserSettings.Gender.MALE);
|
|
|
|
Appodeal.setExtraData("testKey", "testValue");
|
|
Appodeal.resetExtraData("testKey");
|
|
|
|
Appodeal.setSmartBanners(true);
|
|
Appodeal.setBannerAnimation(false);
|
|
Appodeal.setTabletBanners(false);
|
|
Appodeal.setBannerRotation(-90, 110);
|
|
|
|
Appodeal.disableLocationPermissionCheck();
|
|
Appodeal.setChildDirectedTreatment(false);
|
|
Appodeal.muteVideosIfCallsMuted(true);
|
|
|
|
Appodeal.setTriggerOnLoadedOnPrecache(Appodeal.INTERSTITIAL, true);
|
|
|
|
Appodeal.disableNetwork(AppodealNetworks.VUNGLE);
|
|
Appodeal.disableNetwork(AppodealNetworks.YANDEX, Appodeal.MREC);
|
|
|
|
Appodeal.setAutoCache(Appodeal.INTERSTITIAL, false);
|
|
Appodeal.setAutoCache(Appodeal.REWARDED_VIDEO, false);
|
|
|
|
Appodeal.setBannerCallbacks(this);
|
|
Appodeal.setInterstitialCallbacks(this);
|
|
Appodeal.setRewardedVideoCallbacks(this);
|
|
Appodeal.setMrecCallbacks(this);
|
|
Appodeal.setAdRevenueCallback(this);
|
|
|
|
Appodeal.setCustomFilter("newBoolean", true);
|
|
Appodeal.setCustomFilter("newInt", 1234567890);
|
|
Appodeal.setCustomFilter("newDouble", 123.123456789);
|
|
Appodeal.setCustomFilter("newString", "newStringFromSDK");
|
|
|
|
if (isConsent)
|
|
{
|
|
Appodeal.updateConsent(currentConsent);
|
|
}
|
|
else
|
|
{
|
|
Appodeal.updateCcpaConsent(Appodeal.CcpaUserConsent.OptOut);
|
|
Appodeal.updateGdprConsent(Appodeal.GdprUserConsent.NonPersonalized);
|
|
}
|
|
|
|
int adTypes = Appodeal.INTERSTITIAL | Appodeal.BANNER | Appodeal.REWARDED_VIDEO | Appodeal.MREC;
|
|
Appodeal.initialize(appKey, adTypes, (IAppodealInitializationListener) this);
|
|
}
|
|
|
|
public void ShowInterstitial()
|
|
{
|
|
if (Appodeal.isLoaded(Appodeal.INTERSTITIAL) && Appodeal.canShow(Appodeal.INTERSTITIAL, "default") && !Appodeal.isPrecache(Appodeal.INTERSTITIAL))
|
|
{
|
|
Appodeal.show(Appodeal.INTERSTITIAL);
|
|
}
|
|
else
|
|
{
|
|
Appodeal.cache(Appodeal.INTERSTITIAL);
|
|
}
|
|
}
|
|
|
|
public void ShowRewardedVideo()
|
|
{
|
|
if (Appodeal.isLoaded(Appodeal.REWARDED_VIDEO) && Appodeal.canShow(Appodeal.REWARDED_VIDEO, "default"))
|
|
{
|
|
Appodeal.show(Appodeal.REWARDED_VIDEO);
|
|
}
|
|
else
|
|
{
|
|
Appodeal.cache(Appodeal.REWARDED_VIDEO);
|
|
}
|
|
}
|
|
|
|
public void ShowBannerBottom()
|
|
{
|
|
Appodeal.show(Appodeal.BANNER_BOTTOM, "default");
|
|
}
|
|
|
|
public void ShowBannerTop()
|
|
{
|
|
Appodeal.show(Appodeal.BANNER_TOP, "default");
|
|
}
|
|
|
|
public void HideBanner()
|
|
{
|
|
Appodeal.hide(Appodeal.BANNER);
|
|
}
|
|
|
|
public void ShowBannerView()
|
|
{
|
|
Appodeal.showBannerView(Appodeal.BANNER_BOTTOM, Appodeal.BANNER_HORIZONTAL_CENTER, "default");
|
|
}
|
|
|
|
public void HideBannerView()
|
|
{
|
|
Appodeal.hideBannerView();
|
|
}
|
|
|
|
public void ShowMrecView()
|
|
{
|
|
Appodeal.showMrecView(Appodeal.BANNER_TOP, Appodeal.BANNER_HORIZONTAL_CENTER, "default");
|
|
}
|
|
|
|
public void HideMrecView()
|
|
{
|
|
Appodeal.hideMrecView();
|
|
}
|
|
|
|
public void ShowBannerLeft()
|
|
{
|
|
Appodeal.show(Appodeal.BANNER_LEFT);
|
|
}
|
|
|
|
public void ShowBannerRight()
|
|
{
|
|
Appodeal.show(Appodeal.BANNER_RIGHT);
|
|
}
|
|
|
|
#region AppodealInitializeListener
|
|
|
|
public void onInitializationFinished(List<string> errors)
|
|
{
|
|
string output = errors == null ? string.Empty : string.Join(", ", errors);
|
|
Debug.Log($"onInitializationFinished(errors:[{output}])");
|
|
|
|
Debug.Log($"isAutoCacheEnabled() for banner: {Appodeal.isAutoCacheEnabled(Appodeal.BANNER)}");
|
|
Debug.Log($"isInitialized() for banner: {Appodeal.isInitialized(Appodeal.BANNER)}");
|
|
Debug.Log($"isSmartBannersEnabled(): {Appodeal.isSmartBannersEnabled()}");
|
|
Debug.Log($"getUserId(): {Appodeal.getUserId()}");
|
|
Debug.Log($"getSegmentId(): {Appodeal.getSegmentId()}");
|
|
Debug.Log($"getRewardParameters(): {Appodeal.getRewardParameters()}");
|
|
Debug.Log($"getNativeSDKVersion(): {Appodeal.getNativeSDKVersion()}");
|
|
|
|
var networksList = Appodeal.getNetworks(Appodeal.REWARDED_VIDEO);
|
|
output = networksList == null ? string.Empty : string.Join(", ", (networksList.ToArray()));
|
|
Debug.Log($"getNetworks() for RV: {output}");
|
|
|
|
#if UNITY_ANDROID
|
|
var additionalParams = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } };
|
|
|
|
var purchase = new PlayStoreInAppPurchase.Builder(Appodeal.PlayStorePurchaseType.Subs)
|
|
.withAdditionalParameters(additionalParams)
|
|
.withPurchaseTimestamp(793668600)
|
|
.withDeveloperPayload("payload")
|
|
.withPurchaseToken("token")
|
|
.withPurchaseData("data")
|
|
.withPublicKey("key")
|
|
.withSignature("signature")
|
|
.withCurrency("USD")
|
|
.withOrderId("orderId")
|
|
.withPrice("1.99")
|
|
.withSku("sku")
|
|
.build();
|
|
|
|
Appodeal.validatePlayStoreInAppPurchase(purchase, this);
|
|
#elif UNITY_IOS
|
|
var additionalParams = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } };
|
|
|
|
var purchase = new AppStoreInAppPurchase.Builder(Appodeal.AppStorePurchaseType.Consumable)
|
|
.withAdditionalParameters(additionalParams)
|
|
.withTransactionId("transactionId")
|
|
.withProductId("productId")
|
|
.withCurrency("USD")
|
|
.withPrice("2.89")
|
|
.build();
|
|
|
|
Appodeal.validateAppStoreInAppPurchase(purchase, this);
|
|
#endif
|
|
|
|
Appodeal.logEvent("test_event", new Dictionary<string, object> { { "test_key_1", 42 }, { "test_key_2", "test_value" } });
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InAppPurchaseValidationListener
|
|
|
|
public void onInAppPurchaseValidationSucceeded(string json)
|
|
{
|
|
Debug.Log($"onInAppPurchaseValidationSucceeded(string json:\n{json})");
|
|
}
|
|
|
|
public void onInAppPurchaseValidationFailed(string json)
|
|
{
|
|
Debug.Log($"onInAppPurchaseValidationFailed(string json:\n{json})");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ConsentFormListener
|
|
|
|
public void onConsentFormLoaded()
|
|
{
|
|
Debug.Log("ConsentFormListener - onConsentFormLoaded");
|
|
}
|
|
|
|
public void onConsentFormError(ConsentManagerException exception)
|
|
{
|
|
Debug.Log($"ConsentFormListener - onConsentFormError, reason - {exception.getReason()}");
|
|
}
|
|
|
|
public void onConsentFormOpened()
|
|
{
|
|
Debug.Log("ConsentFormListener - onConsentFormOpened");
|
|
}
|
|
|
|
public void onConsentFormClosed(Consent consent)
|
|
{
|
|
currentConsent = consent;
|
|
Debug.Log($"ConsentFormListener - onConsentFormClosed, consentStatus - {consent.getStatus()}");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ConsentInfoUpdateListener
|
|
|
|
public void onConsentInfoUpdated(Consent consent)
|
|
{
|
|
currentConsent = consent;
|
|
Debug.Log("onConsentInfoUpdated");
|
|
}
|
|
|
|
public void onFailedToUpdateConsentInfo(ConsentManagerException error)
|
|
{
|
|
Debug.Log($"onFailedToUpdateConsentInfo");
|
|
|
|
if (error == null) return;
|
|
Debug.Log($"onFailedToUpdateConsentInfo Reason: {error.getReason()}");
|
|
|
|
switch (error.getCode())
|
|
{
|
|
case 0:
|
|
Debug.Log("onFailedToUpdateConsentInfo - UNKNOWN");
|
|
break;
|
|
case 1:
|
|
Debug.Log(
|
|
"onFailedToUpdateConsentInfo - INTERNAL - Error on SDK side. Includes JS-bridge or encoding/decoding errors");
|
|
break;
|
|
case 2:
|
|
Debug.Log("onFailedToUpdateConsentInfo - NETWORKING - HTTP errors, parse request/response ");
|
|
break;
|
|
case 3:
|
|
Debug.Log("onFailedToUpdateConsentInfo - INCONSISTENT - Incorrect SDK API usage");
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Banner callback handlers
|
|
|
|
public void onBannerLoaded(int height, bool precache)
|
|
{
|
|
Debug.Log("onBannerLoaded");
|
|
Debug.Log($"Banner height - {height}");
|
|
Debug.Log($"Banner precache - {precache}");
|
|
Debug.Log($"getPredictedEcpm(): {Appodeal.getPredictedEcpm(Appodeal.BANNER)}");
|
|
}
|
|
|
|
public void onBannerFailedToLoad()
|
|
{
|
|
Debug.Log("onBannerFailedToLoad");
|
|
}
|
|
|
|
public void onBannerShown()
|
|
{
|
|
Debug.Log("onBannerShown");
|
|
}
|
|
|
|
public void onBannerShowFailed()
|
|
{
|
|
Debug.Log("onBannerShowFailed");
|
|
}
|
|
|
|
public void onBannerClicked()
|
|
{
|
|
Debug.Log("onBannerClicked");
|
|
}
|
|
|
|
public void onBannerExpired()
|
|
{
|
|
Debug.Log("onBannerExpired");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Interstitial callback handlers
|
|
|
|
public void onInterstitialLoaded(bool isPrecache)
|
|
{
|
|
if (!isPrecache)
|
|
{
|
|
btnShowInterstitial.GetComponentInChildren<Text>().text = SHOW_INTERSTITIAL;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Appodeal. Interstitial loaded. isPrecache - true");
|
|
}
|
|
|
|
Debug.Log("onInterstitialLoaded");
|
|
Debug.Log($"getPredictedEcpm(): {Appodeal.getPredictedEcpm(Appodeal.INTERSTITIAL)}");
|
|
}
|
|
|
|
public void onInterstitialFailedToLoad()
|
|
{
|
|
Debug.Log("onInterstitialFailedToLoad");
|
|
}
|
|
|
|
public void onInterstitialShowFailed()
|
|
{
|
|
Debug.Log("onInterstitialShowFailed");
|
|
}
|
|
|
|
public void onInterstitialShown()
|
|
{
|
|
Debug.Log("onInterstitialShown");
|
|
}
|
|
|
|
public void onInterstitialClosed()
|
|
{
|
|
btnShowInterstitial.GetComponentInChildren<Text>().text = CACHE_INTERSTITIAL;
|
|
Debug.Log("onInterstitialClosed");
|
|
}
|
|
|
|
public void onInterstitialClicked()
|
|
{
|
|
Debug.Log("onInterstitialClicked");
|
|
}
|
|
|
|
public void onInterstitialExpired()
|
|
{
|
|
Debug.Log("onInterstitialExpired");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Rewarded Video callback handlers
|
|
|
|
public void onRewardedVideoLoaded(bool isPrecache)
|
|
{
|
|
btnShowRewardedVideo.GetComponentInChildren<Text>().text = "SHOW REWARDED VIDEO";
|
|
Debug.Log("onRewardedVideoLoaded");
|
|
Debug.Log($"getPredictedEcpm(): {Appodeal.getPredictedEcpm(Appodeal.REWARDED_VIDEO)}");
|
|
}
|
|
|
|
public void onRewardedVideoFailedToLoad()
|
|
{
|
|
Debug.Log("onRewardedVideoFailedToLoad");
|
|
}
|
|
|
|
public void onRewardedVideoShowFailed()
|
|
{
|
|
Debug.Log("onRewardedVideoShowFailed");
|
|
}
|
|
|
|
public void onRewardedVideoShown()
|
|
{
|
|
Debug.Log("onRewardedVideoShown");
|
|
}
|
|
|
|
public void onRewardedVideoClosed(bool finished)
|
|
{
|
|
btnShowRewardedVideo.GetComponentInChildren<Text>().text = "CACHE REWARDED VIDEO";
|
|
Debug.Log($"onRewardedVideoClosed. Finished - {finished}");
|
|
}
|
|
|
|
public void onRewardedVideoFinished(double amount, string name)
|
|
{
|
|
Debug.Log("onRewardedVideoFinished. Reward: " + amount + " " + name);
|
|
}
|
|
|
|
public void onRewardedVideoExpired()
|
|
{
|
|
Debug.Log("onRewardedVideoExpired");
|
|
}
|
|
|
|
public void onRewardedVideoClicked()
|
|
{
|
|
Debug.Log("onRewardedVideoClicked");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Mrec callback handlers
|
|
|
|
public void onMrecLoaded(bool precache)
|
|
{
|
|
Debug.Log($"onMrecLoaded. Precache - {precache}");
|
|
Debug.Log($"getPredictedEcpm(): {Appodeal.getPredictedEcpm(Appodeal.MREC)}");
|
|
}
|
|
|
|
public void onMrecFailedToLoad()
|
|
{
|
|
Debug.Log("onMrecFailedToLoad");
|
|
}
|
|
|
|
public void onMrecShown()
|
|
{
|
|
Debug.Log("onMrecShown");
|
|
}
|
|
|
|
public void onMrecShowFailed()
|
|
{
|
|
Debug.Log("onMrecShowFailed");
|
|
}
|
|
|
|
public void onMrecClicked()
|
|
{
|
|
Debug.Log("onMrecClicked");
|
|
}
|
|
|
|
public void onMrecExpired()
|
|
{
|
|
Debug.Log("onMrecExpired");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IAdRevenueListener implementation
|
|
|
|
public void onAdRevenueReceived(AppodealAdRevenue ad)
|
|
{
|
|
Debug.Log($"[APDUnity] [Callback] onAdRevenueReceived({ad.ToJsonString(true)})");
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|