using System; using System.Collections.Generic; using AnyThinkAds.Api; using Runtime.ADAggregator; using UnityEngine; public class AwardVideoPlayer : ADPlayer , ATRewardedVideoListener { private ATRewardedVideo _atRewardedVideo; private ATRewardedAutoVideo _atRewardedAutoVideo; private Action _onVideoComplete; private ADListenerAggregator _aggregator; private bool _autoLoadRegistered; public override void OnInit() { this._atRewardedVideo = ATRewardedVideo.Instance; this._atRewardedAutoVideo = ATRewardedAutoVideo.Instance; // this._atRewardedVideo.client.setListener(this); //由于新版本广告sdk弃用该方式,通过以下方式重新桥接监听事件 this._aggregator = new ADListenerAggregator(); this._aggregator.BindAwardVideoListener(this._atRewardedVideo.client , this); // var adClient = this._atRewardedVideo.client; // adClient.on } public override void ShowAD(Action onClose, Action onVideoComplete) { if (this.IsReadly()) { this.curState = 0; this._onVideoComplete = onVideoComplete; this.adListener.onClose = onClose; this.adListener.onVideoComplete = this.OnVideoComplete; var json = new Dictionary { { AnyThinkAds.Api.ATConst.SCENARIO, this.AdScene } }; if (UseAutoLoad()) { EnsureAutoLoadRegistered(); this._atRewardedAutoVideo.showAutoAd(this.Key, json); } else { this._atRewardedVideo.showAd(this.Key , json); } } } private void OnVideoComplete(bool obj) { this._onVideoComplete?.Invoke(obj); this._onVideoComplete = null; } public override bool IsReadly() { if (UseAutoLoad()) { if (this._atRewardedAutoVideo != null && this._atRewardedAutoVideo.autoLoadRewardedVideoReadyForPlacementID(this.Key)) { this.curState = 2; return true; } return this.curState == 2; } if (this.curState == 2) { return true; } if (this._atRewardedVideo != null && this._atRewardedVideo.hasAdReady(this.Key)) { this.curState = 2; return true; } return false; } public override void LoadAD() { if (curState == 0) { if (UseAutoLoad()) { EnsureAutoLoadRegistered(); this._atRewardedAutoVideo.setAutoLocalExtra(this.Key, BuildRewardedExtra()); this.curState = this._atRewardedAutoVideo.autoLoadRewardedVideoReadyForPlacementID(this.Key) ? 2 : 1; return; } if (this._atRewardedVideo != null && this._atRewardedVideo.hasAdReady(this.Key)) { this.curState = 2; return; } { Dictionary jsonmap = new Dictionary(); //ATConst.USERID_KEY必传,用于标识每个用户;ATConst.USER_EXTRA_DATA为可选参数,传入后将透传到开发者的服务器 jsonmap = BuildRewardedExtra(); curState = 1; this._atRewardedVideo.loadVideoAd(this.Key, jsonmap); } } } #region SDK public void onRewardedVideoAdLoaded(string placementId) { this.curState = 2; } public void onRewardedVideoAdLoadFail(string placementId, string code, string message) { Debug.LogError($"激励视频加载失败: {message} , code:{code} , placementId: {placementId}"); this.curState = 0; } public void onRewardedVideoAdPlayStart(string placementId, ATCallbackInfo callbackInfo) { } public void onRewardedVideoAdPlayEnd(string placementId, ATCallbackInfo callbackInfo) { } public void onRewardedVideoAdPlayFail(string placementId, string code, string message) { Debug.LogError($"激励视频播放失败: {message} , code:{code} , placementId: {placementId}"); curState = 0; this.adListener.OnShowError(); } public void onRewardedVideoAdPlayClosed(string placementId, bool isReward, ATCallbackInfo callbackInfo) { this.adListener.OnRewardVerify(isReward , 1 , ""); this.adListener.OnAdClose(); } public void onRewardedVideoAdPlayClicked(string placementId, ATCallbackInfo callbackInfo) { } public void onReward(string placementId, ATCallbackInfo callbackInfo) { this.adListener.OnRewardVerify(true , 1 , ""); this.adListener.OnAdClose(); } public void startLoadingADSource(string placementId, ATCallbackInfo callbackInfo) { } public void finishLoadingADSource(string placementId, ATCallbackInfo callbackInfo) { } public void failToLoadADSource(string placementId, ATCallbackInfo callbackInfo, string code, string message) { this.OnError(code , message); } public void startBiddingADSource(string placementId, ATCallbackInfo callbackInfo) { } public void finishBiddingADSource(string placementId, ATCallbackInfo callbackInfo) { } public void failBiddingADSource(string placementId, ATCallbackInfo callbackInfo, string code, string message) { } #endregion public override void OnPlayRequestStarted() { if (UseAutoLoad()) { EnsureAutoLoadRegistered(); this._atRewardedAutoVideo?.setAutoLocalExtra(this.Key, BuildRewardedExtra()); } } public override int MaxLoadAttempts => ToponAdController.CurrentOptions?.RewardedMaxLoadAttempts ?? base.MaxLoadAttempts; public override float LoadRetryDelaySeconds => Math.Max(0f, (ToponAdController.CurrentOptions?.RewardedLoadRetryDelayMs ?? 750) / 1000f); public override bool AutoPreloadOnInit => ToponAdController.CurrentOptions?.RewardedPrewarmOnInit ?? true; private bool UseAutoLoad() { return ToponAdController.CurrentOptions?.RewardedAutoLoad ?? true; } private void EnsureAutoLoadRegistered() { if (_autoLoadRegistered) { return; } this._atRewardedAutoVideo?.addAutoLoadAdPlacementID(new[] { this.Key }); _autoLoadRegistered = true; } private Dictionary BuildRewardedExtra() { return new Dictionary { { ATConst.USERID_KEY, ADManager.Instance.UserId }, { ATConst.USER_EXTRA_DATA, "user_extra_data" } }; } public override void EnterAdScenario(string scenario) { if (string.IsNullOrWhiteSpace(scenario) || string.Equals(scenario, "__default__", StringComparison.Ordinal)) { return; } if (UseAutoLoad()) { EnsureAutoLoadRegistered(); this._atRewardedAutoVideo?.entryAutoAdScenarioWithPlacementID(this.Key, scenario); return; } this._atRewardedVideo?.entryScenarioWithPlacementID(this.Key, scenario); } }