max 支持多广告位

This commit is contained in:
juncong lee 2025-09-10 20:23:01 +08:00
parent 926512a0f4
commit 2f1cec696b
37 changed files with 381 additions and 184 deletions

View File

@ -1,13 +1,9 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-analytics-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies>
</dependencies>
<packaging>srcaar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,13 +1,9 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-app-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies>
</dependencies>
<packaging>srcaar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,13 +1,9 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-config-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies>
</dependencies>
<packaging>srcaar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,13 +1,9 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-crashlytics-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies>
</dependencies>
<packaging>srcaar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,13 +1,9 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-messaging-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies>
</dependencies>
<packaging>srcaar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 1d943c0af46c60a429184f04c942cde9
guid: a7af485f0f21a4a1189272bf030ae253
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-analytics-unity</artifactId>
<version>13.1.0</version>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 62b6226f5d750d64d8ab67f6984cfb86
guid: bf0f1b11fd2ce4aa58931cd5050c1c72
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-app-unity</artifactId>
<version>13.1.0</version>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 00c3d74a6d7f1794fb433ee61f47277d
guid: a07e37a2cb06b4a728a11c36cad75a03
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-config-unity</artifactId>
<version>13.1.0</version>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies></dependencies>
</project>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cd400106ae8eebe45883723eed04020a
guid: 5b8e123189e6d42f9b245ac827f802ed
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-crashlytics-unity</artifactId>
<version>13.1.0</version>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies></dependencies>
</project>

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: daa4f175043514243b5339219f52759f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6434fb1d1fe5a46f096e64740e2e9b2d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,34 @@
fileFormatVersion: 2
guid: a6af306148f9b410b9ff094d5925e32a
labels:
- gpsr
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Android: Android
second:
enabled: 0
settings: {}
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \&#xD;&#xA;http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-messaging-unity</artifactId>
<version>13.2.0</version>
<packaging>aar</packaging>
<dependencies></dependencies>
</project>

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 6d8ada791b0fa464a9258f5b077d9458
labels:
- gpsr
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -5,6 +5,7 @@ using System.IO;
using System.Security.Cryptography;
using System.Text;
using Google.MiniJSON;
using Unity.VisualScripting.Dependencies.NCalc;
using UnityEngine;
namespace WZ
@ -114,56 +115,72 @@ namespace WZ
for (int i = 0; i < _configs.Length; i++)
{
string valueTemp = _configs[i].Value.ToString();
//LoggerUtils.Debug("[FileParse] ParseConfigsInner key" + _configs[i].Key + "value:" + valueTemp);
LoggerUtils.Debug("[FileParse] ParseConfigsInner key" + _configs[i].Key + "value:" + valueTemp);
if (_configs[i].Key.ToLower() == KEY_Admob_CollapsibleBannerId.ToLower())
{
StaticValue.AdmobCollapsibleBannerId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_NormalBannerId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_NormalBannerId.ToLower())
{
StaticValue.AdmobNormalBannerId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_SplashId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_SplashId.ToLower())
{
StaticValue.AdmobSplashId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_NativeId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_NativeId.ToLower())
{
StaticValue.AdmobNativeId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_SMALL_NativeId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_SMALL_NativeId.ToLower())
{
StaticValue.AdmobSmallNativeId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_MINDDLE_NativeId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_MINDDLE_NativeId.ToLower())
{
StaticValue.AdmobMinddleNativeId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_FULL_NativeId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_FULL_NativeId.ToLower())
{
StaticValue.AdmobFullNativeId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_RewardId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_RewardId.ToLower())
{
StaticValue.AdmobRewardId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Admob_InterId.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Admob_InterId.ToLower())
{
StaticValue.AdmobInterId = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_PRIVACY_URL.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_PRIVACY_URL.ToLower())
{
StaticValue.PrivacyUrl = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_ADJUST_ID.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_ADJUST_ID.ToLower())
{
StaticValue.AdjustToken = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Max_APPKEY.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Max_APPKEY.ToLower())
{
StaticValue.ApplovinKey = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_THINKDATA_ID.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_THINKDATA_ID.ToLower())
{
StaticValue.TDAppID = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_THINKDATA_SS_URL.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_THINKDATA_SS_URL.ToLower())
{
StaticValue.TDServerURL = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Max_Inter.ToLower())
}
else if (_configs[i].Key.ToLower() == KEY_Max_Inter.ToLower())
{
StaticValue.InterAdUnitID = valueTemp;
}else if (_configs[i].Key.ToLower() == KEY_Max_Reward.ToLower())
StaticValue.MaxInterAdUnitID = valueTemp;
}
else if (_configs[i].Key.ToLower() == KEY_Max_Reward.ToLower())
{
StaticValue.RewardAdUnitID = valueTemp;
StaticValue.MaxRewardAdUnitID = valueTemp;
}
else if (_configs[i].Key.ToLower() == KEY_TopOn_AppId.ToLower())
{
@ -183,6 +200,14 @@ namespace WZ
{
StaticValue.TopOnRewardAdUnitID = valueTemp;
}
else if (_configs[i].Key.ToLower() == Key_Max_SpareInter.ToLower())
{
StaticValue.MaxSparespareInterAdUnitID = valueTemp;
}
else if (_configs[i].Key.ToLower() == Key_Max_SpareReward.ToLower())
{
StaticValue.MaxSparespareRewardAdUnitID = valueTemp;
}
}
}
@ -318,6 +343,8 @@ namespace WZ
public const string KEY_Max_APPKEY = "ad_appkey";
public const string KEY_Max_Inter = "ad_interstital_id";
public const string KEY_Max_Reward = "ad_reward_id";
public const string Key_Max_SpareInter = "SpareInterAdUnitID";
public const string Key_Max_SpareReward = "SpareRewardAdUnitId";
public struct PlayerPrefPair
{

View File

@ -41,9 +41,11 @@ namespace WZ
public static string TDServerURL = "https://data.tapvicogames.com";
// max
public static string InterAdUnitID = "";
public static string MaxInterAdUnitID = "";
public static string RewardAdUnitID = "";
public static string MaxRewardAdUnitID = "";
public static string MaxSparespareInterAdUnitID = "";
public static string MaxSparespareRewardAdUnitID = "";
}
}

