初始化广告逻辑
This commit is contained in:
parent
84deb507e4
commit
8ae88f1761
|
|
@ -59,6 +59,7 @@ public class AdjustManager : D_MonoSingleton<AdjustManager>
|
|||
if (!string.IsNullOrEmpty(network))
|
||||
{
|
||||
RushSDKManager.Instance.OnUserSourceListener?.Invoke(IsOrganic(network), network);
|
||||
TransferManager.Instance.OnAdjustCallbackReceived();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -176,6 +177,7 @@ public class AdjustManager : D_MonoSingleton<AdjustManager>
|
|||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustAdgroup, adgroup);
|
||||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustCreative, creative);
|
||||
PlayerPrefsUtils.SavePlayerPrefsString(_adjustClickLabel, attribution?.ClickLabel);
|
||||
TransferManager.Instance.OnAdjustCallbackReceived();
|
||||
ShuShuEvent.Instance.UserSet(new Dictionary<string, object>
|
||||
{
|
||||
{ "user_ad_network", network ?? "" },
|
||||
|
|
@ -219,7 +221,7 @@ public class AdjustManager : D_MonoSingleton<AdjustManager>
|
|||
return PlayerPrefsUtils.GetPlayerPrefsString(_adjustClickLabel);
|
||||
}
|
||||
|
||||
private bool IsOrganic(string _network)
|
||||
public bool IsOrganic(string _network)
|
||||
{
|
||||
if (string.IsNullOrEmpty(_network) || _network.Equals("Organic") || _network.Equals("Untrusted Devices"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ namespace WZ
|
|||
_nativeAdUnits = config.admob_native_units;
|
||||
_rewardedAdUnits = config.admob_rewarded_units;
|
||||
_splashAdUnits = config.admob_splash_units;
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ namespace WZ
|
|||
_topon_app_key = config.topon_app_key;
|
||||
_topon_interstitial_units = config.topon_interstitial_units.FirstOrDefault();
|
||||
_topon_rewarded_units = config.topon_rewarded_units.FirstOrDefault();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace WZ
|
||||
{
|
||||
public static class TransferData
|
||||
{
|
||||
public static bool HasVpnPermission
|
||||
{
|
||||
get => PlayerPrefs.GetInt("vpn_permission",0) == 1;
|
||||
set => PlayerPrefs.SetInt("vpn_permission", value == true ? 1 : 0);
|
||||
}
|
||||
|
||||
public static bool HasReqVpnPermission
|
||||
{
|
||||
get => PlayerPrefs.GetInt("req_vpn_permission",0) == 1;
|
||||
set => PlayerPrefs.SetInt("req_vpn_permission", value == true ? 1 : 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 0da66283b018c441ca81f16b65bae008
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -0,0 +1,279 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace WZ
|
||||
{
|
||||
|
||||
public class TransferManager : D_MonoSingleton<TransferManager>
|
||||
{
|
||||
private AdInitState currentState = AdInitState.Idle;
|
||||
private bool isFirebaseActivated = false;
|
||||
private bool hasReceivedAdjustCallback = false;
|
||||
private Coroutine waitingCoroutine = null;
|
||||
public event Action<AdInitState, string> OnAdInitStateChanged;
|
||||
|
||||
// 状态枚举
|
||||
public enum AdInitState
|
||||
{
|
||||
Idle, // 空闲
|
||||
WaitingForAdjustCallback, // 等待Adjust回调
|
||||
WaitingForFirebase, // 等待Firebase激活
|
||||
CheckingPromotion, // 检查推广状态
|
||||
InitializingTransfer, // 初始化Transfer SDK
|
||||
CheckingVpnPermission, // 检查VPN权限
|
||||
RequestingVpnPermission, // 请求VPN权限
|
||||
CheckingAdMobAvailability, // 检查AdMob可用性
|
||||
InitializingAdMob, // 初始化AdMob
|
||||
InitializingTopOn, // 初始化TopOn
|
||||
Completed, // 完成
|
||||
Failed // 失败
|
||||
}
|
||||
|
||||
public void OnAdjustCallbackReceived()
|
||||
{
|
||||
Debug.Log("收到Adjust回调,开始处理广告初始化");
|
||||
hasReceivedAdjustCallback = true;
|
||||
// 开始广告初始化流程
|
||||
StartAdInitialization();
|
||||
}
|
||||
|
||||
private void StartAdInitialization()
|
||||
{
|
||||
if (currentState != AdInitState.WaitingForAdjustCallback)
|
||||
{
|
||||
Debug.LogWarning($"广告初始化状态不正确,当前状态: {currentState}");
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查Firebase状态
|
||||
if (isFirebaseActivated)
|
||||
{
|
||||
Debug.Log("Firebase已激活,直接执行广告初始化");
|
||||
ExecuteAdInitialization();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Firebase未激活,等待激活后再执行广告初始化");
|
||||
ChangeState(AdInitState.WaitingForFirebase, "等待Firebase激活");
|
||||
|
||||
// 开始等待Firebase激活
|
||||
waitingCoroutine = StartCoroutine(WaitForFirebaseAndInitialize());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 等待Firebase激活并初始化广告
|
||||
/// </summary>
|
||||
private IEnumerator WaitForFirebaseAndInitialize()
|
||||
{
|
||||
Debug.Log("开始等待Firebase激活...");
|
||||
|
||||
float startTime = Time.time;
|
||||
const float timeout = 360f;
|
||||
|
||||
// 等待Firebase激活
|
||||
while (!isFirebaseActivated && Time.time - startTime < timeout)
|
||||
{
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
|
||||
// 检查Firebase状态(可能是外部初始化的)
|
||||
CheckFirebaseStatus();
|
||||
|
||||
if (Time.time - startTime >= 5f && !isFirebaseActivated)
|
||||
{
|
||||
Debug.Log($"已等待{Time.time - startTime:F1}秒,Firebase仍未激活");
|
||||
}
|
||||
}
|
||||
|
||||
if (isFirebaseActivated)
|
||||
{
|
||||
Debug.Log($"Firebase激活成功,等待时间: {Time.time - startTime:F1}秒");
|
||||
ExecuteAdInitialization();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Firebase激活等待超时({timeout}秒),继续初始化广告");
|
||||
ExecuteAdInitialization();
|
||||
}
|
||||
|
||||
waitingCoroutine = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行广告初始化流程
|
||||
/// </summary>
|
||||
private void ExecuteAdInitialization()
|
||||
{
|
||||
Debug.Log("开始执行广告初始化流程");
|
||||
StartCoroutine(AdInitializationCoroutine());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 广告初始化协程
|
||||
/// </summary>
|
||||
private IEnumerator AdInitializationCoroutine()
|
||||
{
|
||||
// 状态1: 检查是否为推广用户
|
||||
ChangeState(AdInitState.CheckingPromotion, "检查推广用户状态");
|
||||
|
||||
if (!IsPromoteUser())
|
||||
{
|
||||
Debug.Log("非推广用户,直接初始化TopOn广告");
|
||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||
InitializeTopOnAds();
|
||||
yield break;
|
||||
}
|
||||
|
||||
Debug.Log("推广用户,开始VPN和AdMob检查流程");
|
||||
|
||||
// 状态2: 初始化Transfer SDK
|
||||
ChangeState(AdInitState.InitializingTransfer, "初始化Transfer SDK");
|
||||
TransferAndroidClass.Init();
|
||||
|
||||
// 状态3: 检查VPN权限
|
||||
ChangeState(AdInitState.CheckingVpnPermission, "检查VPN权限");
|
||||
if (TransferData.HasVpnPermission)
|
||||
{
|
||||
Debug.Log("已有VPN权限,检查AdMob可用性");
|
||||
yield return StartCoroutine(CheckAndInitializeAdsWithVpnPermission());
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("无VPN权限,检查是否已请求过权限");
|
||||
yield return StartCoroutine(HandleNoVpnPermission());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 已有VPN权限时的广告初始化流程
|
||||
/// </summary>
|
||||
private IEnumerator CheckAndInitializeAdsWithVpnPermission()
|
||||
{
|
||||
ChangeState(AdInitState.CheckingAdMobAvailability, "检查AdMob可用性");
|
||||
|
||||
bool checkCompleted = false;
|
||||
bool isAdMobAllowed = false;
|
||||
string message = "";
|
||||
|
||||
TransferAndroidClass.IsAllowAdMob((res, msg) =>
|
||||
{
|
||||
isAdMobAllowed = res;
|
||||
message = msg;
|
||||
checkCompleted = true;
|
||||
});
|
||||
|
||||
// 等待检查完成
|
||||
yield return new WaitUntil(() => checkCompleted);
|
||||
|
||||
if (isAdMobAllowed)
|
||||
{
|
||||
Debug.Log($"AdMob可用: {message},初始化AdMob广告");
|
||||
ChangeState(AdInitState.InitializingAdMob, "初始化AdMob广告");
|
||||
InitializeAdMobAds();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"AdMob不可用: {message},初始化TopOn广告");
|
||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||
InitializeTopOnAds();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理无VPN权限的情况
|
||||
/// </summary>
|
||||
private IEnumerator HandleNoVpnPermission()
|
||||
{
|
||||
// 已请求过VPN权限但用户拒绝
|
||||
if (TransferData.HasReqVpnPermission)
|
||||
{
|
||||
Debug.Log("已请求过VPN权限但用户拒绝,初始化TopOn广告");
|
||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||
InitializeTopOnAds();
|
||||
yield break;
|
||||
}
|
||||
|
||||
// 首次请求VPN权限
|
||||
Debug.Log("首次请求VPN权限,弹出引导");
|
||||
ChangeState(AdInitState.RequestingVpnPermission, "请求VPN权限");
|
||||
|
||||
bool permissionRequestCompleted = false;
|
||||
bool permissionGranted = false;
|
||||
|
||||
TransferAndroidClass.RequestVpnPermission((res, msg) =>
|
||||
{
|
||||
TransferData.HasReqVpnPermission = true;
|
||||
permissionGranted = res;
|
||||
permissionRequestCompleted = true;
|
||||
|
||||
Debug.Log($"VPN权限请求结果: {res}, 消息: {msg}");
|
||||
});
|
||||
|
||||
// 等待权限请求完成
|
||||
yield return new WaitUntil(() => permissionRequestCompleted);
|
||||
|
||||
if (permissionGranted)
|
||||
{
|
||||
Debug.Log("VPN权限已授予,更新权限状态并检查AdMob");
|
||||
TransferData.HasVpnPermission = true;
|
||||
yield return StartCoroutine(CheckAndInitializeAdsWithVpnPermission());
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("VPN权限被拒绝,初始化TopOn广告");
|
||||
ChangeState(AdInitState.InitializingTopOn, "初始化TopOn广告");
|
||||
InitializeTopOnAds();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void InitializeAdMobAds()
|
||||
{
|
||||
AdmobAdsManager.Instance.Initialize();
|
||||
}
|
||||
|
||||
private void InitializeTopOnAds()
|
||||
{
|
||||
TpnAdsManager.Instance.Initialize();
|
||||
}
|
||||
|
||||
private void ChangeState(AdInitState newState, string message)
|
||||
{
|
||||
var oldState = currentState;
|
||||
currentState = newState;
|
||||
|
||||
Debug.Log($"广告初始化状态: {oldState} -> {newState} ({message})");
|
||||
}
|
||||
|
||||
private void CheckFirebaseStatus()
|
||||
{
|
||||
if(FireBaseRemoteConfigManager.Instance.IsInitialized)
|
||||
{
|
||||
Debug.Log("Firebase激活完成事件收到");
|
||||
isFirebaseActivated = true;
|
||||
|
||||
// 如果正在等待Firebase,继续广告初始化
|
||||
if (currentState == AdInitState.WaitingForFirebase && waitingCoroutine != null)
|
||||
{
|
||||
// 停止等待协程,直接继续
|
||||
if (waitingCoroutine != null)
|
||||
{
|
||||
StopCoroutine(waitingCoroutine);
|
||||
waitingCoroutine = null;
|
||||
}
|
||||
|
||||
Debug.Log("从Firebase等待状态恢复,继续广告初始化");
|
||||
ExecuteAdInitialization();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsPromoteUser()
|
||||
{
|
||||
return !AdjustManager.Instance.IsOrganic(AdjustNetwork.GetNetwork());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4398ac70ce9f84bd185689fb3be0e898
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
Reference in New Issue