public static SdkConfiguration GetSdkConfiguration() { var sdkConfigurationStr = _MaxGetSdkConfiguration(); var sdkConfigurationDict = MaxSdkUtils.PropsStringToDict(sdkConfigurationStr); return(SdkConfiguration.Create(sdkConfigurationDict)); }
private static void ShowStubRewardedInterstitialAd(string adUnitIdentifier) { #if UNITY_EDITOR var prefabPath = MaxSdkUtils.GetAssetPathForExportPath("MaxSdk/Prefabs/Rewarded.prefab"); var rewardedPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); var stubRewardedAd = Object.Instantiate(rewardedPrefab, Vector3.zero, Quaternion.identity); var grantedReward = false; var rewardedTitle = GameObject.Find("MaxRewardTitle").GetComponent <Text>(); var rewardStatus = GameObject.Find("MaxRewardStatus").GetComponent <Text>(); var closeButton = GameObject.Find("MaxRewardedCloseButton").GetComponent <Button>(); var rewardButton = GameObject.Find("MaxRewardButton").GetComponent <Button>(); Object.DontDestroyOnLoad(stubRewardedAd); rewardedTitle.text = "MAX Rewarded Interstitial Ad:\n" + adUnitIdentifier; closeButton.onClick.AddListener(() => { if (grantedReward) { MaxSdkCallbacks.Instance.ForwardEvent("name=OnRewardedInterstitialAdReceivedRewardEvent\nadUnitId=" + adUnitIdentifier + "\nrewardLabel=coins\nrewardAmount=5"); } MaxSdkCallbacks.Instance.ForwardEvent("name=OnRewardedInterstitialAdHiddenEvent\nadUnitId=" + adUnitIdentifier); Object.Destroy(stubRewardedAd); }); rewardButton.onClick.AddListener(() => { grantedReward = true; rewardStatus.text = "Reward granted. Will send reward callback on ad close."; }); MaxSdkCallbacks.Instance.ForwardEvent("name=OnRewardedInterstitialAdDisplayedEvent\nadUnitId=" + adUnitIdentifier); #endif }
private static void AddSnapAppStoreAppIdIfNeeded(PlistDocument plist) { var snapDependencyPath = Path.Combine(PluginMediationDirectory, "Snap/Editor/Dependencies.xml"); if (!File.Exists(snapDependencyPath)) { return; } // App Store App ID is only needed for iOS versions 2.0.0.0 or newer. var currentVersion = AppLovinIntegrationManager.GetCurrentVersions(snapDependencyPath); var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, AppLovinSettings.SnapAppStoreAppIdMinVersion); if (iosVersionComparison == MaxSdkUtils.VersionComparisonResult.Lesser) { return; } if (AppLovinSettings.Instance.SnapAppStoreAppId <= 0) { MaxSdkLogger.UserError("Snap App Store App ID is not set. Please enter a valid App ID within the AppLovin Integration Manager window."); return; } plist.root.SetInteger("SCAppStoreAppID", AppLovinSettings.Instance.SnapAppStoreAppId); }
public AdInfo(string adInfoString) { string adUnitIdentifier; string networkName; string creativeIdentifier; string placement; string revenue; // NOTE: Unity Editor creates empty string var adInfoObject = MaxSdkUtils.PropsStringToDict(adInfoString); AdUnitIdentifier = adInfoObject.TryGetValue("adUnitId", out adUnitIdentifier) ? adUnitIdentifier : ""; NetworkName = adInfoObject.TryGetValue("networkName", out networkName) ? networkName : ""; CreativeIdentifier = adInfoObject.TryGetValue("creativeId", out creativeIdentifier) ? creativeIdentifier : ""; Placement = adInfoObject.TryGetValue("placement", out placement) ? placement : ""; if (adInfoObject.TryGetValue("revenue", out revenue)) { try { // InvariantCulture guarantees the decimal is used for the separator even in regions that use commas as the separator Revenue = double.Parse(revenue, NumberStyles.Any, CultureInfo.InvariantCulture); } catch (Exception exception) { MaxSdkLogger.E("Failed to parse double (" + revenue + ") with exception: " + exception); Revenue = -1; } } else { Revenue = -1; } }
/// <summary> /// Get the SDK configuration for this user. /// /// Note: This method should be called only after SDK has been initialized. /// </summary> public static SdkConfiguration GetSdkConfiguration() { var sdkConfigurationStr = MaxUnityPluginClass.CallStatic <string>("getSdkConfiguration"); var sdkConfigurationDict = MaxSdkUtils.PropsStringToDict(sdkConfigurationStr); return(SdkConfiguration.Create(sdkConfigurationDict)); }
/// <summary> /// Updates the CurrentVersion fields for a given network data object. /// </summary> /// <param name="network">Network for which to update the current versions.</param> /// <param name="mediationPluginParentDirectory">The parent directory of where the mediation adapter plugins are imported to.</param> public static void UpdateCurrentVersions(Network network, string mediationPluginParentDirectory) { var dependencyFilePath = Path.Combine(mediationPluginParentDirectory, network.DependenciesFilePath); var currentVersions = GetCurrentVersions(dependencyFilePath); network.CurrentVersions = currentVersions; // If AppLovin mediation plugin, get the version from MaxSdk and the latest and current version comparison. if (network.Name.Equals("APPLOVIN_NETWORK")) { network.CurrentVersions.Unity = MaxSdk.Version; var unityVersionComparison = MaxSdkUtils.CompareVersions(network.CurrentVersions.Unity, network.LatestVersions.Unity); var androidVersionComparison = MaxSdkUtils.CompareVersions(network.CurrentVersions.Android, network.LatestVersions.Android); var iosVersionComparison = MaxSdkUtils.CompareVersions(network.CurrentVersions.Ios, network.LatestVersions.Ios); // Overall version is same if all the current and latest (from db) versions are same. if (unityVersionComparison == VersionComparisonResult.Equal && androidVersionComparison == VersionComparisonResult.Equal && iosVersionComparison == VersionComparisonResult.Equal) { network.CurrentToLatestVersionComparisonResult = VersionComparisonResult.Equal; } // One of the installed versions is newer than the latest versions which means that the publisher is on a beta version. else if (unityVersionComparison == VersionComparisonResult.Greater || androidVersionComparison == VersionComparisonResult.Greater || iosVersionComparison == VersionComparisonResult.Greater) { network.CurrentToLatestVersionComparisonResult = VersionComparisonResult.Greater; } // We have a new version available if all Android, iOS and Unity has a newer version available in db. else { network.CurrentToLatestVersionComparisonResult = VersionComparisonResult.Lesser; } } // For all other mediation adapters, get the version comparison using their Unity versions. else { // If adapter is indeed installed, compare the current (installed) and the latest (from db) versions, so that we can determine if the publisher is on an older, current or a newer version of the adapter. // If the publisher is on a newer version of the adapter than the db version, that means they are on a beta version. if (!string.IsNullOrEmpty(currentVersions.Unity)) { network.CurrentToLatestVersionComparisonResult = MaxSdkUtils.CompareUnityMediationVersions(currentVersions.Unity, network.LatestVersions.Unity); } if (!string.IsNullOrEmpty(network.CurrentVersions.Unity) && AppLovinAutoUpdater.MinAdapterVersions.ContainsKey(network.Name)) { var comparisonResult = MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, AppLovinAutoUpdater.MinAdapterVersions[network.Name]); // Requires update if current version is lower than the min required version. network.RequiresUpdate = comparisonResult < 0; } else { // Reset value so that the Integration manager can hide the alert icon once adapter is updated. network.RequiresUpdate = false; } } }
/// <summary> /// Generates serialized Unity meta data to be passed to the SDK. /// </summary> /// <returns>Serialized Unity meta data.</returns> protected static string GenerateMetaData() { var metaData = new Dictionary <string, string>(); metaData.Add("UnityVersion", Application.unityVersion); return(MaxSdkUtils.DictToPropsString(metaData)); }
private void Awake() { titleLabelStyle = new GUIStyle(EditorStyles.label) { fontSize = 14, fontStyle = FontStyle.Bold, fixedHeight = 20 }; headerLabelStyle = new GUIStyle(EditorStyles.label) { fontSize = 12, fontStyle = FontStyle.Bold, fixedHeight = 18 }; environmentValueStyle = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleRight }; linkLabelStyle = new GUIStyle(EditorStyles.label) { wordWrap = true, normal = { textColor = Color.blue } }; wrapTextLabelStyle = new GUIStyle(EditorStyles.label) { wordWrap = true }; uninstallButtonStyle = new GUIStyle(EditorStyles.miniButton) { fixedWidth = 18, fixedHeight = 18, padding = new RectOffset(1, 1, 1, 1) }; // Load uninstall icon texture. var uninstallIconData = File.ReadAllBytes(MaxSdkUtils.GetAssetPathForExportPath(uninstallIconExportPath)); uninstallIcon = new Texture2D(0, 0, TextureFormat.RGBA32, false); // 1. Initial size doesn't matter here, will be automatically resized once the image asset is loaded. 2. Set mipChain to false, else the texture has a weird blurry effect. uninstallIcon.LoadImage(uninstallIconData); // Load alert icon texture. var alertIconData = File.ReadAllBytes(MaxSdkUtils.GetAssetPathForExportPath(alertIconExportPath)); alertIcon = new Texture2D(0, 0, TextureFormat.RGBA32, false); alertIcon.LoadImage(alertIconData); var pluginPath = Path.Combine(AppLovinIntegrationManager.PluginParentDirectory, "MaxSdk"); isPluginMoved = !AppLovinIntegrationManager.DefaultPluginExportPath.Equals(pluginPath); }
/// <summary> /// Generates serialized Unity meta data to be passed to the SDK. /// </summary> /// <returns>Serialized Unity meta data.</returns> protected static string GenerateMetaData() { var metaData = new Dictionary <string, string>(2); metaData.Add("UnityVersion", Application.unityVersion); var graphicsMemorySize = SystemInfo.graphicsMemorySize; metaData.Add("GraphicsMemorySizeMegabytes", graphicsMemorySize.ToString()); return(MaxSdkUtils.DictToPropsString(metaData)); }
public static AdInfo GetAdInfo(string adUnitIdentifier) { var adInfoString = _MaxGetAdInfo(adUnitIdentifier); if (string.IsNullOrEmpty(adInfoString)) { return(null); } var adInfoDictionary = MaxSdkUtils.PropsStringToDict(adInfoString); return(new AdInfo(adInfoDictionary)); }
public static AdInfo GetAdInfo(string adUnitIdentifier) { var adInfoString = MaxUnityPluginClass.CallStatic <string>("getAdInfo", adUnitIdentifier); if (string.IsNullOrEmpty(adInfoString)) { return(null); } var adInfoDictionary = MaxSdkUtils.PropsStringToDict(adInfoString); return(new AdInfo(adInfoDictionary)); }
public AdInfo(string adInfoString) { string adUnitIdentifier = ""; string networkName = ""; // NOTE: Unity Editor creates empty string IDictionary <string, string> adInfoObject = MaxSdkUtils.PropsStringToDict(adInfoString); adInfoObject.TryGetValue("adUnitId", out adUnitIdentifier); adInfoObject.TryGetValue("networkName", out networkName); AdUnitIdentifier = adUnitIdentifier; NetworkName = networkName; }
public MediatedNetworkInfo(string networkInfoString) { string name; string adapterClassName; string adapterVersion; string sdkVersion; // NOTE: Unity Editor creates empty string var mediatedNetworkObject = MaxSdkUtils.PropsStringToDict(networkInfoString); Name = mediatedNetworkObject.TryGetValue("name", out name) ? name : ""; AdapterClassName = mediatedNetworkObject.TryGetValue("adapterClassName", out adapterClassName) ? adapterClassName : ""; AdapterVersion = mediatedNetworkObject.TryGetValue("adapterVersion", out adapterVersion) ? adapterVersion : ""; SdkVersion = mediatedNetworkObject.TryGetValue("sdkVersion", out sdkVersion) ? sdkVersion : ""; }
private static void CreateStubBanner(string adUnitIdentifier, BannerPosition bannerPosition) { #if UNITY_EDITOR // Only support BottomCenter and TopCenter for now var bannerPrefabName = bannerPosition == BannerPosition.BottomCenter ? "BannerBottom" : "BannerTop"; var prefabPath = MaxSdkUtils.GetAssetPathForExportPath("MaxSdk/Prefabs/" + bannerPrefabName + ".prefab"); var bannerPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); var stubBanner = Object.Instantiate(bannerPrefab, Vector3.zero, Quaternion.identity); stubBanner.SetActive(false); // Hidden by default Object.DontDestroyOnLoad(stubBanner); var bannerText = stubBanner.GetComponentInChildren <Text>(); bannerText.text += ":\n" + adUnitIdentifier; StubBanners.Add(adUnitIdentifier, stubBanner); #endif }
private static bool ShouldEmbedSnapSdk() { var snapDependencyPath = Path.Combine(PluginMediationDirectory, "Snap/Editor/Dependencies.xml"); if (!File.Exists(snapDependencyPath)) { return(false); } // Return true for UNITY_2019_3_OR_NEWER because app will crash on launch unless embedded. #if UNITY_2019_3_OR_NEWER return(true); #else var currentVersion = AppLovinIntegrationManager.GetCurrentVersions(snapDependencyPath); var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, "1.0.7.2"); return(iosVersionComparison != MaxSdkUtils.VersionComparisonResult.Lesser); #endif }
private static void ShowStubInterstitial(string adUnitIdentifier) { #if UNITY_EDITOR var prefabPath = MaxSdkUtils.GetAssetPathForExportPath("MaxSdk/Prefabs/Interstitial.prefab"); var interstitialPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); var stubInterstitial = Object.Instantiate(interstitialPrefab, Vector3.zero, Quaternion.identity); var interstitialText = GameObject.Find("MaxInterstitialTitle").GetComponent <Text>(); var closeButton = GameObject.Find("MaxInterstitialCloseButton").GetComponent <Button>(); interstitialText.text += ":\n" + adUnitIdentifier; closeButton.onClick.AddListener(() => { MaxSdkCallbacks.Instance.ForwardEvent("name=OnInterstitialHiddenEvent\nadUnitId=" + adUnitIdentifier); Object.Destroy(stubInterstitial); }); MaxSdkCallbacks.Instance.ForwardEvent("name=OnInterstitialDisplayedEvent\nadUnitId=" + adUnitIdentifier); #endif }
private static bool GoogleNetworkAdaptersCompatible(string googleVersion, string googleAdManagerVersion, string breakingVersion) { var googleResult = MaxSdkUtils.CompareVersions(googleVersion, breakingVersion); var googleAdManagerResult = MaxSdkUtils.CompareVersions(googleAdManagerVersion, breakingVersion); // If one is less than the breaking version and the other is not, they are not compatible. if (googleResult == MaxSdkUtils.VersionComparisonResult.Lesser && googleAdManagerResult != MaxSdkUtils.VersionComparisonResult.Lesser) { return(false); } if (googleAdManagerResult == MaxSdkUtils.VersionComparisonResult.Lesser && googleResult != MaxSdkUtils.VersionComparisonResult.Lesser) { return(false); } return(true); }
/// <summary> /// Updates the CurrentVersion fields for a given network data object. /// </summary> /// <param name="network">Network for which to update the current versions.</param> public static void UpdateCurrentVersions(Network network) { var dependencyFilePath = Path.Combine(Application.dataPath, network.DependenciesFilePath); var currentVersions = GetCurrentVersions(dependencyFilePath); network.CurrentVersions = currentVersions; // If adapter is indeed installed, compare the current (installed) and the latest (from db) versions, so that we can determine if the publisher is on an older, current or a newer version of the adapter. // If the publisher is on a newer version of the adapter than the db version, that means they are on a beta version. if (!string.IsNullOrEmpty(currentVersions.Unity)) { network.CurrentToLatestVersionComparison = MaxSdkUtils.CompareUnityMediationVersions(currentVersions.Unity, network.LatestVersions.Unity); } // If AppLovin mediation plugin, get the version from MaxSdk. if (network.Name.Equals("APPLOVIN_NETWORK")) { network.CurrentVersions.Unity = MaxSdk.Version; } }
/// <summary> /// Parses the prop string provided to a <see cref="Rect"/>. /// </summary> /// <param name="rectPropString">A prop string representing a Rect</param> /// <returns>A <see cref="Rect"/> the prop string represents.</returns> protected static Rect GetRectFromString(string rectPropString) { var rectDict = MaxSdkUtils.PropsStringToDict(rectPropString); float originX; float originY; float width; float height; string output; rectDict.TryGetValue("origin_x", out output); float.TryParse(output, out originX); rectDict.TryGetValue("origin_y", out output); float.TryParse(output, out originY); rectDict.TryGetValue("width", out output); float.TryParse(output, out width); rectDict.TryGetValue("height", out output); float.TryParse(output, out height); return(new Rect(originX, originY, width, height)); }
public void ForwardEvent(string eventPropsStr) { var eventProps = MaxSdkUtils.PropsStringToDict(eventPropsStr); var eventName = eventProps["name"]; if (eventName == "OnSdkInitializedEvent") { var sdkConfiguration = MaxSdkBase.SdkConfiguration.Create(eventProps); InvokeEvent(_onSdkInitializedEvent, sdkConfiguration); } else if (eventName == "OnVariablesUpdatedEvent") { InvokeEvent(_onVariablesUpdatedEvent); } else if (eventName == "OnSdkConsentDialogDismissedEvent") { InvokeEvent(_onSdkConsentDialogDismissedEvent); } // Ad Events else { var adUnitIdentifier = eventProps["adUnitId"]; if (eventName == "OnBannerAdLoadedEvent") { InvokeEvent(_onBannerAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onBannerAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnBannerAdClickedEvent") { InvokeEvent(_onBannerAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdExpandedEvent") { InvokeEvent(_onBannerAdExpandedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdCollapsedEvent") { InvokeEvent(_onBannerAdCollapsedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdLoadedEvent") { InvokeEvent(_onMRecAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onMRecAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnMRecAdClickedEvent") { InvokeEvent(_onMRecAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdExpandedEvent") { InvokeEvent(_onMRecAdExpandedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdCollapsedEvent") { InvokeEvent(_onMRecAdCollapsedEvent, adUnitIdentifier); } else if (eventName == "OnCrossPromoAdLoadedEvent") { InvokeEvent(_onCrossPromoAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnCrossPromoAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onCrossPromoAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnCrossPromoAdClickedEvent") { InvokeEvent(_onCrossPromoAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnCrossPromoAdExpandedEvent") { InvokeEvent(_onCrossPromoAdExpandedEvent, adUnitIdentifier); } else if (eventName == "OnCrossPromoAdCollapsedEvent") { InvokeEvent(_onCrossPromoAdCollapsedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialLoadedEvent") { InvokeEvent(_onInterstitialLoadedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onInterstitialLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnInterstitialHiddenEvent") { InvokeEvent(_onInterstitialHiddenEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialDisplayedEvent") { InvokeEvent(_onInterstitialDisplayedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialAdFailedToDisplayEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnInterstitialClickedEvent") { InvokeEvent(_onInterstitialClickedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdLoadedEvent") { InvokeEvent(_onRewardedAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onRewardedAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedAdDisplayedEvent") { InvokeEvent(_onRewardedAdDisplayedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdHiddenEvent") { InvokeEvent(_onRewardedAdHiddenEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdClickedEvent") { InvokeEvent(_onRewardedAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdFailedToDisplayEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onRewardedAdFailedToDisplayEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedAdReceivedRewardEvent") { var reward = new MaxSdkBase.Reward { Label = eventProps["rewardLabel"] }; int.TryParse(eventProps["rewardAmount"], out reward.Amount); InvokeEvent(_onRewardedAdReceivedRewardEvent, adUnitIdentifier, reward); } else if (eventName == "OnRewardedInterstitialAdLoadedEvent") { InvokeEvent(_onRewardedInterstitialAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedInterstitialAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onRewardedInterstitialAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedInterstitialAdDisplayedEvent") { InvokeEvent(_onRewardedInterstitialAdDisplayedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedInterstitialAdHiddenEvent") { InvokeEvent(_onRewardedInterstitialAdHiddenEvent, adUnitIdentifier); } else if (eventName == "OnRewardedInterstitialAdClickedEvent") { InvokeEvent(_onRewardedInterstitialAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedInterstitialAdFailedToDisplayEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(_onRewardedInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedInterstitialAdReceivedRewardEvent") { var reward = new MaxSdkBase.Reward { Label = eventProps["rewardLabel"] }; int.TryParse(eventProps["rewardAmount"], out reward.Amount); InvokeEvent(_onRewardedInterstitialAdReceivedRewardEvent, adUnitIdentifier, reward); } else { MaxSdkLogger.UserWarning("Unknown MAX Ads event fired: " + eventName); } } }
/// <summary> /// Draws the network specific details for a given network. /// </summary> private void DrawNetworkDetailRow(Network network) { string action; var currentVersion = network.CurrentVersions.Unity; var latestVersion = network.LatestVersions.Unity; bool isActionEnabled; bool isInstalled; if (string.IsNullOrEmpty(currentVersion)) { action = "Install"; currentVersion = "Not Installed"; isActionEnabled = true; isInstalled = false; } else { isInstalled = true; var comparison = network.CurrentToLatestVersionComparisonResult; // A newer version is available if (comparison == VersionComparisonResult.Lesser) { action = "Upgrade"; isActionEnabled = true; } // Current installed version is newer than latest version from DB (beta version) else if (comparison == VersionComparisonResult.Greater) { action = "Installed"; isActionEnabled = false; } // Already on the latest version else { action = "Installed"; isActionEnabled = false; } } GUILayout.Space(4); using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandHeight(false))) { GUILayout.Space(5); EditorGUILayout.LabelField(new GUIContent(network.DisplayName), networkWidthOption); EditorGUILayout.LabelField(new GUIContent(currentVersion), versionWidthOption); GUILayout.Space(3); EditorGUILayout.LabelField(new GUIContent(latestVersion), versionWidthOption); GUILayout.Space(3); GUILayout.FlexibleSpace(); if (network.RequiresUpdate) { GUILayout.Label(new GUIContent { image = alertIcon, tooltip = "Adapter not compatible, please update to the latest version." }, uninstallButtonStyle); } GUI.enabled = isActionEnabled; if (GUILayout.Button(new GUIContent(action), fieldWidth)) { // Download the plugin. AppLovinEditorCoroutine.StartCoroutine(AppLovinIntegrationManager.Instance.DownloadPlugin(network)); } GUI.enabled = true; GUILayout.Space(2); GUI.enabled = isInstalled; if (GUILayout.Button(new GUIContent { image = uninstallIcon, tooltip = "Uninstall" }, uninstallButtonStyle)) { EditorUtility.DisplayProgressBar("Integration Manager", "Deleting " + network.Name + "...", 0.5f); foreach (var pluginFilePath in network.PluginFilePaths) { FileUtil.DeleteFileOrDirectory(Path.Combine("Assets", pluginFilePath)); } AppLovinIntegrationManager.UpdateCurrentVersions(network); // Refresh UI AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); } GUI.enabled = true; GUILayout.Space(5); } // Custom integration for AdMob where the user can enter the Android and iOS App IDs. if (network.Name.Equals("ADMOB_NETWORK") && isInstalled) { // Custom integration requires Google AdMob adapter version newer than android_19.0.1.0_ios_7.57.0.0. if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, "android_19.0.1.0_ios_7.57.0.0") == VersionComparisonResult.Greater) { GUILayout.BeginHorizontal(); GUILayout.Space(20); using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Space(2); if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, "android_19.2.0.0_ios_7.61.0.0") == VersionComparisonResult.Greater) { AppLovinSettings.Instance.AdMobAndroidAppId = DrawTextField("App ID (Android)", AppLovinSettings.Instance.AdMobAndroidAppId, networkWidthOption); AppLovinSettings.Instance.AdMobIosAppId = DrawTextField("App ID (iOS)", AppLovinSettings.Instance.AdMobIosAppId, networkWidthOption); } else { EditorGUILayout.HelpBox("The current version of AppLovin MAX plugin requires Google adapter version newer than android_19.2.0.0_ios_7.61.0.0 to enable auto-export of AdMob App ID.", MessageType.Warning); } } GUILayout.EndHorizontal(); } } }
public void ForwardEvent(string eventPropsStr) { var eventProps = MaxSdkUtils.PropsStringToDict(eventPropsStr); var eventName = eventProps["name"]; if (eventName == "OnSdkInitializedEvent") { var consentDialogStateStr = eventProps["consentDialogState"]; var sdkConfiguration = new MaxSdkBase.SdkConfiguration(); if ("1".Equals(consentDialogStateStr)) { sdkConfiguration.ConsentDialogState = MaxSdkBase.ConsentDialogState.Applies; } else if ("2".Equals(consentDialogStateStr)) { sdkConfiguration.ConsentDialogState = MaxSdkBase.ConsentDialogState.DoesNotApply; } else { sdkConfiguration.ConsentDialogState = MaxSdkBase.ConsentDialogState.Unknown; } InvokeEvent(OnSdkInitializedEvent, sdkConfiguration); } else if (eventName == "OnVariablesUpdatedEvent") { InvokeEvent(OnVariablesUpdatedEvent); } // Ad Events else { var adUnitIdentifier = eventProps["adUnitId"]; if (eventName == "OnBannerAdLoadedEvent") { InvokeEvent(OnBannerAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnBannerAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnBannerAdClickedEvent") { InvokeEvent(OnBannerAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdExpandedEvent") { InvokeEvent(OnBannerAdExpandedEvent, adUnitIdentifier); } else if (eventName == "OnBannerAdCollapsedEvent") { InvokeEvent(OnBannerAdCollapsedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdLoadedEvent") { InvokeEvent(OnMRecAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnMRecAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnMRecAdClickedEvent") { InvokeEvent(OnMRecAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdExpandedEvent") { InvokeEvent(OnMRecAdExpandedEvent, adUnitIdentifier); } else if (eventName == "OnMRecAdCollapsedEvent") { InvokeEvent(OnMRecAdCollapsedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialLoadedEvent") { InvokeEvent(OnInterstitialLoadedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnInterstitialLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnInterstitialHiddenEvent") { InvokeEvent(OnInterstitialHiddenEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialDisplayedEvent") { InvokeEvent(OnInterstitialDisplayedEvent, adUnitIdentifier); } else if (eventName == "OnInterstitialAdFailedToDisplayEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnInterstitialClickedEvent") { InvokeEvent(OnInterstitialClickedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdLoadedEvent") { InvokeEvent(OnRewardedAdLoadedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdLoadFailedEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnRewardedAdLoadFailedEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedAdDisplayedEvent") { InvokeEvent(OnRewardedAdDisplayedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdHiddenEvent") { InvokeEvent(OnRewardedAdHiddenEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdClickedEvent") { InvokeEvent(OnRewardedAdClickedEvent, adUnitIdentifier); } else if (eventName == "OnRewardedAdFailedToDisplayEvent") { var errorCode = 0; int.TryParse(eventProps["errorCode"], out errorCode); InvokeEvent(OnRewardedAdFailedToDisplayEvent, adUnitIdentifier, errorCode); } else if (eventName == "OnRewardedAdReceivedRewardEvent") { var reward = new MaxSdkBase.Reward { Label = eventProps["rewardLabel"] }; int.TryParse(eventProps["rewardAmount"], out reward.Amount); InvokeEvent(OnRewardedAdReceivedRewardEvent, adUnitIdentifier, reward); } else { Debug.LogWarning("[AppLovin MAX] Unknown MAX Ads event fired: " + eventName); } } }
/// <summary> /// Track an event using AppLovin. /// </summary> /// <param name="name">An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework.</param> /// <param name="parameters">A dictionary containing key-value pairs further describing this event.</param> public static void TrackEvent(string name, IDictionary <string, string> parameters = null) { _MaxTrackEvent(name, MaxSdkUtils.DictToPropsString(parameters)); }
/// <summary> /// Set non-transparent background color for banners to be fully functional. /// </summary> /// <param name="adUnitIdentifier">Ad unit identifier of the banner to set background color for</param> /// <param name="color">A background color to set for the ad</param> public static void SetBannerBackgroundColor(string adUnitIdentifier, Color color) { ValidateAdUnitIdentifier(adUnitIdentifier, "set background color"); _MaxSetBannerBackgroundColor(adUnitIdentifier, MaxSdkUtils.ParseColor(color)); }
/// <summary> /// Returns the list of available mediation networks. /// /// Please call this method after the SDK has initialized. /// </summary> public static List <MaxSdkBase.MediatedNetworkInfo> GetAvailableMediatedNetworks() { var serializedNetworks = _MaxGetAvailableMediatedNetworks(); return(MaxSdkUtils.PropsStringsToList <MaxSdkBase.MediatedNetworkInfo>(serializedNetworks)); }
/// <summary> /// Set non-transparent background color for banners to be fully functional. /// </summary> /// <param name="adUnitIdentifier">Ad unit identifier of the banner to set background color for</param> /// <param name="color">A background color to set for the ad</param> /// <returns></returns> public static void SetBannerBackgroundColor(string adUnitIdentifier, Color color) { ValidateAdUnitIdentifier(adUnitIdentifier, "set background color"); MaxUnityPluginClass.CallStatic("setBannerBackgroundColor", adUnitIdentifier, MaxSdkUtils.ParseColor(color)); }
/// <summary> /// Track an event using AppLovin. /// </summary> /// <param name="name">An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework.</param> /// <param name="parameters">A dictionary containing key-value pairs further describing this event.</param> public static void TrackEvent(string name, IDictionary <string, string> parameters = null) { MaxUnityPluginClass.CallStatic("trackEvent", name, MaxSdkUtils.DictToPropsString(parameters)); }
/// <summary> /// Draws the network specific details for a given network. /// </summary> private void DrawNetworkDetailRow(Network network) { string action; var currentVersion = network.CurrentVersions.Unity; var latestVersion = network.LatestVersions.Unity; bool isActionEnabled; bool isInstalled; if (string.IsNullOrEmpty(currentVersion)) { action = "Install"; currentVersion = "Not Installed"; isActionEnabled = true; isInstalled = false; } else { isInstalled = true; var comparison = network.CurrentToLatestVersionComparisonResult; // A newer version is available if (comparison == VersionComparisonResult.Lesser) { action = "Upgrade"; isActionEnabled = true; } // Current installed version is newer than latest version from DB (beta version) else if (comparison == VersionComparisonResult.Greater) { action = "Installed"; isActionEnabled = false; } // Already on the latest version else { action = "Installed"; isActionEnabled = false; } } GUILayout.Space(4); using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandHeight(false))) { GUILayout.Space(5); EditorGUILayout.LabelField(new GUIContent(network.DisplayName), networkWidthOption); EditorGUILayout.LabelField(new GUIContent(currentVersion), versionWidthOption); GUILayout.Space(3); EditorGUILayout.LabelField(new GUIContent(latestVersion), versionWidthOption); GUILayout.Space(3); GUILayout.FlexibleSpace(); if (network.RequiresUpdate) { GUILayout.Label(new GUIContent { image = alertIcon, tooltip = "Adapter not compatible, please update to the latest version." }, iconStyle); } else if ((network.Name.Equals("ADMOB_NETWORK") || network.Name.Equals("GOOGLE_AD_MANAGER_NETWORK")) && shouldShowGoogleWarning) { GUILayout.Label(new GUIContent { image = warningIcon, tooltip = "You may see unexpected errors if you use different versions of the AdMob and Google Ad Manager adapter SDKs." }, iconStyle); } GUI.enabled = isActionEnabled; if (GUILayout.Button(new GUIContent(action), fieldWidth)) { // Download the plugin. AppLovinEditorCoroutine.StartCoroutine(AppLovinIntegrationManager.Instance.DownloadPlugin(network)); } GUI.enabled = true; GUILayout.Space(2); GUI.enabled = isInstalled; if (GUILayout.Button(new GUIContent { image = uninstallIcon, tooltip = "Uninstall" }, iconStyle)) { EditorUtility.DisplayProgressBar("Integration Manager", "Deleting " + network.Name + "...", 0.5f); var pluginRoot = AppLovinIntegrationManager.MediationSpecificPluginParentDirectory; foreach (var pluginFilePath in network.PluginFilePaths) { FileUtil.DeleteFileOrDirectory(Path.Combine(pluginRoot, pluginFilePath)); } AppLovinIntegrationManager.UpdateCurrentVersions(network, pluginRoot); // Refresh UI AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); } GUI.enabled = true; GUILayout.Space(5); } if (isInstalled) { // Custom integration for AdMob where the user can enter the Android and iOS App IDs. if (network.Name.Equals("ADMOB_NETWORK")) { // Custom integration requires Google AdMob adapter version newer than android_19.0.1.0_ios_7.57.0.0. if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, "android_19.0.1.0_ios_7.57.0.0") == VersionComparisonResult.Greater) { GUILayout.BeginHorizontal(); GUILayout.Space(20); using (new EditorGUILayout.VerticalScope("box")) { string requiredVersion; string warningMessage; if (isPluginMoved) { requiredVersion = "android_19.6.0.1_ios_7.69.0.0"; warningMessage = "Looks like the MAX plugin has been moved to a different directory. This requires Google adapter version newer than " + requiredVersion + " for auto-export of AdMob App ID to work correctly."; } else { requiredVersion = "android_19.2.0.0_ios_7.61.0.0"; warningMessage = "The current version of AppLovin MAX plugin requires Google adapter version newer than " + requiredVersion + " to enable auto-export of AdMob App ID."; } GUILayout.Space(2); if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, requiredVersion) == VersionComparisonResult.Greater) { AppLovinSettings.Instance.AdMobAndroidAppId = DrawTextField("App ID (Android)", AppLovinSettings.Instance.AdMobAndroidAppId, networkWidthOption); AppLovinSettings.Instance.AdMobIosAppId = DrawTextField("App ID (iOS)", AppLovinSettings.Instance.AdMobIosAppId, networkWidthOption); } else { EditorGUILayout.HelpBox(warningMessage, MessageType.Warning); } } GUILayout.EndHorizontal(); } } // Snap requires SCAppStoreAppID to be set starting adapter version 2.0.0.0 or newer. Show a text field for the publisher to input the App ID. else if (network.Name.Equals("SNAP_NETWORK") && MaxSdkUtils.CompareVersions(network.CurrentVersions.Ios, AppLovinSettings.SnapAppStoreAppIdMinVersion) != VersionComparisonResult.Lesser) { GUILayout.BeginHorizontal(); GUILayout.Space(20); using (new EditorGUILayout.VerticalScope("box")) { GUILayout.Space(2); GUILayout.BeginHorizontal(); GUILayout.Space(4); EditorGUILayout.LabelField(new GUIContent("App Store App ID (iOS)"), networkWidthOption); GUILayout.Space(4); AppLovinSettings.Instance.SnapAppStoreAppId = EditorGUILayout.IntField(AppLovinSettings.Instance.SnapAppStoreAppId); GUILayout.Space(4); GUILayout.EndHorizontal(); GUILayout.Space(2); } GUILayout.EndHorizontal(); } } }
/// <summary> /// Returns the list of available mediation networks. /// /// Please call this method after the SDK has initialized. /// </summary> public static List <MaxSdkBase.MediatedNetworkInfo> GetAvailableMediatedNetworks() { var serializedNetworks = MaxUnityPluginClass.CallStatic <string>("getAvailableMediatedNetworks"); return(MaxSdkUtils.PropsStringsToList <MaxSdkBase.MediatedNetworkInfo>(serializedNetworks)); }