View File

@ -13,14 +13,18 @@ namespace WZ
public string ClientName => "AppLovin";
public PlatformType Platfrom => PlatformType.AppLovin;
private string _max_app_key;
private string _max_interstitial_units;
private string _max_rewarded_units;
private MaxSdkBase.AdInfo _interAdInfo;
private MaxSdkBase.AdInfo _rewardAdInfo;
private int _rewardRetryAttempt;
private int _interRetryAttempt;
private float _rvStartLoadTime = 0;
private float _ivStartLoadTime = 0;
// 广告单元ID字典支持多个广告位
private List<string> _maxInterstitialUnits = new List<string>();
private List<string> _maxRewardedUnits = new List<string>();
// 广告信息字典,按广告位存储
private Dictionary<string, MaxSdkBase.AdInfo> _interAdInfos = new Dictionary<string, MaxSdkBase.AdInfo>();
private Dictionary<string, MaxSdkBase.AdInfo> _rewardAdInfos = new Dictionary<string, MaxSdkBase.AdInfo>();
// 重试次数字典,按广告位存储
private Dictionary<string, int> _rewardRetryAttempts = new Dictionary<string, int>();
private Dictionary<string, int> _interRetryAttempts = new Dictionary<string, int>();
// 加载时间字典,按广告位存储
private Dictionary<string, float> _rvStartLoadTimes = new Dictionary<string, float>();
private Dictionary<string, float> _ivStartLoadTimes = new Dictionary<string, float>();
private string _rvPos;
private string _ivPos;
private Action<bool,double> _rvCloseCallback = null;
@ -31,11 +35,13 @@ namespace WZ
public void Initialize()
{
_max_app_key = AdConfigParser.GetMaxAppKey();
if (string.IsNullOrEmpty(_max_app_key) || _initialized) return;
LoggerUtils.Debug("[Max] init max");
// 关闭反转debug面板
MaxSdk.SetCreativeDebuggerEnabled(false);
_maxInterstitialUnits = AdConfigParser.GetMaxAdUnits(AdsType.Interstitial);
_maxRewardedUnits = AdConfigParser.GetMaxAdUnits(AdsType.Rewarded);
InitRewardedCallback();
InitInterstitialCallback();
@ -47,6 +53,7 @@ namespace WZ
MaxSdk.SetVerboseLogging(false);
MaxSdk.SetSdkKey(_max_app_key);
MaxSdk.InitializeSdk();
LoadRewarded();
LoadInterstitial();
_initialized = true;
@ -55,14 +62,13 @@ namespace WZ
public void RefreshAdsData()
{
_max_app_key = AdConfigParser.GetMaxAppKey();
_max_interstitial_units = AdConfigParser.GetMaxAdUnits(AdsType.Interstitial).FirstOrDefault();
_max_rewarded_units = AdConfigParser.GetMaxAdUnits(AdsType.Rewarded).FirstOrDefault();
_maxInterstitialUnits = AdConfigParser.GetMaxAdUnits(AdsType.Interstitial);
_maxRewardedUnits = AdConfigParser.GetMaxAdUnits(AdsType.Rewarded);
}
#region 广
private void InitRewardedCallback()
{
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdLoadFailedEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent;
@ -73,36 +79,117 @@ namespace WZ
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
}
public void LoadRewarded()
{
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
MaxSdk.LoadRewardedAd(_max_rewarded_units);
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Rewarded);
_rvStartLoadTime = Time.realtimeSinceStartup;
foreach (var kvp in _maxRewardedUnits)
{
LoggerUtils.Debug("[MAX] start load rewarded ad unit: "+kvp);
LoadRewarded(kvp);
}
}
public void DisplayRewarded(string adPos, Action<bool,double> rewardCallback = null, Action showFailedCallback = null)
private void LoadRewarded(string adUnitId)
{
if (!_maxRewardedUnits.Contains(adUnitId)) return;
if (string.IsNullOrEmpty(adUnitId)) return;
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Rewarded);
MaxSdk.LoadRewardedAd(adUnitId);
_rvStartLoadTimes[adUnitId] = Time.realtimeSinceStartup;
// 初始化重试次数
if (!_rewardRetryAttempts.ContainsKey(adUnitId))
{
_rewardRetryAttempts[adUnitId] = 0;
}
}
public void DisplayRewarded(string adPos, Action<bool, double> rewardCallback = null, Action showFailedCallback = null)
{
_rvPos = adPos;
_rvCloseCallback = rewardCallback;
_rvShowFailedCallback = showFailedCallback;
MaxSdk.ShowRewardedAd(_max_rewarded_units);
MaxSdk.ShowRewardedAd(GetHighestPayingAdUnit(AdsType.Rewarded));
}
public double GetRewardedRevenue()
{
if (IsRewardedAvailable() && _rewardAdInfo != null)
return GetHighestPayingAdRevenue(AdsType.Rewarded);
}
private double GetHighestPayingAdRevenue(AdsType adsType)
{
var highestPayingAdUnit = GetHighestPayingAdUnit(adsType);
if (highestPayingAdUnit != null)
{
return _rewardAdInfo.Revenue;
if (adsType == AdsType.Rewarded)
{
if (!_rewardAdInfos.TryGetValue(highestPayingAdUnit, out var adInfo))
{
return -1;
}
return adInfo.Revenue;
}
else
{
if (!_interAdInfos.TryGetValue(highestPayingAdUnit, out var adInfo))
{
return -1;
}
return adInfo.Revenue;
}
}
else
return -1;
}
public string GetHighestPayingAdUnit(AdsType adsType)
{
string highestPayingAdUnit = null;
double highestRevenue = -1;
foreach (var kvp in adsType == AdsType.Rewarded ? _rewardAdInfos : _interAdInfos)
{
return -1;
var adUnitId = kvp.Key;
var revenue = kvp.Value.Revenue;
if (IsAdsAvailable(adUnitId,adsType) && revenue > highestRevenue)
{
highestRevenue = revenue;
highestPayingAdUnit = adUnitId;
}
}
return highestPayingAdUnit;
}
public bool IsRewardedAvailable()
{
return string.IsNullOrEmpty(_max_rewarded_units) ? false : MaxSdk.IsRewardedAdReady(_max_rewarded_units); ;
List<string> availableAdUnits = new List<string>();
foreach (var kvp in _maxRewardedUnits)
{
if (IsAdsAvailable(kvp, AdsType.Rewarded))
{
availableAdUnits.Add(kvp);
}
}
return availableAdUnits.Count > 0;
}
private bool IsAdsAvailable(string adUnit, AdsType adsType)
{
if (adsType == AdsType.Rewarded)
{
if (!_maxRewardedUnits.Contains(adUnit)) return false;
return MaxSdk.IsRewardedAdReady(adUnit);
}
else
{
if (!_maxInterstitialUnits.Contains(adUnit)) return false;
return MaxSdk.IsInterstitialReady(adUnit);
}
}
private void OnRewardedRevenue(string adunit, MaxSdkBase.AdInfo adInfo)
@ -115,21 +202,21 @@ namespace WZ
{
LoggerUtils.Debug("[Max] OnRewardedAdLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Rewarded);
_rewardAdInfo = adInfo;
_rewardRetryAttempt = 0;
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime);
_rewardAdInfos.TryAdd(adunit, adInfo);
_rewardRetryAttempts.TryAdd(adunit, 0);
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Rewarded, Time.realtimeSinceStartup - (_rvStartLoadTimes.TryGetValue(adunit, out var time) ? time : 0));
}
private void OnRewardedAdLoadFailedEvent(string adunit, MaxSdkBase.ErrorInfo errorInfo)
{
LoggerUtils.Debug("[Max] OnRewardedAdLoadFailedEvent errorInfo" + errorInfo.Message);
_rewardRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, _rewardRetryAttempt));
TimerUtils.Instance.DelayExecute((float)retryDelay, LoadRewarded);
AdsActionEvents.TrackAdFailToLoad(Platfrom, "", "", AdsType.Rewarded, Time.realtimeSinceStartup - _rvStartLoadTime, errorInfo.Message);
if (!_rewardRetryAttempts.TryAdd(adunit, 0))
{
_rewardRetryAttempts[adunit]++;
}
double retryDelay = Math.Pow(2, Math.Min(6, _rewardRetryAttempts[adunit]));
TimerUtils.Instance.DelayExecute((float)retryDelay, () => LoadRewarded(adunit));
AdsActionEvents.TrackAdFailToLoad(Platfrom, "", "", AdsType.Rewarded, Time.realtimeSinceStartup - (_rvStartLoadTimes.TryGetValue(adunit, out var time) ? time : 0), errorInfo.Message);
}
private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo info)
@ -141,7 +228,6 @@ namespace WZ
{
LoggerUtils.Debug("[Max] OnRewardedAdClickedEvent");
AdsActionEvents.TrackAdClicked(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Rewarded,_rvPos,adInfo.Revenue);
}
private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
@ -149,7 +235,8 @@ namespace WZ
LoggerUtils.Debug("[Max] OnRewardedAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode);
_rvShowFailedCallback?.Invoke();
_rvShowFailedCallback = null;
LoadRewarded();
if(_rewardAdInfos.ContainsKey(adUnitId))_rewardAdInfos.Remove(adUnitId);
LoadRewarded(adUnitId);
}
private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
@ -157,7 +244,8 @@ namespace WZ
_rvCloseCallback?.Invoke(_receivedReward,adInfo.Revenue);
_rvCloseCallback = null;
_receivedReward = false;
LoadRewarded();
if(_rewardAdInfos.ContainsKey(adUnitId))_rewardAdInfos.Remove(adUnitId);
LoadRewarded(adUnitId);
LoggerUtils.Debug("[Max] OnRewardedAdHiddenEvent "+_receivedReward);
AdsActionEvents.TrackAdClosed(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Rewarded,_rvPos,adInfo.Revenue);
}
@ -168,17 +256,11 @@ namespace WZ
_receivedReward = true;
}
private void RewardCallback()
{
}
#endregion
#region 广
private void InitInterstitialCallback()
{
if (string.IsNullOrEmpty(_max_interstitial_units)) return;
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialAdFailedToDisplayEvent;
@ -190,52 +272,78 @@ namespace WZ
public void LoadInterstitial()
{
if (string.IsNullOrEmpty(_max_rewarded_units)) return;
MaxSdk.LoadInterstitial(_max_interstitial_units);
foreach (var kvp in _maxInterstitialUnits)
{
LoggerUtils.Debug("[MAX] start load inter ad unit: "+kvp);
LoadInterstitial(kvp);
}
}
public void LoadInterstitial(string adUnit)
{
if (!_maxInterstitialUnits.Contains(adUnit)) return;
if (string.IsNullOrEmpty(adUnit)) return;
MaxSdk.LoadInterstitial(adUnit);
AdsActionEvents.TrackAdStartLoad(Platfrom, "", "", AdsType.Interstitial);
_ivStartLoadTime = Time.realtimeSinceStartup;
_ivStartLoadTimes[adUnit] = Time.realtimeSinceStartup;
// 初始化重试次数
if (!_interRetryAttempts.ContainsKey(adUnit))
{
_interRetryAttempts[adUnit] = 0;
}
}
public double GetInterstitialRevenue()
{
if (IsInterstitialAvailable() && _interAdInfo != null)
{
return _interAdInfo.Revenue;
}
else
{
return -1;
}
return GetHighestPayingAdRevenue(AdsType.Interstitial);
}
public void DisplayInterstitial(string ivPos, IvType _IvType = IvType.IV1, Action<double> closeCallback = null)
{
_ivPos = ivPos;
_ivCloseCallback = closeCallback;
MaxSdk.ShowInterstitial(_max_interstitial_units);
MaxSdk.ShowInterstitial(GetHighestPayingAdUnit(AdsType.Interstitial));
}
public bool IsInterstitialAvailable()
{
return string.IsNullOrEmpty(_max_interstitial_units) ? false : MaxSdk.IsInterstitialReady(_max_interstitial_units);
List<string> availableAdUnits = new List<string>();
foreach (var kvp in _maxInterstitialUnits)
{
if (IsInterstitialAvailable(kvp))
{
availableAdUnits.Add(kvp);
}
}
return availableAdUnits.Count > 0;
}
public bool IsInterstitialAvailable(string adUnit)
{
return IsAdsAvailable(adUnit,AdsType.Interstitial);
}
private void OnInterstitialLoadedEvent(string adunit, MaxSdkBase.AdInfo adInfo)
{
LoggerUtils.Debug("[Max] OnInterstitialLoadedEvent network: " + adInfo.NetworkName + " revenue: " + adInfo.Revenue + " NetworkPlacement: " + adInfo.NetworkPlacement + " AdUnitIdentifier: " + adInfo.AdUnitIdentifier + " Placement: " + adInfo.Placement);
AdsKeyEvents.Instance.LogAdFPUEvents(AdsType.Interstitial);
_interAdInfo = adInfo;
_interRetryAttempt = 0;
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Interstitial, Time.realtimeSinceStartup - _ivStartLoadTime);
_interRetryAttempts.TryAdd(adunit, 0);
_interAdInfos.TryAdd(adunit, adInfo);
AdsActionEvents.TrackAdLoaded(Platfrom, adInfo.NetworkName, adInfo.AdUnitIdentifier, AdsType.Interstitial, Time.realtimeSinceStartup - (_ivStartLoadTimes.TryGetValue(adunit, out var time) ? time : 0));
}
private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
LoggerUtils.Debug("[Max] OnInterstitialLoadFailedEvent :" + errorInfo);
_interRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, _interRetryAttempt));
TimerUtils.Instance.DelayExecute((float)retryDelay, LoadInterstitial);
AdsActionEvents.TrackAdFailToLoad(Platfrom, "","",AdsType.Interstitial,Time.realtimeSinceStartup - _ivStartLoadTime,errorInfo.Message);
if (!_interRetryAttempts.TryAdd(adUnitId, 0))
{
_interRetryAttempts[adUnitId]++;
}
double retryDelay = Math.Pow(2, Math.Min(6, _interRetryAttempts[adUnitId]));
TimerUtils.Instance.DelayExecute((float)retryDelay, () => LoadInterstitial(adUnitId));
AdsActionEvents.TrackAdFailToLoad(Platfrom, "", "", AdsType.Interstitial, Time.realtimeSinceStartup - (_ivStartLoadTimes.TryGetValue(adUnitId, out var time) ? time : 0), errorInfo.Message);
}
private void OnInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo arg3)
@ -243,7 +351,8 @@ namespace WZ
LoggerUtils.Debug("[Max] OnInterstitialAdFailedToDisplayEvent :" + errorInfo.Message + " " + errorInfo.Code + " " + errorInfo.MediatedNetworkErrorMessage + " " + errorInfo.MediatedNetworkErrorCode);
_ivCloseCallback?.Invoke(0);
_ivCloseCallback = null;
LoadInterstitial();
if(_interAdInfos.ContainsKey(adUnitId))_interAdInfos.Remove(adUnitId);
LoadInterstitial(adUnitId);
}
private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo info)
@ -258,7 +367,8 @@ namespace WZ
AdsActionEvents.TrackAdClosed(Platfrom,adInfo.NetworkName,adInfo.AdUnitIdentifier,AdsType.Interstitial, _ivPos,adInfo.Revenue);
_ivCloseCallback?.Invoke(adInfo.Revenue);
_ivCloseCallback = null;
LoadInterstitial();
if(_interAdInfos.ContainsKey(adUnitId))_interAdInfos.Remove(adUnitId);
LoadInterstitial(adUnitId);
}
private void OnInterstitialRevenue(string adunit, MaxSdkBase.AdInfo adInfo)

