using System; using Azerion.BlueStack.Internal; using Azerion.BlueStack.Common; using UnityEngine; namespace Azerion.BlueStack.API { public class BlueStackAds { private readonly IBlueStackClient _blueStackClient; private Settings _settings; private static IClientsFactory _clientsFactory; private static BlueStackAds Instance { get; } = new BlueStackAds(); private BlueStackAds() { _blueStackClient = GetClientsFactory().CreateBlueStackClient(); } public static void Initialize(string appId, Settings settings, Action sdkInitCompleteAction, Action adaptersInitCompleteAction = null) { #if UNITY_ANDROID && !UNITY_EDITOR CheckAndroidAppEntryPoint(); #endif Instance._settings = settings; Instance._blueStackClient.Initialize(appId, settings, sdkInitCompleteAction, client => { if (adaptersInitCompleteAction != null) adaptersInitCompleteAction.Invoke(new AdaptersInitializationStatus(client)); }); AdsEventExecutor.Initialize(); } internal static IClientsFactory GetClientsFactory() { if (_clientsFactory == null) { if (Application.platform == RuntimePlatform.Android) { #if !UNITY_EDITOR && !UNITY_IPHONE _clientsFactory = new Azerion.BlueStack.Platforms.Android.ClientsFactory(); #endif } else if (Application.platform == RuntimePlatform.IPhonePlayer) { #if UNITY_IOS && !UNITY_EDITOR _clientsFactory = new Azerion.BlueStack.Platforms.iOS.ClientsFactory(); #endif } else { const string factoryClassName = "Azerion.BlueStack.Platforms.UnityEditor.ClientsFactory"; // Debug.Log(factoryClassName); Type type = Type.GetType(factoryClassName, true); // Debug.Log("Client Type: " + type.ToString()); _clientsFactory = (IClientsFactory)Activator.CreateInstance(type); } } return _clientsFactory; } #if UNITY_ANDROID && !UNITY_EDITOR static void CheckAndroidAppEntryPoint() { var entryType = AndroidEntryChecker.GetEntryType(); if (entryType == AndroidEntryChecker.UnityEntryType.GameActivity) { Debug.Log("Running with UnityPlayerGameActivity (GameActivity entry)."); // Adjust behavior if needed (avoid AppCompat-only features) } else if (entryType == AndroidEntryChecker.UnityEntryType.Activity) { Debug.Log("Running with UnityPlayerActivity (Activity entry)."); // Safe to use AppCompat-compatible SDKs } else { Debug.LogWarning("Unknown Android entry type."); } } #endif } }