Advertisement
risge3000

Untitled

May 6th, 2024
780
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.58 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Advertisements;
  6. using UnityEngine.Diagnostics;
  7.  
  8. public class AdsManager : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener {
  9.     [SerializeField] string m_androidGameId;
  10.     [SerializeField] string m_iOSGameId;
  11.     [SerializeField] bool m_testMode = true;
  12.     [SerializeField] BannerPosition m_bannerPosition = BannerPosition.TOP_CENTER;
  13.     [SerializeField] float m_bannerDuration;
  14.    
  15.     private string m_gameId;
  16.     string m_intersitialUnitsId;
  17.     string m_bannerUnitsId;
  18.     string m_rewardedUnitsId;
  19.  
  20.     float m_bannerTimer;
  21.     bool m_canDisplayBanner;
  22.  
  23.     public static AdsManager instance;
  24.     public delegate void AdEvents();
  25.     public static AdEvents AdLoaded, AdEnded;
  26.     adType typeOnHold = adType.None;
  27.  
  28.     private void Awake() {
  29.         init();
  30.     }
  31.  
  32.     private void Update() {
  33.         updateTimer();
  34.     }
  35.  
  36.     /// <summary>
  37.     /// inicalizaciones requeridas por el manager
  38.     /// </summary>
  39.     private void init() {
  40.         //referencia singleton
  41.         if (instance != null) {
  42.             Destroy(this);
  43.             return;
  44.         }
  45.         instance = this;
  46.  
  47.         //asignar valores de las Ids dependiendo del sistema operativo
  48. #if UNITY_IOS
  49.         m_gameId = _iOSGameId;
  50.         m_intersitialId = "Interstitial_iOS";
  51.         m_bannerId = "Banner_iOS";
  52.         m_rewardedUnitsId = "Rewarded_iOS";
  53.  
  54. #elif UNITY_ANDROID
  55.         m_gameId = m_androidGameId;
  56.         m_intersitialUnitsId = "Interstitial_Android";
  57.         m_bannerUnitsId = "Banner_android";
  58.         m_rewardedUnitsId = "Rewarded_Android";
  59.  
  60. #elif UNITY_EDITOR
  61.         m_gameId = _androidGameId; //Only for testing the functionality in the Editor
  62.         m_intersitialId = "Interstitial_Android";
  63.         m_bannerId = "Banner_Android";
  64.         m_rewardedUnitsId = "Rewarded_Android";
  65.  
  66. #endif
  67.         //inicializar el servicio de ads
  68.         if (!Advertisement.isInitialized && Advertisement.isSupported) {
  69.             Advertisement.Initialize(m_gameId, m_testMode, this);
  70.         }
  71.  
  72.         //suscribirse a su propio evento de OnLoadedAd
  73.         AdLoaded += onLoadedAd;
  74.  
  75.         //configurar la posición del banner e inicializarlo
  76.         Advertisement.Banner.SetPosition(m_bannerPosition);
  77.         loadAndShowAd(adType.Banner);
  78.     }
  79.  
  80.     /// <summary>
  81.     /// Actualiza el timer del banner y carga otro nuevo de ser necesario
  82.     /// </summary>
  83.     void updateTimer() {
  84.         if (m_bannerTimer > 0 && m_canDisplayBanner)
  85.             m_bannerTimer -= Time.deltaTime;
  86.         else if (m_canDisplayBanner) {
  87.             Advertisement.Banner.Hide();
  88.             Debug.Log("LoadingNewAd");
  89.             loadBanner();
  90.         }
  91.     }
  92.  
  93.     /// <summary>
  94.     /// cosas para hacer de a cuerdo a la ad cargada
  95.     /// </summary>
  96.     void onLoadedAd() {
  97.  
  98.         switch (typeOnHold) {
  99.             case adType.Intersitial:
  100.                 showIntersitialAd();
  101.                 break;
  102.  
  103.             case adType.Rewarded:
  104.                 Debug.Log("Show rewarded ad");
  105.                 showRewardedAd();
  106.                 break;
  107.  
  108.             case adType.IntersitialRewarded:
  109.  
  110.                 break;
  111.  
  112.             default:
  113.                 Debug.LogError($"Non Valid ad type!!!");
  114.                 break;
  115.         }
  116.         typeOnHold = adType.None;
  117.     }
  118.  
  119.  
  120.  
  121.     #region Intersitial
  122.     /// <summary>
  123.     /// Carga en memoria la nueva ad de tipo intersicial
  124.     /// </summary>
  125.     void loadIntersitialAd() {
  126.         // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).
  127.         Debug.Log("Loading Ad: " + m_intersitialUnitsId);
  128.         Advertisement.Load(m_intersitialUnitsId, this);
  129.     }
  130.  
  131.     /// <summary>
  132.     /// muestra la ad de tipo intersicial
  133.     /// </summary>
  134.     void showIntersitialAd() {
  135.         Advertisement.Show(m_intersitialUnitsId, this);
  136.     }
  137.     #endregion
  138.  
  139.     #region Rewarded
  140.     /// <summary>
  141.     /// Carga en memoria la nueva ad de tipo Rewarded
  142.     /// </summary>
  143.     void loadRewardedAd() {
  144.         Debug.Log("Load rewarded ad");
  145.         Advertisement.Load(m_rewardedUnitsId, this);
  146.     }
  147.  
  148.     /// <summary>
  149.     /// muestra la ad de tipo Rewarded
  150.     /// </summary>
  151.     void showRewardedAd() {
  152.         Advertisement.Show(m_rewardedUnitsId, this);
  153.     }
  154.     #endregion
  155.  
  156.     #region IntersitialRewarded
  157.     #endregion
  158.  
  159.  
  160.     #region Banner
  161.     /// <summary>
  162.     /// carga el nuevo banner en memoria
  163.     /// </summary>
  164.     void loadBanner() {
  165.         // Set up options to notify the SDK of load events:
  166.         BannerLoadOptions options = new BannerLoadOptions {
  167.             loadCallback = onBannerLoaded,
  168.             errorCallback = onBannerError
  169.         };
  170.  
  171.         // Load the Ad Unit with banner content:
  172.         Advertisement.Banner.Load(m_bannerUnitsId, options);
  173.  
  174.         //Muestra el banner tras haberse cargado completamente
  175.         void onBannerLoaded() {
  176.             Debug.Log("Banner loaded");
  177.             m_bannerTimer = m_bannerDuration;
  178.             showBannerAd();
  179.         }
  180.  
  181.         // Implement code to execute when the load errorCallback event triggers:
  182.         void onBannerError(string message) {
  183.         }
  184.     }
  185.  
  186.     /// <summary>
  187.     /// Muestra el banner precargado
  188.     /// </summary>
  189.     void showBannerAd() {
  190.         // Set up options to notify the SDK of show events:
  191.         BannerOptions options = new BannerOptions {
  192.             clickCallback = onBannerClicked,
  193.             hideCallback = onBannerHidden,
  194.             showCallback = onBannerShown
  195.         };
  196.  
  197.         // Show the loaded Banner Ad Unit:
  198.         Advertisement.Banner.Show(m_bannerUnitsId, options);
  199.  
  200.         void onBannerClicked() { }
  201.         void onBannerShown() { }
  202.         void onBannerHidden() { }
  203.     }
  204.  
  205.     /// <summary>
  206.     /// Forxa el AdsManager a ocultar el banner actual
  207.     /// </summary>
  208.     public void forceHideBannerAd() {
  209.         // Hide the banner:
  210.         Advertisement.Banner.Hide();
  211.         m_bannerTimer = 0;
  212.         m_canDisplayBanner = false;
  213.     }
  214.     #endregion
  215.  
  216.     #region AdsInterfaces
  217.     //NOTA: NO RENOMBRAR A LA NOMENCLATURA DEL ESTUDIO. Son funciones requeridas por la API de Unity al heredar de las clases de ads, por más que poco o nada las usemos
  218.     public void OnUnityAdsAdLoaded(string adUnitId) {
  219.         if(adUnitId != m_bannerUnitsId) {
  220.             AdLoaded?.Invoke();
  221.         }
  222.     }
  223.  
  224.     public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message) {
  225.         // Optionally execute code if the Ad Unit fails to load, such as attempting to try again.
  226.     }
  227.  
  228.     public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message) {
  229.         // Optionally execute code if the Ad Unit fails to show, such as loading another ad.
  230.     }
  231.  
  232.     public void OnUnityAdsShowStart(string _adUnitId) { }
  233.     public void OnUnityAdsShowClick(string _adUnitId) { }
  234.     public void OnUnityAdsShowComplete(string _adUnitId, UnityAdsShowCompletionState showCompletionState) {  
  235.         AdEnded?.Invoke();
  236.         if (_adUnitId.Equals(m_rewardedUnitsId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED)) {
  237.             Debug.Log("Unity Ads Rewarded Ad Completed");
  238.             //CARPI Aquí va lo de las rewards
  239.         }
  240.  
  241.     }
  242.  
  243.     public void OnInitializationComplete() {
  244.         Debug.Log("Unity Ads initialization complete.");
  245.     }
  246.  
  247.     public void OnInitializationFailed(UnityAdsInitializationError error, string message) {
  248.        
  249.     }
  250.     #endregion
  251.  
  252.     #region Shortcuts
  253.     /// <summary>
  254.     /// Función que automatiza el cargado y mostrado de los tipos de publicidad
  255.     /// </summary>
  256.     /// <param name="type"></param>
  257.     void loadAndShowAd(adType type) {
  258.         switch (type) {
  259.             case adType.Intersitial:
  260.                 typeOnHold = adType.Intersitial;
  261.                 loadIntersitialAd();
  262.                 break;
  263.  
  264.             case adType.Rewarded:
  265.                 typeOnHold = adType.Rewarded;
  266.                 loadRewardedAd();
  267.                 break;
  268.  
  269.             case adType.IntersitialRewarded:
  270.                 /*typeOnHold = adType.IntersitialRewarded;
  271.                 loadIntersitialRewarded();*/
  272.                 break;
  273.             case adType.Banner:
  274.                 m_canDisplayBanner = true;
  275.                 loadBanner();
  276.                 break;
  277.  
  278.             default:
  279.                 Debug.LogError($"Non Valid ad type!!!");
  280.                 break;
  281.  
  282.  
  283.         }
  284.     }
  285.  
  286.     /// <summary>
  287.     /// Carga y muestra una ad del tipo intersitial
  288.     /// </summary>
  289.     public void loadAndShowIntersitialAd() {
  290.         loadAndShowAd(adType.Intersitial);
  291.     }
  292.  
  293.     /// <summary>
  294.     /// Carga y muestra una ad del tipo rewarded
  295.     /// </summary>
  296.     public void loadAndShowRewarded() {
  297.         loadAndShowAd(adType.Rewarded);
  298.     }
  299.  
  300.     /// <summary>
  301.     /// [DESHABILITADA] Carga y muestra una ad Intersitial con reward.
  302.     /// </summary>
  303.     public void loadandshowIntersitialRewarded() {
  304.         loadAndShowAd(adType.IntersitialRewarded);
  305.  
  306.     }
  307.  
  308.     /// <summary>
  309.     /// carga y muestra un banner
  310.     /// </summary>
  311.     public void loadandShowBanner() {
  312.         loadAndShowAd(adType.Banner);
  313.     }
  314.  
  315.    
  316.     #endregion
  317.  
  318.     /// <summary>
  319.     /// Tipos de Ad
  320.     /// </summary>
  321.     [Serializable]
  322.     public enum adType {
  323.         None,
  324.         Intersitial,
  325.         Rewarded,
  326.         IntersitialRewarded,
  327.         Banner
  328.     }
  329.    
  330. }
  331.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement