166 lines
5.1 KiB
C#
166 lines
5.1 KiB
C#
using asap.core;
|
|
using GameCore;
|
|
using System;
|
|
using UniRx;
|
|
|
|
namespace game
|
|
{
|
|
public class AdsResult
|
|
{
|
|
public AdvertPopupType Type;
|
|
/// <summary>
|
|
/// //0-成功 1-失败 2 -点击 3-关闭
|
|
/// </summary>
|
|
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<string, MaxSdkBase.AdInfo> onRewardDisplayed;
|
|
private Action<string, MaxSdkBase.AdInfo> onRewardHidden;
|
|
private Action<string, MaxSdkBase.AdInfo> onInterstitialDisplayed;
|
|
private Action<string, MaxSdkBase.AdInfo> 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<OnLvChangeEvent>()
|
|
.Where(evt => evt.lvl >= 40)
|
|
.Subscribe(evt =>
|
|
{
|
|
rewardHandler.TryLoad("level_up");
|
|
interstitialHandler.TryLoad();
|
|
})
|
|
.AddTo(disposables);
|
|
|
|
RootCtx.OnEvent<ExchangeFishCount>()
|
|
.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<ISoundService>();
|
|
ISettingService settingService = GContext.container.Resolve<ISettingService>();
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|