SDK_UnityMoney/Assets/Script/SDKManager/AdsSDKManager/BigoAdsManager/BigoAdsManager.cs

286 lines
10 KiB
C#
Raw Normal View History

2025-08-30 09:24:58 +00:00
using System;
using System.Collections;
using System.Collections.Generic;
using BigoAds.Scripts.Api;
using UnityEngine;
2025-09-01 10:32:50 +00:00
namespace WZ
2025-08-30 09:24:58 +00:00
{
2025-09-02 09:14:49 +00:00
public class BigoAdsManager : D_MonoSingleton<BigoAdsManager>, IAdService
2025-08-30 09:24:58 +00:00
{
public string ClientName => "Bigo";
2025-09-01 07:14:26 +00:00
public PlatformType Platfrom => PlatformType.Bigo;
2025-08-30 09:24:58 +00:00
private BigoRewardedAdManager _rewardedAdManager;
private BigoInterstitialAdManager _interstitialAdManager;
2025-09-01 03:39:21 +00:00
private List<string> _interstitialAdUnits = new List<string>();
private List<string> _rewardedAdUnits = new List<string>();
2025-09-01 12:53:08 +00:00
public string _bigo_app_id;
public bool _initialized { get; private set; } = false;
2025-08-31 05:15:14 +00:00
private string _rvPos;
private string _IvPos;
2025-09-01 14:14:33 +00:00
private Action<bool,double> _rvCloseCallback = null;
private Action<double> _ivCloseCallback = null;
2025-08-31 05:15:14 +00:00
private Action _rvShowFailedCallback = null;
2025-09-01 07:56:42 +00:00
private float _rvStartLoadTime = 0;
private float _ivStartLoadTime = 0;
private bool _receivedReward = false;
2025-09-01 07:56:42 +00:00
2025-08-30 09:24:58 +00:00
public void Initialize()
{
LoggerUtils.Debug("[Bigo] sdk init start" + _bigo_app_id + " rvid:" + _rewardedAdUnits + " ivid:" + _interstitialAdUnits);
if (string.IsNullOrEmpty(_bigo_app_id) || _initialized) return;
2025-08-30 09:24:58 +00:00
BigoAdSdk.OnInitFinish += () =>
{
LoggerUtils.Debug($"[Bigo] sdk init success");
_initialized = true;
2025-09-01 07:56:42 +00:00
LoadRewarded();
LoadInterstitial();
2025-08-30 09:24:58 +00:00
};
2025-08-30 09:24:58 +00:00
var config = new BigoAdConfig.Builder()
2025-09-01 12:53:08 +00:00
.SetAppId(_bigo_app_id)
2025-08-30 09:24:58 +00:00
.SetDebugLog(false)
.Build();
BigoAdSdk.Initialize(config);
}
2025-09-01 12:53:08 +00:00
public void RefreshAdsData()
{
_bigo_app_id = AdConfigParser.GetBigoAppId();
_rewardedAdUnits = AdConfigParser.GetBigoAdUnits(AdsType.Rewarded);
_interstitialAdUnits = AdConfigParser.GetBigoAdUnits(AdsType.Interstitial);
}
#region 广
2025-08-30 09:24:58 +00:00
// 各个回调处理方法
private void OnRewardedAdLoaded(string adUnitId)
{
2025-09-01 14:14:33 +00:00
AdsActionEvents.TrackAdLoaded(Platfrom,ClientName, adUnitId, AdsType.Rewarded,Time.realtimeSinceStartup - _rvStartLoadTime);
2025-08-30 09:24:58 +00:00
}
private void OnRewardedAdLoadFailed(string adUnitId, int code, string msg)
{
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdFailToLoad(Platfrom,ClientName, adUnitId, AdsType.Rewarded,Time.realtimeSinceStartup - _rvStartLoadTime, msg);
2025-08-30 09:24:58 +00:00
}
private void OnRewardedAdShowed(string adUnitId)
{
}
2025-09-01 14:14:33 +00:00
private void OnRewardedAdDismissed(string adUnitId,double revenue)
2025-08-30 09:24:58 +00:00
{
2025-09-01 14:14:33 +00:00
AdsActionEvents.TrackAdClosed(Platfrom,ClientName, adUnitId, AdsType.Rewarded, _rvPos, revenue);
_rvCloseCallback?.Invoke(_receivedReward,revenue);
2025-08-31 05:15:14 +00:00
_rvCloseCallback = null;
_receivedReward = false;
2025-08-30 09:24:58 +00:00
LoadRewarded();
2025-08-31 05:15:14 +00:00
2025-08-30 09:24:58 +00:00
}
private void OnRewardEarnReward(bool reward)
{
_receivedReward = true;
}
2025-08-30 09:24:58 +00:00
private void OnRewardedAdError(string adUnitId, int code, string msg)
{
2025-08-31 05:15:14 +00:00
_rvShowFailedCallback?.Invoke();
_rvShowFailedCallback = null;
LoadRewarded();
2025-08-30 09:24:58 +00:00
}
2025-09-01 14:14:33 +00:00
private void OnRewardedAdClicked(string adUnitId,double revenue)
2025-08-30 09:24:58 +00:00
{
2025-09-01 14:14:33 +00:00
AdsActionEvents.TrackAdClicked(Platfrom,ClientName,adUnitId,AdsType.Rewarded,_rvPos,revenue);
2025-08-30 09:24:58 +00:00
}
public void LoadRewarded()
{
2025-09-01 03:39:21 +00:00
_rewardedAdManager?.Destroy();
2025-09-01 07:56:42 +00:00
if (_rewardedAdUnits.Count > 0)
2025-08-30 09:24:58 +00:00
{
2025-09-01 07:56:42 +00:00
_rewardedAdManager = new BigoRewardedAdManager();
_rewardedAdManager.InitializeAdUnits(
_rewardedAdUnits,
onAdLoaded: OnRewardedAdLoaded,
onAdLoadFailed: OnRewardedAdLoadFailed,
onAdShowed: OnRewardedAdShowed,
onAdDismissed: OnRewardedAdDismissed,
onAdError: OnRewardedAdError,
onAdClicked: OnRewardedAdClicked,
onEarnRewarded: OnRewardEarnReward
2025-09-01 07:56:42 +00:00
);
_rvStartLoadTime = Time.realtimeSinceStartup;
// todo 暂时支持一个广告位,后续支持多个广告位
AdsActionEvents.TrackAdStartLoad(Platfrom,ClientName,_rewardedAdUnits[0], AdsType.Rewarded);
2025-08-30 09:24:58 +00:00
}
}
public bool IsRewardedAvailable()
{
if (!_initialized || _rewardedAdManager == null) return false;
2025-08-30 09:24:58 +00:00
return _rewardedAdManager.GetAvailableAdUnits().Count > 0;
}
2025-09-01 14:14:33 +00:00
public void DisplayRewarded(string adPos, Action<bool,double> rewardCallback = null, Action showFailedCallback = null)
2025-08-30 09:24:58 +00:00
{
2025-08-31 05:15:14 +00:00
_rvPos = adPos;
_rvCloseCallback = rewardCallback;
_rvShowFailedCallback = showFailedCallback;
2025-08-30 09:24:58 +00:00
_rewardedAdManager.ShowHighestPayingAd();
}
public double GetRewardedRevenue()
{
if (!_initialized || _rewardedAdManager == null) return -1;
2025-08-30 09:24:58 +00:00
return _rewardedAdManager.GetHighestPayingAdRevenue();
}
#region 广
2025-08-30 09:24:58 +00:00
private void OnInterstitialAdLoaded(string adUnitId)
{
2025-09-01 14:14:33 +00:00
AdsActionEvents.TrackAdLoaded(Platfrom,ClientName, adUnitId, AdsType.Interstitial,Time.realtimeSinceStartup - _ivStartLoadTime);
2025-08-30 09:24:58 +00:00
}
private void OnInterstitialAdLoadFailed(string adUnitId, int code, string msg)
{
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdFailToLoad(Platfrom,ClientName, adUnitId, AdsType.Interstitial,Time.realtimeSinceStartup - _ivStartLoadTime, msg);
2025-08-30 09:24:58 +00:00
}
private void OnInterstitialAdShowed(string adUnitId)
{
}
2025-09-01 14:14:33 +00:00
private void OnInterstitialAdDismissed(string adUnitId,double revenue)
2025-08-30 09:24:58 +00:00
{
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdClosed(Platfrom,ClientName, adUnitId, AdsType.Interstitial, "", GetInterstitialRevenue());
2025-09-01 14:14:33 +00:00
_ivCloseCallback?.Invoke(revenue);
2025-08-31 05:15:14 +00:00
_ivCloseCallback = null;
2025-08-30 09:24:58 +00:00
LoadInterstitial();
}
private void OnInterstitialAdError(string adUnitId, int code, string msg)
{
2025-09-01 14:14:33 +00:00
_ivCloseCallback?.Invoke(0);
2025-08-31 05:15:14 +00:00
_ivCloseCallback = null;
LoadInterstitial();
2025-08-30 09:24:58 +00:00
}
2025-09-01 07:56:42 +00:00
private void OnInterstitialAdClicked(string adUnitId)
2025-08-30 09:24:58 +00:00
{
2025-09-01 07:56:42 +00:00
AdsActionEvents.TrackAdClicked(Platfrom,ClientName, adUnitId, AdsType.Interstitial, "", GetInterstitialRevenue());
2025-08-30 09:24:58 +00:00
}
public void LoadInterstitial()
{
2025-09-01 03:39:21 +00:00
_interstitialAdManager?.Destroy();
2025-09-01 07:56:42 +00:00
if (_interstitialAdUnits.Count > 0)
2025-08-30 09:24:58 +00:00
{
2025-09-01 07:56:42 +00:00
_interstitialAdManager = new BigoInterstitialAdManager();
_interstitialAdManager.InitializeAdUnits(
_interstitialAdUnits,
onAdLoaded: OnInterstitialAdLoaded,
onAdLoadFailed: OnInterstitialAdLoadFailed,
onAdShowed: OnInterstitialAdShowed,
onAdDismissed: OnInterstitialAdDismissed,
onAdError: OnInterstitialAdError,
onAdClicked: OnInterstitialAdClicked
);
_ivStartLoadTime = Time.realtimeSinceStartup;
// todo 暂时支持一个广告位,后续支持多个广告位
AdsActionEvents.TrackAdStartLoad(Platfrom,ClientName,_interstitialAdUnits[0], AdsType.Interstitial);
2025-08-30 09:24:58 +00:00
}
}
public bool IsInterstitialAvailable()
{
if (!_initialized || _interstitialAdManager == null) return false;
2025-08-30 09:24:58 +00:00
return _interstitialAdManager.GetAvailableAdUnits().Count > 0;
}
2025-09-01 14:14:33 +00:00
public void DisplayInterstitial(string ivPos, IvType _IvType = IvType.IV1, Action<double> closeCallback = null)
2025-08-30 09:24:58 +00:00
{
2025-08-31 05:15:14 +00:00
_IvPos = ivPos;
_ivCloseCallback = closeCallback;
2025-08-30 09:24:58 +00:00
_interstitialAdManager.ShowHighestPayingAd();
}
public double GetInterstitialRevenue()
{
if (!_initialized || _interstitialAdManager == null) return -1;
2025-08-30 09:24:58 +00:00
return _interstitialAdManager.GetHighestPayingAdRevenue();
}
#endregion
#region 广
2025-08-30 09:24:58 +00:00
public void LoadSplash() { }
public bool IsSplashAvailable() { return false; }
public void DisplaySplash() { }
public double GetSplashRevenue() { return 0; }
#endregion
#region 广
public void LoadNative() { }
2025-09-02 02:07:10 +00:00
public bool IsNativeAvailable(string adUnitId)
{
return false;
}
public void DisplayNative(string _adPos, string adUnitId, NativeAdPosition position)
{
}
public void RemoveNative(string adUnitId)
{
}
public double GetNativeRevenue(string adUnitId)
{
return 0;
}
2025-08-30 09:24:58 +00:00
#endregion
#region 广
public void LoadBanner() { }
public bool IsBannerAvailable() { return false; }
public void DisplayBanner() { }
public void HideBanner() { }
public double GetBannerRevenue() { return 0; }
#endregion
#region
public void TrackAdImpression(double revenue, AdsType type, string placement)
{
AdjustTrackEvent.Instance.TrackAdEvent(revenue, ClientName, placement, placement);
FireBaseAnalyticsManager.Instance.OnAdRevenueEvent(ClientName,
ClientName,
placement,
type,
revenue, type == AdsType.Rewarded ? _rvPos : "",
2025-09-04 09:19:05 +00:00
AdPlayCountManager.GetAdsActionCount(type,AdPlayCountManager.PLAY_COUNT_SUFFIX));
ShuShuEvent.Instance.OnAdRevenueEvent(ClientName,
ClientName,
placement,
type.ToString(),
revenue, type == AdsType.Rewarded ? _rvPos : "",
2025-09-04 09:19:05 +00:00
AdPlayCountManager.GetAdsActionCount(type,AdPlayCountManager.PLAY_COUNT_SUFFIX));
}
#endregion
2025-08-30 09:24:58 +00:00
}
#endregion
}