2025-09-15 02:19:03 +00:00
|
|
|
using System;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
2025-09-15 05:58:43 +00:00
|
|
|
using GoogleMobileAds.Common;
|
2025-09-15 02:19:03 +00:00
|
|
|
using JetBrains.Annotations;
|
2025-09-15 05:58:43 +00:00
|
|
|
using KwaiAds.Scripts.Api.Interstitial;
|
2025-09-15 02:19:03 +00:00
|
|
|
using KwaiAds.Scripts.Api.Reward;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using static WZ.KwaiAdsConfigParser;
|
|
|
|
|
|
|
|
|
|
namespace WZ
|
|
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
public class KwaiFloorIvManager : D_MonoSingleton<KwaiFloorIvManager>
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
private int _ivParallelRequests = 3;
|
|
|
|
|
private List<FloorConfig> _ivFloorConfigs = new List<FloorConfig>();
|
|
|
|
|
public Dictionary<string, IInterstitialAdController> _ivFloorAdControllers = new Dictionary<string, IInterstitialAdController>();
|
2025-09-15 02:19:03 +00:00
|
|
|
private List<FloorConfig> _sortedFloors = new List<FloorConfig>();
|
|
|
|
|
private int _currentFloorIndex = 0;
|
|
|
|
|
private bool _isRequestingFloors = false;
|
|
|
|
|
private List<FloorConfig> _currentRequestBatch = new List<FloorConfig>();
|
|
|
|
|
private FloorConfig _successfulFloor = null;
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
public float _ivStartLoadTime = 0;
|
|
|
|
|
|
2025-09-15 02:19:03 +00:00
|
|
|
public void InitializeWithFloors()
|
|
|
|
|
{
|
|
|
|
|
// 对楼层按价格从高到低排序
|
2025-09-15 05:58:43 +00:00
|
|
|
_sortedFloors = _ivFloorConfigs.OrderByDescending(f => f.price).ToList();
|
|
|
|
|
LoggerUtils.Debug("[kwai] floor inter Sorted floors: " + string.Join(", ", _sortedFloors.Select(f => $"{f.id}:{f.price}")));
|
2025-09-15 02:19:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadKwaiBiddingConfig()
|
|
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivParallelRequests = KwaiAdsConfigParser.GetIvParallelRequests();
|
|
|
|
|
_ivFloorConfigs = KwaiAdsConfigParser.GetIvFloorConfigs();
|
|
|
|
|
LoggerUtils.Debug($"[kwai] floor inter bidding config loaded. FloorOpen: {KwaiAdsConfigParser.GetKwaiIvFloorOpen()}, ParallelRequests: {_ivParallelRequests}, Floors: {_ivFloorConfigs.Count}");
|
2025-09-15 02:19:03 +00:00
|
|
|
}
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
public void LoadInterstitialWithFloors()
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
if (_ivFloorConfigs == null || _ivFloorConfigs.Count == 0)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
LoggerUtils.Debug("[kwai] floor inter No floor configs available, using standard load");
|
2025-09-15 02:19:03 +00:00
|
|
|
KwaiAdsManager.Instance.LoadRewardedStandard();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivStartLoadTime = Time.realtimeSinceStartup;
|
2025-09-15 02:19:03 +00:00
|
|
|
// 重置状态
|
|
|
|
|
_currentFloorIndex = 0;
|
|
|
|
|
_successfulFloor = null;
|
|
|
|
|
_isRequestingFloors = true;
|
|
|
|
|
|
|
|
|
|
// 清理之前的广告控制器
|
2025-09-15 05:58:43 +00:00
|
|
|
foreach (var controller in _ivFloorAdControllers.Values)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
controller.Destroy();
|
|
|
|
|
}
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivFloorAdControllers.Clear();
|
2025-09-15 02:19:03 +00:00
|
|
|
|
|
|
|
|
// 开始请求楼层广告
|
|
|
|
|
RequestNextFloorBatch();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RequestNextFloorBatch()
|
|
|
|
|
{
|
|
|
|
|
if (!_isRequestingFloors || _successfulFloor != null) return;
|
|
|
|
|
|
|
|
|
|
// 获取下一批要请求的楼层
|
|
|
|
|
_currentRequestBatch = new List<FloorConfig>();
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
while (_currentFloorIndex < _sortedFloors.Count && count < _ivParallelRequests)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
_currentRequestBatch.Add(_sortedFloors[_currentFloorIndex]);
|
|
|
|
|
_currentFloorIndex++;
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_currentRequestBatch.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
// 所有楼层都请求完毕,没有填充
|
2025-09-15 05:58:43 +00:00
|
|
|
LoggerUtils.Debug("[kwai] floor inter All floors requested, no fill");
|
2025-09-15 02:19:03 +00:00
|
|
|
_isRequestingFloors = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
LoggerUtils.Debug($"[kwai] floor inter Requesting floor batch: {string.Join(", ", _currentRequestBatch.Select(f => $"{f.id}({f.price})"))}");
|
2025-09-15 02:19:03 +00:00
|
|
|
|
|
|
|
|
// 并行请求当前批次的楼层
|
|
|
|
|
foreach (var floor in _currentRequestBatch)
|
|
|
|
|
{
|
|
|
|
|
RequestFloorAd(floor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RequestFloorAd(FloorConfig floor)
|
|
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
IInterstitialAdController controller = KwaiAds.Scripts.Api.KwaiAdsSdk.SDK.getInterstitialAdController();;
|
|
|
|
|
_ivFloorAdControllers[floor.id] = controller;
|
|
|
|
|
|
|
|
|
|
KwaiInterstitialAdRequest kwaiInterstitialAdRequest = new KwaiInterstitialAdRequest(floor.unite_id);
|
|
|
|
|
controller.Load(kwaiInterstitialAdRequest,
|
|
|
|
|
new FloorInterAdListener(this, floor),
|
|
|
|
|
new FloorInterAdLoadListener(this, floor));
|
2025-09-15 02:19:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理楼层广告加载成功
|
2025-09-15 05:58:43 +00:00
|
|
|
public void OnFloorAdLoaded(FloorConfig floor, IInterstitialAdController controller)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
if (!_isRequestingFloors || _successfulFloor != null) return;
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
LoggerUtils.Debug($"[kwai] floor inter Floor ad loaded: {floor.id} with price: {floor.price}");
|
2025-09-15 02:19:03 +00:00
|
|
|
|
|
|
|
|
// 暂停其他并行请求
|
|
|
|
|
_successfulFloor = floor;
|
|
|
|
|
_isRequestingFloors = false;
|
|
|
|
|
|
|
|
|
|
// 取消其他楼层的请求
|
2025-09-15 05:58:43 +00:00
|
|
|
foreach (var kvp in _ivFloorAdControllers)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
if (kvp.Key != floor.id)
|
|
|
|
|
{
|
|
|
|
|
kvp.Value.Destroy();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理楼层广告加载失败
|
|
|
|
|
public void OnFloorAdFailed(FloorConfig floor, string error)
|
|
|
|
|
{
|
|
|
|
|
if (!_isRequestingFloors || _successfulFloor != null) return;
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
LoggerUtils.Debug($"[kwai] floor inter Floor ad failed: {floor.id} with error: {error}");
|
2025-09-15 02:19:03 +00:00
|
|
|
|
|
|
|
|
// 检查当前批次是否全部失败
|
|
|
|
|
bool allFailedInBatch = true;
|
|
|
|
|
foreach (var f in _currentRequestBatch)
|
|
|
|
|
{
|
|
|
|
|
if (f.id == floor.id) continue;
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
if (_ivFloorAdControllers.ContainsKey(f.id) &&
|
|
|
|
|
_ivFloorAdControllers[f.id] != null &&
|
|
|
|
|
_ivFloorAdControllers[f.id].IsReady())
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
allFailedInBatch = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果当前批次全部失败,请求下一批
|
|
|
|
|
if (allFailedInBatch)
|
|
|
|
|
{
|
|
|
|
|
RequestNextFloorBatch();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
public bool IsInterstitialAdAvailable()
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
|
|
|
|
return _successfulFloor != null &&
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivFloorAdControllers.ContainsKey(_successfulFloor.id) &&
|
|
|
|
|
_ivFloorAdControllers[_successfulFloor.id] != null &&
|
|
|
|
|
_ivFloorAdControllers[_successfulFloor.id].IsReady();
|
2025-09-15 02:19:03 +00:00
|
|
|
}
|
|
|
|
|
|
2025-09-15 05:58:43 +00:00
|
|
|
public void ShowInterstitialAd(Action _action)
|
|
|
|
|
{
|
2025-09-15 02:19:03 +00:00
|
|
|
if (_successfulFloor != null &&
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivFloorAdControllers.ContainsKey(_successfulFloor.id) &&
|
|
|
|
|
_ivFloorAdControllers[_successfulFloor.id] != null)
|
2025-09-15 02:19:03 +00:00
|
|
|
{
|
2025-09-15 05:58:43 +00:00
|
|
|
_ivFloorAdControllers[_successfulFloor.id].Show();
|
2025-09-15 02:19:03 +00:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_action?.Invoke();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|