View File

@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json;
using Unity.VisualScripting;
using UnityEngine;
namespace WZ
@ -171,8 +172,8 @@ namespace WZ
{
return adType switch
{
AdsType.Interstitial => new List<string> { StaticValue.InterAdUnitID },
AdsType.Rewarded => new List<string> { StaticValue.RewardAdUnitID },
AdsType.Interstitial => new List<string> { StaticValue.MaxInterAdUnitID,StaticValue.MaxSparespareInterAdUnitID },
AdsType.Rewarded => new List<string> { StaticValue.MaxRewardAdUnitID,StaticValue.MaxSparespareRewardAdUnitID },
_ => new List<string>()
};
}
@ -186,7 +187,7 @@ namespace WZ
}
else
{
return new List<string>{ StaticValue.InterAdUnitID };
return new List<string>{ StaticValue.MaxInterAdUnitID,StaticValue.MaxSparespareInterAdUnitID };
}
case AdsType.Rewarded:
@ -196,7 +197,7 @@ namespace WZ
}
else
{
return new List<string>{ StaticValue.RewardAdUnitID };
return new List<string>{ StaticValue.MaxRewardAdUnitID,StaticValue.MaxSparespareRewardAdUnitID };
}
default:
return new List<string>();

View File

@ -14,11 +14,14 @@ using WZ;
public class RushSDKManager : D_MonoSingleton<RushSDKManager>
{
protected override void Initialized()
{
base.Initialized();
FileParse.Parse();
}
public void InitializeSdk(Action action, bool showLog)
{
LoggerUtils.Enabled = showLog;
FileParse.Parse();
// AdConfigParser.Parse();
FireBaseSDKManager.Instance.Init();
ShuShuMangage.Instance.Init();
AdmobAdsManager.Instance.RefreshAdsData();

View File

@ -22,8 +22,12 @@ public class Test : MonoBehaviour
public void OnShowAd()
{
RushSDKManager.Instance.InitializeSdk(null, true);
// RushSDKManager.Instance.InitializeSdk(null, true);
// KwaiAdsManager.Instance.ShowRewardAd();
AdsSDKManager.Instance.ShowRewardAd("getcoin",(state,revenue)=>
{
LoggerUtils.Debug("[kwai] OnRewardedVideoAdShowed revenue:"+revenue+"+ state:"+state);
});
}
public void OnShowInterstitial()
@ -36,10 +40,7 @@ public class Test : MonoBehaviour
// TemplateId = NativeTemplateId.Medium
// }, medium);
AdsSDKManager.Instance.ShowRewardAd("getcoin",(state,revenue)=>
{
LoggerUtils.Debug("[kwai] OnRewardedVideoAdShowed revenue:"+revenue+"+ state:"+state);
});
// var nativeAdPosition = NativeAdPosition.Create(new NativeTemplateStyle
// {
// TemplateId = NativeTemplateId.Small
@ -57,6 +58,11 @@ public class Test : MonoBehaviour
// {
// Debug.LogWarning("luojian admob native ad start show fail,not ready.");
// }
AdsSDKManager.Instance.ShowInterstitialAd("endgame",IvType.IV1, (revenue) =>
{
LoggerUtils.Debug("oninter show call revenue:"+revenue);
});
}
public void OnInterShow()