using asap.core; using GameCore; using System; using UniRx; namespace game { public class AdsResult { public AdvertPopupType Type; /// /// //0-成功 1-失败 2 -点击 3-关闭 /// public int Result; } public class AdsInterstitialResult { public AdvertPopupType Type; } public enum AdvertPopupType { None = 0, Shop = 1, Turntable = 2, Showdown = 3, FishingFail = 4, Chest = 5, Aquarium = 6, AdWheel = 7, LuckyMission = 8, Cycle2 = 9, SignInAdvert = 10, } public class AggAdsService : IAdsService { #if UNITY_IOS private static string AD_Unit_ID = "ec3c8fd688cdb5e2"; private static string AD_Unit_ID_Inter = "00442f7962682a80"; #else private static string AD_Unit_ID = "c6c49a100de8496c"; private static string AD_Unit_ID_Inter = "0dcd37fa0885aa1f"; #endif private static bool isMaxSdkInitialized = false; private readonly RewardAdHandler rewardHandler; private readonly InterstitialAdHandler interstitialHandler; private readonly ISettingService settings; private CompositeDisposable disposables; private Action onRewardDisplayed; private Action onRewardHidden; private Action onInterstitialDisplayed; private Action onInterstitialHidden; public AggAdsService(ISettingService settings) { this.settings = settings; rewardHandler = new RewardAdHandler(AD_Unit_ID); interstitialHandler = new InterstitialAdHandler(AD_Unit_ID_Inter); } public void Init() { AdsEventLogger.CheckAndLogCrash(); if (!isMaxSdkInitialized) { rewardHandler.RegisterCallbacks(); interstitialHandler.RegisterCallbacks(); onRewardDisplayed = (id, info) => ChangeAudio(true); onRewardHidden = (id, info) => ChangeAudio(false); onInterstitialDisplayed = (id, info) => ChangeAudio(true); onInterstitialHidden = (id, info) => ChangeAudio(false); MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += onRewardDisplayed; MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += onRewardHidden; MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += onInterstitialDisplayed; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += onInterstitialHidden; isMaxSdkInitialized = true; } disposables?.Dispose(); disposables = new CompositeDisposable(); RootCtx.OnEvent() .Where(evt => evt.lvl >= 40) .Subscribe(evt => { rewardHandler.TryLoad("level_up"); interstitialHandler.TryLoad(); }) .AddTo(disposables); RootCtx.OnEvent() .Where(evt => evt.FishCount >= 17) .Subscribe(evt => { rewardHandler.TryLoad("fish_exchange"); interstitialHandler.TryLoad(); }) .AddTo(disposables); // Check current state on Init // rewardHandler.TryLoad("init"); // interstitialHandler.TryLoad(); } public void Release() { disposables?.Dispose(); disposables = null; rewardHandler.UnregisterCallbacks(); interstitialHandler.UnregisterCallbacks(); if (onRewardDisplayed != null) { MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent -= onRewardDisplayed; MaxSdkCallbacks.Rewarded.OnAdHiddenEvent -= onRewardHidden; MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent -= onInterstitialDisplayed; MaxSdkCallbacks.Interstitial.OnAdHiddenEvent -= onInterstitialHidden; } isMaxSdkInitialized = false; } public void ShowRewarded(AdvertPopupType advertPopupType) { rewardHandler.Show(advertPopupType); } public void ShowInterstitial(AdvertPopupType advertPopupType) { interstitialHandler.Show(advertPopupType); } private void ChangeAudio(bool adShowing) { ISoundService soundService = GContext.container.Resolve(); ISettingService settingService = GContext.container.Resolve(); int vol = adShowing ? 0 : 80; if (soundService != null && settingService != null) { if (settingService.Music) { soundService.BGMVol = vol; } if (settingService.Sound) { soundService.SFXVol = vol; soundService.VoiceVol = vol; } } } } }