From 8596c1cb23d3ddc16509d1cddda2ec73d6a622eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20Nun=CC=83o=20Garci=CC=81a?= Date: Sun, 24 Feb 2019 22:46:07 +0100 Subject: [PATCH 1/3] [HZUNITY-73] Updated test app. --- Assets/TestScene.unity | Bin 116416 -> 97856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/TestScene.unity b/Assets/TestScene.unity index c52dc4d6a46b82868a9576cfe235a192f32f4469..98e801c0d5208320725df2a6d0e38c9b359bab92 100644 GIT binary patch literal 97856 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 z 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 From 3c33cb23e86058c94f9854d8dd7d33112abe78f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20Nun=CC=83o=20Garci=CC=81a?= Date: Sun, 24 Feb 2019 22:47:50 +0100 Subject: [PATCH 2/3] [HZUNITY-73] Updated files, so they don't have old APIs anymore. --- Assets/Plugins/Android/AndroidManifest.xml | 206 +++--------- Assets/Plugins/Heyzap/HZBannerAd.cs | 22 +- Assets/Plugins/Heyzap/HZBannerAd.cs.meta | 4 +- Assets/Plugins/Heyzap/HZDemographics.cs | 2 +- Assets/Plugins/Heyzap/HZDemographics.cs.meta | 4 +- .../Plugins/Heyzap/HZIncentivizedAd.cs.meta | 13 - Assets/Plugins/Heyzap/HZInterstitialAd.cs | 74 ++--- .../Plugins/Heyzap/HZInterstitialAd.cs.meta | 4 +- Assets/Plugins/Heyzap/HZOfferwallAd.cs | 305 ------------------ Assets/Plugins/Heyzap/HZOfferwallAd.cs.meta | 13 - .../{HZIncentivizedAd.cs => HZRewardedAd.cs} | 114 ++++--- ...HZVideoAd.cs.meta => HZRewardedAd.cs.meta} | 4 +- Assets/Plugins/Heyzap/HZShowOptions.cs | 60 +--- Assets/Plugins/Heyzap/HZShowOptions.cs.meta | 4 +- Assets/Plugins/Heyzap/HZVideoAd.cs | 215 ------------ Assets/Plugins/Heyzap/HeyzapAds.cs | 198 +++--------- Assets/Scripts/AdManager.cs | 255 ++++++--------- Assets/Scripts/ScrollingTextArea.cs | 8 +- 18 files changed, 305 insertions(+), 1200 deletions(-) delete mode 100644 Assets/Plugins/Heyzap/HZIncentivizedAd.cs.meta delete mode 100644 Assets/Plugins/Heyzap/HZOfferwallAd.cs delete mode 100644 Assets/Plugins/Heyzap/HZOfferwallAd.cs.meta rename Assets/Plugins/Heyzap/{HZIncentivizedAd.cs => HZRewardedAd.cs} (59%) rename Assets/Plugins/Heyzap/{HZVideoAd.cs.meta => HZRewardedAd.cs.meta} (77%) delete mode 100644 Assets/Plugins/Heyzap/HZVideoAd.cs diff --git a/Assets/Plugins/Android/AndroidManifest.xml b/Assets/Plugins/Android/AndroidManifest.xml index b7fc823b..46ff9fac 100644 --- a/Assets/Plugins/Android/AndroidManifest.xml +++ b/Assets/Plugins/Android/AndroidManifest.xml @@ -1,15 +1,13 @@ - + - - + - @@ -20,192 +18,64 @@ - - - + - + - + - - - + - - + + - - + - - - - - - + + - - - - + + + - - + - - - - - - - + + - - - - - + + + + - - + + - - + - - - - + + + - - - + + - - - - - + + + + + + + + + - \ No newline at end of file diff --git a/Assets/Plugins/Heyzap/HZBannerAd.cs b/Assets/Plugins/Heyzap/HZBannerAd.cs index f65f6d9d..a95fc302 100644 --- a/Assets/Plugins/Heyzap/HZBannerAd.cs +++ b/Assets/Plugins/Heyzap/HZBannerAd.cs @@ -36,10 +36,10 @@ namespace Heyzap { /// Use this class to show banner ads. /// public class HZBannerAd : MonoBehaviour { - public delegate void AdDisplayListener(string state, string tag); + public delegate void AdDisplayListener(string state, string placement); private static AdDisplayListener adDisplayListener; - private static HZBannerAd _instance = null; + private static HZBannerAd _instance; // these are reproduced here for convenience since they were here in old SDK versions /// @@ -70,7 +70,7 @@ public static void ShowWithOptions(HZBannerShowOptions showOptions) { #endif #else UnityEngine.Debug.LogWarning("Call received to show an HZBannerAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Tag)); + _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Placement)); #endif } @@ -138,18 +138,18 @@ public static void InitReceiver(){ public void SetCallback(string message) { string[] displayStateParams = message.Split(','); - HZBannerAd.SetCallbackStateAndTag(displayStateParams[0], displayStateParams[1]); + HZBannerAd.SetCallbackStateAndPlacement(displayStateParams[0], displayStateParams[1]); } - protected static void SetCallbackStateAndTag(string state, string tag) { + protected static void SetCallbackStateAndPlacement(string state, string placement) { if (HZBannerAd.adDisplayListener != null) { - HZBannerAd.adDisplayListener(state, tag); + HZBannerAd.adDisplayListener(state, placement); } } - protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { + protected static IEnumerator InvokeCallbackNextFrame(string state, string placement) { yield return null; // wait a frame - HZBannerAd.SetCallbackStateAndTag(state, tag); + HZBannerAd.SetCallbackStateAndPlacement(state, placement); } #endregion } @@ -158,7 +158,7 @@ protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { #if UNITY_IPHONE && !UNITY_EDITOR public class HZBannerAdIOS : MonoBehaviour { [DllImport ("__Internal")] - private static extern void hz_ads_show_banner(string position, string tag); + private static extern void hz_ads_show_banner(string position, string placement); [DllImport ("__Internal")] private static extern bool hz_ads_hide_banner(); [DllImport ("__Internal")] @@ -168,7 +168,7 @@ public class HZBannerAdIOS : MonoBehaviour { public static void ShowWithOptions(HZBannerShowOptions showOptions) { - hz_ads_show_banner(showOptions.Position, showOptions.Tag); + hz_ads_show_banner(showOptions.Position, showOptions.Placement); } public static bool Hide() { @@ -230,7 +230,7 @@ public static void ShowWithOptions(HZBannerShowOptions showOptions) { AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("showBanner", showOptions.Tag, showOptions.Position); + jc.CallStatic("showBanner", showOptions.Placement, showOptions.Position); } } diff --git a/Assets/Plugins/Heyzap/HZBannerAd.cs.meta b/Assets/Plugins/Heyzap/HZBannerAd.cs.meta index d59aa90f..78d1089b 100644 --- a/Assets/Plugins/Heyzap/HZBannerAd.cs.meta +++ b/Assets/Plugins/Heyzap/HZBannerAd.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 25a1dc327650847528640f0265582837 -timeCreated: 1536245015 +guid: 827cff1babcbf45f1b7c6600fb062a97 +timeCreated: 1535874635 licenseType: Free MonoImporter: externalObjects: {} diff --git a/Assets/Plugins/Heyzap/HZDemographics.cs b/Assets/Plugins/Heyzap/HZDemographics.cs index 1c96bbcb..c8706444 100644 --- a/Assets/Plugins/Heyzap/HZDemographics.cs +++ b/Assets/Plugins/Heyzap/HZDemographics.cs @@ -37,7 +37,7 @@ namespace Heyzap { /// public class HZDemographics : MonoBehaviour { - private static HZDemographics _instance = null; + private static HZDemographics _instance; public enum Gender { UNKNOWN, diff --git a/Assets/Plugins/Heyzap/HZDemographics.cs.meta b/Assets/Plugins/Heyzap/HZDemographics.cs.meta index c9ae2f67..41883a38 100644 --- a/Assets/Plugins/Heyzap/HZDemographics.cs.meta +++ b/Assets/Plugins/Heyzap/HZDemographics.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 28bae634cde55462aa4bea2b67992b86 -timeCreated: 1536245015 +guid: 5ce66c985128c464aba340efbbfca3e2 +timeCreated: 1535874635 licenseType: Free MonoImporter: externalObjects: {} diff --git a/Assets/Plugins/Heyzap/HZIncentivizedAd.cs.meta b/Assets/Plugins/Heyzap/HZIncentivizedAd.cs.meta deleted file mode 100644 index 30fc11be..00000000 --- a/Assets/Plugins/Heyzap/HZIncentivizedAd.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 37b6818a823c348b6a2d204e5ee0a83b -timeCreated: 1536245015 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Heyzap/HZInterstitialAd.cs b/Assets/Plugins/Heyzap/HZInterstitialAd.cs index e50c9e58..a1ce0946 100644 --- a/Assets/Plugins/Heyzap/HZInterstitialAd.cs +++ b/Assets/Plugins/Heyzap/HZInterstitialAd.cs @@ -35,9 +35,9 @@ namespace Heyzap { /// public class HZInterstitialAd : MonoBehaviour { - public delegate void AdDisplayListener(string state, string tag); + public delegate void AdDisplayListener(string state, string placement); private static AdDisplayListener adDisplayListener; - private static HZInterstitialAd _instance = null; + private static HZInterstitialAd _instance; //provided since JS can't use default parameters /// @@ -63,57 +63,53 @@ public static void ShowWithOptions(HZShowOptions showOptions) { HZInterstitialAdIOS.ShowWithOptions(showOptions); #endif #else - UnityEngine.Debug.LogWarning("Call received to show an HZInterstitalAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Tag)); + UnityEngine.Debug.LogWarning("Call received to show an HZInterstitialAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); + _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Placement)); #endif } //provided since JS can't use default parameters /// - /// Fetches an ad for the default ad tag. + /// Fetches an ad for the default placement name. /// public static void Fetch() { HZInterstitialAd.Fetch(null); } /// - /// Fetches an ad for the given ad tag. + /// Fetches an ad for the given placement name. /// - /// The ad tag to fetch an ad for. - public static void Fetch(string tag) { - tag = HeyzapAds.TagForString(tag); - + /// The placement name to fetch an ad for. + public static void Fetch(string placement) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID - HZInterstitialAdAndroid.Fetch(tag); + HZInterstitialAdAndroid.Fetch(placement); #elif UNITY_IPHONE - HZInterstitialAdIOS.Fetch(tag); + HZInterstitialAdIOS.Fetch(placement); #endif #else UnityEngine.Debug.LogWarning("Call received to fetch an HZInterstitialAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, tag)); + _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, placement)); #endif } - + //provided since JS can't use default parameters /// - /// Returns whether or not an ad is available for the default ad tag. + /// Returns whether or not an ad is available for the default placement name. /// /// true, if an ad is available, false otherwise. public static bool IsAvailable() { return HZInterstitialAd.IsAvailable(null); } /// - /// Returns whether or not an ad is available for the given ad tag. + /// Returns whether or not an ad is available for the given placement name. /// /// true, if an ad is available, false otherwise. - public static bool IsAvailable(string tag) { - tag = HeyzapAds.TagForString(tag); - + public static bool IsAvailable(string placement) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID - return HZInterstitialAdAndroid.IsAvailable(tag); + return HZInterstitialAdAndroid.IsAvailable(placement); #elif UNITY_IPHONE - return HZInterstitialAdIOS.IsAvailable(tag); + return HZInterstitialAdIOS.IsAvailable(placement); #endif #else return false; @@ -183,18 +179,18 @@ public static void InitReceiver(){ public void SetCallback(string message) { string[] displayStateParams = message.Split(','); - HZInterstitialAd.SetCallbackStateAndTag(displayStateParams[0], displayStateParams[1]); + HZInterstitialAd.SetCallbackStateAndPlacement(displayStateParams[0], displayStateParams[1]); } - protected static void SetCallbackStateAndTag(string state, string tag) { + protected static void SetCallbackStateAndPlacement(string state, string placement) { if (HZInterstitialAd.adDisplayListener != null) { - HZInterstitialAd.adDisplayListener(state, tag); + HZInterstitialAd.adDisplayListener(state, placement); } } - protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { + protected static IEnumerator InvokeCallbackNextFrame(string state, string placement) { yield return null; // wait a frame - HZInterstitialAd.SetCallbackStateAndTag(state, tag); + HZInterstitialAd.SetCallbackStateAndPlacement(state, placement); } #endregion } @@ -203,11 +199,11 @@ protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { #if UNITY_IPHONE && !UNITY_EDITOR public class HZInterstitialAdIOS { [DllImport ("__Internal")] - private static extern void hz_ads_show_interstitial(string tag); + private static extern void hz_ads_show_interstitial(string placement); [DllImport ("__Internal")] - private static extern void hz_ads_fetch_interstitial(string tag); + private static extern void hz_ads_fetch_interstitial(string placement); [DllImport ("__Internal")] - private static extern bool hz_ads_interstitial_is_available(string tag); + private static extern bool hz_ads_interstitial_is_available(string placement); [DllImport ("__Internal")] private static extern void hz_fetch_chartboost_for_location(string location); [DllImport ("__Internal")] @@ -217,15 +213,15 @@ public class HZInterstitialAdIOS { public static void ShowWithOptions(HZShowOptions showOptions) { - hz_ads_show_interstitial(showOptions.Tag); + hz_ads_show_interstitial(showOptions.Placement); } - public static void Fetch(string tag) { - hz_ads_fetch_interstitial(tag); + public static void Fetch(string placement) { + hz_ads_fetch_interstitial(placement); } - public static bool IsAvailable(string tag) { - return hz_ads_interstitial_is_available(tag); + public static bool IsAvailable(string placement) { + return hz_ads_interstitial_is_available(placement); } @@ -253,25 +249,25 @@ public static void ShowWithOptions(HZShowOptions showOptions) { AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("showInterstitial", showOptions.Tag); + jc.CallStatic("showInterstitial", showOptions.Placement); } } - public static void Fetch(string tag="default") { + public static void Fetch(string placement) { if(Application.platform != RuntimePlatform.Android) return; AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("fetchInterstitial", tag); + jc.CallStatic("fetchInterstitial", placement); } } - public static Boolean IsAvailable(string tag="default") { + public static Boolean IsAvailable(string placement) { if(Application.platform != RuntimePlatform.Android) return false; AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - return jc.CallStatic("isInterstitialAvailable", tag); + return jc.CallStatic("isInterstitialAvailable", placement); } } diff --git a/Assets/Plugins/Heyzap/HZInterstitialAd.cs.meta b/Assets/Plugins/Heyzap/HZInterstitialAd.cs.meta index ff67e22d..9160ea9b 100644 --- a/Assets/Plugins/Heyzap/HZInterstitialAd.cs.meta +++ b/Assets/Plugins/Heyzap/HZInterstitialAd.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 64959f833348d4e4ea972aa0919fb0cd -timeCreated: 1536245015 +guid: 562df0be3393744a5aa789fdaf832e61 +timeCreated: 1535874635 licenseType: Free MonoImporter: externalObjects: {} diff --git a/Assets/Plugins/Heyzap/HZOfferwallAd.cs b/Assets/Plugins/Heyzap/HZOfferwallAd.cs deleted file mode 100644 index 5614d855..00000000 --- a/Assets/Plugins/Heyzap/HZOfferwallAd.cs +++ /dev/null @@ -1,305 +0,0 @@ -// -// HZOfferWallAd.cs -// -// Copyright 2017 Heyzap, Inc. All Rights Reserved -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// - -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System; - -namespace Heyzap { - /// - /// Use this class to show offerwall ads. - /// - public class HZOfferWallAd : MonoBehaviour { - - public delegate void AdDisplayListener(string state, string tag); - private static AdDisplayListener adDisplayListener; - - public delegate void VirtualCurrencyResponseListener(VirtualCurrencyResponse response); - private static VirtualCurrencyResponseListener virtualCurrencyResponseListener; - - public delegate void VirtualCurrencyErrorListener(string errorMsg); - private static VirtualCurrencyErrorListener virtualCurrencyErrorListener; - - private static HZOfferWallAd _instance = null; - - //provided since JS can't use default parameters - /// - /// Shows an ad with the default options. - /// - public static void Show() { - HZOfferWallAd.ShowWithOptions(null); - } - /// - /// Shows an ad with the given options. - /// - /// The options to show the ad with, or the default options if null - public static void ShowWithOptions(HZOfferWallShowOptions showOptions) { - if (showOptions == null) { - showOptions = new HZOfferWallShowOptions(); - } - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HZOfferWallAdAndroid.ShowWithOptions(showOptions); - #elif UNITY_IPHONE - HZOfferWallAdIOS.ShowWithOptions(showOptions); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to show an HZOfferWallAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Tag)); - #endif - } - - //provided since JS can't use default parameters - /// - /// Fetches an ad for the default ad tag. - /// - public static void Fetch() { - HZOfferWallAd.Fetch(null); - } - /// - /// Fetches an ad for the given ad tag. - /// - /// The ad tag to fetch an ad for. - public static void Fetch(string tag) { - tag = HeyzapAds.TagForString(tag); - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HZOfferWallAdAndroid.Fetch(tag); - #elif UNITY_IPHONE - HZOfferWallAdIOS.Fetch(tag); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to fetch an HZOfferWallAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, tag)); - #endif - } - - //provided since JS can't use default parameters - /// - /// Returns whether or not an ad is available for the default ad tag. - /// - /// true, if an ad is available, false otherwise. - public static bool IsAvailable() { - return HZOfferWallAd.IsAvailable(null); - } - /// - /// Returns whether or not an ad is available for the given ad tag. - /// - /// true, if an ad is available, false otherwise. - public static bool IsAvailable(string tag) { - tag = HeyzapAds.TagForString(tag); - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - return HZOfferWallAdAndroid.IsAvailable(tag); - #elif UNITY_IPHONE - return HZOfferWallAdIOS.IsAvailable(tag); - #endif - #else - return false; - #endif - } - - /// - /// Sends a request to the Virtual Currency Server to see if the user has earned virtual currency since the last request. - /// The `VirtualCurrencyResponseListener` or the `VirtualCurrencyErrorListener` will receive the response once received. - /// - /// The ID of the currency to request information about. Setting this to NULL will request the default currency. - public static void RequestDeltaOfCurrency(string currencyId) { - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HZOfferWallAdAndroid.RequestDeltaOfCurrency(currencyId); - #elif UNITY_IPHONE - HZOfferWallAdIOS.RequestDeltaOfCurrency(currencyId); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to request a VCS update on HZOfferWallAd, but the SDK does not function in the editor. You must use a device/emulator to do this."); - _instance.StartCoroutine(InvokeVCSErrorNextFrame("only_works_on_device")); - #endif - } - - /// - /// Sets the AdDisplayListener for offerwall ads, which will receive callbacks regarding the state of offerwall ads. - /// - public static void SetDisplayListener(AdDisplayListener listener) { - HZOfferWallAd.adDisplayListener = listener; - } - - /// - /// Sets the VirtualCurrencyResponseListener for offerwall ads, which will receive callbacks in response to a request for a VCS update. - /// - public static void SetVirtualCurrencyResponseListener(VirtualCurrencyResponseListener listener) { - HZOfferWallAd.virtualCurrencyResponseListener = listener; - } - - /// - /// Sets the VirtualCurrencyErrorListener for offerwall ads, which will receive callbacks regarding errors received after requesting virtual currency updates from the server. - /// - public static void SetVirtualCurrencyErrorListener(VirtualCurrencyErrorListener listener) { - HZOfferWallAd.virtualCurrencyErrorListener = listener; - } - - #region Internal methods - public static void InitReceiver(){ - if (_instance == null) { - GameObject receiverObject = new GameObject("HZOfferWallAd"); - DontDestroyOnLoad(receiverObject); - _instance = receiverObject.AddComponent(); - } - } - - // received from native SDK - public void SetCallback(string message) { - string[] displayStateParams = message.Split(','); - HZOfferWallAd.SetCallbackStateAndTag(displayStateParams[0], displayStateParams[1]); - } - protected static void SetCallbackStateAndTag(string state, string tag) { - if (HZOfferWallAd.adDisplayListener != null) { - HZOfferWallAd.adDisplayListener(state, tag); - } - } - - // used for in-editor functionality - protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { - yield return null; // wait a frame - HZOfferWallAd.SetCallbackStateAndTag(state, tag); - } - - // received from native SDK - public void VCSResponse(string jsonString) { - HZOfferWallAd.SendVCSResponse(jsonString); - } - protected static void SendVCSResponse(string jsonString) { - if (HZOfferWallAd.virtualCurrencyResponseListener != null) { - VirtualCurrencyResponse response = (VirtualCurrencyResponse)JsonUtility.FromJson(jsonString); - HZOfferWallAd.virtualCurrencyResponseListener(response); - } - } - - // received from native SDK - public void VCSError(string errorMsg) { - HZOfferWallAd.SendVCSError(errorMsg); - } - protected static void SendVCSError(string errorMsg) { - if (HZOfferWallAd.virtualCurrencyErrorListener != null) { - HZOfferWallAd.virtualCurrencyErrorListener(errorMsg); - } - } - - // used for in-editor functionality - protected static IEnumerator InvokeVCSErrorNextFrame(string errorMsg) { - yield return null; // wait a frame - HZOfferWallAd.SendVCSError(errorMsg); - } - #endregion - } - - #region Platform-specific translations - #if UNITY_IPHONE && !UNITY_EDITOR - public class HZOfferWallAdIOS : MonoBehaviour { - [DllImport ("__Internal")] - private static extern void hz_ads_show_offerwall(string tag, bool shouldCloseAfterFirstClick); - [DllImport ("__Internal")] - private static extern void hz_ads_fetch_offerwall(string tag); - [DllImport ("__Internal")] - private static extern bool hz_ads_offerwall_is_available(string tag); - [DllImport ("__Internal")] - private static extern bool hz_ads_virtual_currency_request(string currencyId); - - - public static void ShowWithOptions(HZOfferWallShowOptions showOptions) { - hz_ads_show_offerwall(showOptions.Tag, showOptions.ShouldCloseAfterFirstClick); - } - - public static void Fetch(string tag) { - hz_ads_fetch_offerwall(tag); - } - - public static bool IsAvailable(string tag) { - return hz_ads_offerwall_is_available(tag); - } - - public static void RequestDeltaOfCurrency(string currencyId) { - hz_ads_virtual_currency_request(currencyId); - } - } - #endif - - #if UNITY_ANDROID && !UNITY_EDITOR - public class HZOfferWallAdAndroid : MonoBehaviour { - - public static void ShowWithOptions(HZOfferWallShowOptions showOptions) { - if(Application.platform != RuntimePlatform.Android) return; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("showOfferWall", showOptions.Tag, showOptions.ShouldCloseAfterFirstClick); - } - } - - public static void Fetch(string tag) { - if(Application.platform != RuntimePlatform.Android) return; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("fetchOfferWall", tag); - } - } - - public static Boolean IsAvailable(string tag) { - if(Application.platform != RuntimePlatform.Android) return false; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - return jc.CallStatic("isOfferWallAvailable", tag); - } - } - - public static void RequestDeltaOfCurrency(string currencyId) { - if(Application.platform != RuntimePlatform.Android) return; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("virtualCurrencyRequest", currencyId); - } - } - } - #endif - #endregion - - [Serializable] - public class VirtualCurrencyResponse { - public string LatestTransactionID; - public string CurrencyID; - public string CurrencyName; - public float DeltaOfCurrency; - } -} diff --git a/Assets/Plugins/Heyzap/HZOfferwallAd.cs.meta b/Assets/Plugins/Heyzap/HZOfferwallAd.cs.meta deleted file mode 100644 index add5d212..00000000 --- a/Assets/Plugins/Heyzap/HZOfferwallAd.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 69fcf5bc050d94853a6b8e3d7c2608a1 -timeCreated: 1536245015 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Heyzap/HZIncentivizedAd.cs b/Assets/Plugins/Heyzap/HZRewardedAd.cs similarity index 59% rename from Assets/Plugins/Heyzap/HZIncentivizedAd.cs rename to Assets/Plugins/Heyzap/HZRewardedAd.cs index 1cc8ed2e..ec6234c5 100644 --- a/Assets/Plugins/Heyzap/HZIncentivizedAd.cs +++ b/Assets/Plugins/Heyzap/HZRewardedAd.cs @@ -1,4 +1,4 @@ -// HZIncentivizedAd.cs +// HZRewardedAd.cs // // Copyright 2015 Heyzap, Inc. All Rights Reserved // @@ -32,37 +32,35 @@ namespace Heyzap { /// - /// Use this class to show incentivized (rewarded) video ads. + /// Use this class to show rewarded ads. /// - public class HZIncentivizedAd : MonoBehaviour { + public class HZRewardedAd : MonoBehaviour { - public delegate void AdDisplayListener(string state, string tag); + public delegate void AdDisplayListener(string state, string placement); private static AdDisplayListener adDisplayListener; - private static HZIncentivizedAd _instance = null; + private static HZRewardedAd _instance; //provided since JS can't use default parameters /// - /// Fetches an ad for the default ad tag. + /// Requests an ad for the default placement name. /// - public static void Fetch() { - HZIncentivizedAd.Fetch(null); + public static void Request() { + HZRewardedAd.Request(null); } /// - /// Fetches an ad for the given ad tag. + /// Fetches an ad for the given placement name. /// - /// The ad tag to fetch an ad for. - public static void Fetch(string tag) { - tag = HeyzapAds.TagForString(tag); - + /// The placement name to request an ad for. + public static void Request(string placement) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID - HZIncentivizedAdAndroid.Fetch(tag); + HZRewardedAdAndroid.Fetch(placement); #elif UNITY_IPHONE - HZIncentivizedAdIOS.Fetch(tag); + HZRewardedAdIOS.Fetch(placement); #endif #else - UnityEngine.Debug.LogWarning("Call received to fetch an HZIncentivizedAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, tag)); + UnityEngine.Debug.LogWarning("Call received to fetch an HZRewardedAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); + _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, placement)); #endif } @@ -71,49 +69,47 @@ public static void Fetch(string tag) { /// Shows an ad with the default options. /// public static void Show() { - HZIncentivizedAd.ShowWithOptions(null); + HZRewardedAd.ShowWithOptions(null); } /// /// Shows an ad with the given options. /// /// The options to show the ad with, or the default options if null - public static void ShowWithOptions(HZIncentivizedShowOptions showOptions) { + public static void ShowWithOptions(HZRewardedShowOptions showOptions) { if (showOptions == null) { - showOptions = new HZIncentivizedShowOptions(); + showOptions = new HZRewardedShowOptions(); } #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID - HZIncentivizedAdAndroid.ShowWithOptions(showOptions); + HZRewardedAdAndroid.ShowWithOptions(showOptions); #elif UNITY_IPHONE - HZIncentivizedAdIOS.ShowWithOptions(showOptions); + HZRewardedAdIOS.ShowWithOptions(showOptions); #endif #else - UnityEngine.Debug.LogWarning("Call received to show an HZIncentivizedAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Tag)); + UnityEngine.Debug.LogWarning("Call received to show an HZRewardedAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); + _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Placement)); #endif } //provided since JS can't use default parameters /// - /// Returns whether or not an ad is available for the default ad tag. + /// Returns whether or not an ad is available for the default placement name. /// /// true, if an ad is available, false otherwise. public static bool IsAvailable() { - return HZIncentivizedAd.IsAvailable(null); + return HZRewardedAd.IsAvailable(null); } /// - /// Returns whether or not an ad is available for the given ad tag. + /// Returns whether or not an ad is available for the given placement name. /// /// true, if an ad is available, false otherwise. - public static bool IsAvailable(string tag) { - tag = HeyzapAds.TagForString(tag); - + public static bool IsAvailable(string placement) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID - return HZIncentivizedAdAndroid.IsAvailable(tag); + return HZRewardedAdAndroid.IsAvailable(placement); #elif UNITY_IPHONE - return HZIncentivizedAdIOS.IsAvailable(tag); + return HZRewardedAdIOS.IsAvailable(placement); #endif #else return false; @@ -121,91 +117,91 @@ public static bool IsAvailable(string tag) { } /// - /// Sets the AdDisplayListener for incentivized ads, which will receive callbacks regarding the state of incentivized ads. + /// Sets the AdDisplayListener for rewarded ads, which will receive callbacks regarding the state of rewarded ads. /// public static void SetDisplayListener(AdDisplayListener listener) { - HZIncentivizedAd.adDisplayListener = listener; + HZRewardedAd.adDisplayListener = listener; } #region Internal methods public static void InitReceiver(){ if (_instance == null) { - GameObject receiverObject = new GameObject("HZIncentivizedAd"); + GameObject receiverObject = new GameObject("HZRewardedAd"); DontDestroyOnLoad(receiverObject); - _instance = receiverObject.AddComponent(); + _instance = receiverObject.AddComponent(); } } public void SetCallback(string message) { string[] displayStateParams = message.Split(','); - HZIncentivizedAd.SetCallbackStateAndTag(displayStateParams[0], displayStateParams[1]); + HZRewardedAd.SetCallbackStateAndPlacement(displayStateParams[0], displayStateParams[1]); } - protected static void SetCallbackStateAndTag(string state, string tag) { - if (HZIncentivizedAd.adDisplayListener != null) { - HZIncentivizedAd.adDisplayListener(state, tag); + protected static void SetCallbackStateAndPlacement(string state, string placement) { + if (HZRewardedAd.adDisplayListener != null) { + HZRewardedAd.adDisplayListener(state, placement); } } - protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { + protected static IEnumerator InvokeCallbackNextFrame(string state, string placement) { yield return null; // wait a frame - HZIncentivizedAd.SetCallbackStateAndTag(state, tag); + HZRewardedAd.SetCallbackStateAndPlacement(state, placement); } #endregion } #region Platform-specific translations #if UNITY_IPHONE && !UNITY_EDITOR - public class HZIncentivizedAdIOS : MonoBehaviour { + public class HZRewardedAdIOS : MonoBehaviour { [DllImport ("__Internal")] - private static extern void hz_ads_show_incentivized_with_custom_info(string tag, string incentivizedInfo); + private static extern void hz_ads_show_rewarded_with_custom_info(string placement, string rewardedInfo); [DllImport ("__Internal")] - private static extern void hz_ads_fetch_incentivized(string tag); + private static extern void hz_ads_fetch_rewarded(string placement); [DllImport ("__Internal")] - private static extern bool hz_ads_incentivized_is_available(string tag); + private static extern bool hz_ads_rewarded_is_available(string placement); - public static void ShowWithOptions(HZIncentivizedShowOptions showOptions) { - hz_ads_show_incentivized_with_custom_info(showOptions.Tag, showOptions.IncentivizedInfo); + public static void ShowWithOptions(HZRewardedShowOptions showOptions) { + hz_ads_show_rewarded_with_custom_info(showOptions.Placement, showOptions.RewardedInfo); } - public static void Fetch(string tag) { - hz_ads_fetch_incentivized(tag); + public static void Fetch(string placement) { + hz_ads_fetch_rewarded(placement); } - public static bool IsAvailable(string tag) { - return hz_ads_incentivized_is_available(tag); + public static bool IsAvailable(string placement) { + return hz_ads_rewarded_is_available(placement); } } #endif #if UNITY_ANDROID && !UNITY_EDITOR - public class HZIncentivizedAdAndroid : MonoBehaviour { + public class HZRewardedAdAndroid : MonoBehaviour { - public static void ShowWithOptions(HZIncentivizedShowOptions showOptions) { + public static void ShowWithOptions(HZRewardedShowOptions showOptions) { if(Application.platform != RuntimePlatform.Android) return; AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("showIncentivized", showOptions.Tag, showOptions.IncentivizedInfo); + jc.CallStatic("showRewarded", showOptions.Placement, showOptions.RewardedInfo); } } - public static void Fetch(string tag) { + public static void Fetch(string placement) { if(Application.platform != RuntimePlatform.Android) return; AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("fetchIncentivized", tag); + jc.CallStatic("fetchRewarded", placement); } } - public static Boolean IsAvailable(string tag) { + public static Boolean IsAvailable(string placement) { if(Application.platform != RuntimePlatform.Android) return false; AndroidJNIHelper.debug = false; using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - return jc.CallStatic("isIncentivizedAvailable", tag); + return jc.CallStatic("isRewardedAvailable", placement); } } } diff --git a/Assets/Plugins/Heyzap/HZVideoAd.cs.meta b/Assets/Plugins/Heyzap/HZRewardedAd.cs.meta similarity index 77% rename from Assets/Plugins/Heyzap/HZVideoAd.cs.meta rename to Assets/Plugins/Heyzap/HZRewardedAd.cs.meta index 595b6e97..6290777d 100644 --- a/Assets/Plugins/Heyzap/HZVideoAd.cs.meta +++ b/Assets/Plugins/Heyzap/HZRewardedAd.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: b3fd6984a505949a2a9cb6552a21c45d -timeCreated: 1536245015 +guid: 8b10443bf619e4c6bb752b212115a36d +timeCreated: 1535874635 licenseType: Free MonoImporter: externalObjects: {} diff --git a/Assets/Plugins/Heyzap/HZShowOptions.cs b/Assets/Plugins/Heyzap/HZShowOptions.cs index 482e90d8..bf76b1d2 100644 --- a/Assets/Plugins/Heyzap/HZShowOptions.cs +++ b/Assets/Plugins/Heyzap/HZShowOptions.cs @@ -8,49 +8,43 @@ namespace Heyzap { public class HZShowOptions { /// - /// An identifier for the location of the ad, which you can use to disable the ad from your dashboard. If not specified the tag "default" is always used. - /// Guaranteed to be non-null - will be set to the default value if the setter is called with `null`. + /// An identifier for the location of the ad, which you can use to disable the ad from your dashboard. /// - /// The tag. - public string Tag { + /// The placement name. + public string Placement { get { - return tag; + return placement; } set { - if (value != null) { - tag = value; - } else { - tag = HeyzapAds.DEFAULT_TAG; - } + placement = value; } } - private string tag = HeyzapAds.DEFAULT_TAG; + private string placement; } /// - /// A set of options that describes how to show an incentivized ad. + /// A set of options that describes how to show an rewarded ad. /// - public class HZIncentivizedShowOptions : HZShowOptions { - private const string DEFAULT_INCENTIVIZED_INFO = ""; + public class HZRewardedShowOptions : HZShowOptions { + private const string DEFAULT_REWARDED_INFO = ""; /// - /// When an incentivized video is completed, this string will be sent to your server via our server-to-server callbacks. Set it to anything you want to pass to your server regarding this incentivized video view (i.e.: a username, user ID, level name, etc.), or leave it empty if you don't need to use it / aren't using server callbacks for incentivized video. + /// When an rewarded video is completed, this string will be sent to your server via our server-to-server callbacks. Set it to anything you want to pass to your server regarding this rewarded video view (i.e.: a username, user ID, level name, etc.), or leave it empty if you don't need to use it / aren't using server callbacks for rewarded video. /// More information about using this feature can be found at https://developers.heyzap.com/docs/advanced-publishing . - /// Guaranteed to be non-null - will be set to the default value if the setter is called with `null`. /// - public string IncentivizedInfo { + public string RewardedInfo { get { - return incentivizedInfo; + return rewardedInfo; } set { if (value != null) { - incentivizedInfo = value; + rewardedInfo = value; } else { - incentivizedInfo = HZIncentivizedShowOptions.DEFAULT_INCENTIVIZED_INFO; + rewardedInfo = HZRewardedShowOptions.DEFAULT_REWARDED_INFO; } } } - private string incentivizedInfo = HZIncentivizedShowOptions.DEFAULT_INCENTIVIZED_INFO; + private string rewardedInfo = HZRewardedShowOptions.DEFAULT_REWARDED_INFO; } /// @@ -86,26 +80,4 @@ public string Position { } private string position = HZBannerShowOptions.DEFAULT_POSITION; } - - /// - /// A set of options that describes how to show an offerwall ad. - /// - public class HZOfferWallShowOptions : HZShowOptions { - private const bool DEFAULT_SHOULD_CLOSE_AFTER_FIRST_CLICK = true; - - /// - /// When an incentivized video is completed, this string will be sent to your server via our server-to-server callbacks. Set it to anything you want to pass to your server regarding this incentivized video view (i.e.: a username, user ID, level name, etc.), or leave it empty if you don't need to use it / aren't using server callbacks for incentivized video. - /// More information about using this feature can be found at https://developers.heyzap.com/docs/advanced-publishing . - /// Guaranteed to be non-null - will be set to the default value if the setter is called with `null`. - /// - public bool ShouldCloseAfterFirstClick { - get { - return shouldCloseAfterFirstClick; - } - set { - shouldCloseAfterFirstClick = value; - } - } - private bool shouldCloseAfterFirstClick = HZOfferWallShowOptions.DEFAULT_SHOULD_CLOSE_AFTER_FIRST_CLICK; - } -} \ No newline at end of file +} diff --git a/Assets/Plugins/Heyzap/HZShowOptions.cs.meta b/Assets/Plugins/Heyzap/HZShowOptions.cs.meta index 9c0b131b..6b9c8e12 100644 --- a/Assets/Plugins/Heyzap/HZShowOptions.cs.meta +++ b/Assets/Plugins/Heyzap/HZShowOptions.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 827013d160de44f5b9d253fb672a122f -timeCreated: 1536245015 +guid: bbc60f2f830064cad9122ee278796335 +timeCreated: 1535874635 licenseType: Free MonoImporter: externalObjects: {} diff --git a/Assets/Plugins/Heyzap/HZVideoAd.cs b/Assets/Plugins/Heyzap/HZVideoAd.cs deleted file mode 100644 index 560c7bbd..00000000 --- a/Assets/Plugins/Heyzap/HZVideoAd.cs +++ /dev/null @@ -1,215 +0,0 @@ -// -// HZVideoAd.cs -// -// Copyright 2015 Heyzap, Inc. All Rights Reserved -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// - -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System; - -namespace Heyzap { - /// - /// Use this class to show video ads. - /// - public class HZVideoAd : MonoBehaviour { - - public delegate void AdDisplayListener(string state, string tag); - private static AdDisplayListener adDisplayListener; - private static HZVideoAd _instance = null; - - //provided since JS can't use default parameters - /// - /// Shows an ad with the default options. - /// - public static void Show() { - HZVideoAd.ShowWithOptions(null); - } - /// - /// Shows an ad with the given options. - /// - /// The options to show the ad with, or the default options if null - public static void ShowWithOptions(HZShowOptions showOptions) { - if (showOptions == null) { - showOptions = new HZShowOptions(); - } - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HZVideoAdAndroid.ShowWithOptions(showOptions); - #elif UNITY_IPHONE - HZVideoAdIOS.ShowWithOptions(showOptions); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to show an HZVideoAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.SHOW_FAILED, showOptions.Tag)); - #endif - } - - //provided since JS can't use default parameters - /// - /// Fetches an ad for the default ad tag. - /// - public static void Fetch() { - HZVideoAd.Fetch(null); - } - /// - /// Fetches an ad for the given ad tag. - /// - /// The ad tag to fetch an ad for. - public static void Fetch(string tag) { - tag = HeyzapAds.TagForString(tag); - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HZVideoAdAndroid.Fetch(tag); - #elif UNITY_IPHONE - HZVideoAdIOS.Fetch(tag); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to fetch an HZVideoAd, but the SDK does not function in the editor. You must use a device/emulator to fetch/show ads."); - _instance.StartCoroutine(InvokeCallbackNextFrame(HeyzapAds.NetworkCallback.FETCH_FAILED, tag)); - #endif - } - - //provided since JS can't use default parameters - /// - /// Returns whether or not an ad is available for the default ad tag. - /// - /// true, if an ad is available, false otherwise. - public static bool IsAvailable() { - return HZVideoAd.IsAvailable(null); - } - /// - /// Returns whether or not an ad is available for the given ad tag. - /// - /// true, if an ad is available, false otherwise. - public static bool IsAvailable(string tag) { - tag = HeyzapAds.TagForString(tag); - - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - return HZVideoAdAndroid.IsAvailable(tag); - #elif UNITY_IPHONE - return HZVideoAdIOS.IsAvailable(tag); - #endif - #else - return false; - #endif - } - - /// - /// Sets the AdDisplayListener for video ads, which will receive callbacks regarding the state of video ads. - /// - public static void SetDisplayListener(AdDisplayListener listener) { - HZVideoAd.adDisplayListener = listener; - } - - #region Internal methods - public static void InitReceiver(){ - if (_instance == null) { - GameObject receiverObject = new GameObject("HZVideoAd"); - DontDestroyOnLoad(receiverObject); - _instance = receiverObject.AddComponent(); - } - } - - public void SetCallback(string message) { - string[] displayStateParams = message.Split(','); - HZVideoAd.SetCallbackStateAndTag(displayStateParams[0], displayStateParams[1]); - } - - protected static void SetCallbackStateAndTag(string state, string tag) { - if (HZVideoAd.adDisplayListener != null) { - HZVideoAd.adDisplayListener(state, tag); - } - } - - protected static IEnumerator InvokeCallbackNextFrame(string state, string tag) { - yield return null; // wait a frame - HZVideoAd.SetCallbackStateAndTag(state, tag); - } - #endregion - } - - #region Platform-specific translations - #if UNITY_IPHONE && !UNITY_EDITOR - public class HZVideoAdIOS : MonoBehaviour { - [DllImport ("__Internal")] - private static extern void hz_ads_show_video(string tag); - [DllImport ("__Internal")] - private static extern void hz_ads_fetch_video(string tag); - [DllImport ("__Internal")] - private static extern bool hz_ads_video_is_available(string tag); - - - public static void ShowWithOptions(HZShowOptions showOptions) { - hz_ads_show_video(showOptions.Tag); - } - - public static void Fetch(string tag) { - hz_ads_fetch_video(tag); - } - - public static bool IsAvailable(string tag) { - return hz_ads_video_is_available(tag); - } - } - #endif - - #if UNITY_ANDROID && !UNITY_EDITOR - public class HZVideoAdAndroid : MonoBehaviour { - - public static void ShowWithOptions(HZShowOptions showOptions) { - if(Application.platform != RuntimePlatform.Android) return; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("showVideo", showOptions.Tag); - } - } - - public static void Fetch(string tag) { - if(Application.platform != RuntimePlatform.Android) return; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("fetchVideo", tag); - } - } - - public static Boolean IsAvailable(string tag) { - if(Application.platform != RuntimePlatform.Android) return false; - - AndroidJNIHelper.debug = false; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - return jc.CallStatic("isVideoAvailable", tag); - } - } - } - #endif - #endregion -} diff --git a/Assets/Plugins/Heyzap/HeyzapAds.cs b/Assets/Plugins/Heyzap/HeyzapAds.cs index 7f180e3d..5c48f4cb 100644 --- a/Assets/Plugins/Heyzap/HeyzapAds.cs +++ b/Assets/Plugins/Heyzap/HeyzapAds.cs @@ -36,10 +36,11 @@ namespace Heyzap { /// Heyzap wrapper for iOS and Android via Unity. For more information, see https://developers.heyzap.com/docs/unity_sdk_setup_and_requirements . /// public class HeyzapAds : MonoBehaviour { + public const string Version = "2.0.0"; public delegate void NetworkCallbackListener(string network, string callback); private static NetworkCallbackListener networkCallbackListener; - private static HeyzapAds _instance = null; + private static HeyzapAds _instance; #region Flags for the call to HeyzapAds.StartWithOptions() /// @@ -47,38 +48,24 @@ public class HeyzapAds : MonoBehaviour { /// public const int FLAG_NO_OPTIONS = 0 << 0; // 0 /// - /// Use this flag to disable automatic prefetching of ads. You must call a `Fetch` method for every ad unit before a matching call to a `Show` method. + /// Use this flag to disable automatic prefetching of ads. You must call a `Request` method for every ad type before a matching call to a `Show` method. /// public const int FLAG_DISABLE_AUTOMATIC_FETCHING = 1 << 0; // 1 /// - /// Use this flag to disable all advertising functionality of the Heyzap SDK. This should only be used if you're integrating the SDK solely as an install tracker. + /// Use this flag to disable all advertising functionality of the FairBid SDK. This should only be used if you're integrating the SDK solely as an install tracker. /// public const int FLAG_INSTALL_TRACKING_ONLY = 1 << 1; // 2 /// - /// (Android only) Use this flag to tell the Heyzap SDK that this app is being distributed on the Amazon App Store. - /// - public const int FLAG_AMAZON = 1 << 2; // 4 - /// /// Use this flag to disable the mediation features of the Heyzap SDK. Only Heyzap ads will be available. /// You should set this flag if you are using Heyzap through another mediation tool to avoid potential conflicts. /// public const int FLAG_DISABLE_MEDIATION = 1 << 3; // 8 /// - /// (iOS only) Use this flag to stop the Heyzap SDK from automatically recording in-app purchases. - /// - public const int FLAG_DISABLE_AUTOMATIC_IAP_RECORDING = 1 << 4; // 16 - /// - /// (Android only) Use this flag to disable all non-native ads & ad networks that don't support native ads. - /// - public const int FLAG_NATIVE_ADS_ONLY = 1 << 5; // 32 - /// /// Use this flag to to mark mediated ads as "child-directed". This value will be passed on to networks that support sending such an option (for purposes of the Children's Online Privacy Protection Act (COPPA)). /// Currently, only AdMob, FAN, and Heyzap Exchange use this option's value. This value will be `OR`ed with the per-network server-side setting we provide on your Mediation Settings dashboard. /// public const int FLAG_CHILD_DIRECTED_ADS = 1 << 6; // 64 #endregion - - public const string DEFAULT_TAG = "default"; #region String constants to expect in Ad Listener & network callbacks // `NetworkCallback` is a bit of a misnomer. The callback constants here are both for "network callbacks" and for ad listener callbacks. We should refactor these into two classes in the next major SDK. @@ -91,8 +78,8 @@ public static class NetworkCallback { public const string FETCH_FAILED = "fetch_failed"; public const string CLICK = "click"; public const string DISMISS = "dismiss"; - public const string INCENTIVIZED_RESULT_COMPLETE = "incentivized_result_complete"; - public const string INCENTIVIZED_RESULT_INCOMPLETE = "incentivized_result_incomplete"; + public const string REWARDED_RESULT_COMPLETE = "rewarded_result_complete"; + public const string REWARDED_RESULT_INCOMPLETE = "rewarded_result_incomplete"; public const string AUDIO_STARTING = "audio_starting"; public const string AUDIO_FINISHED = "audio_finished"; @@ -112,22 +99,18 @@ public static class NetworkCallback { #region Network names public static class Network { - public const string HEYZAP = "heyzap"; - public const string HEYZAP_CROSS_PROMO = "heyzap_cross_promo"; - public const string HEYZAP_EXCHANGE = "heyzap_exchange"; - public const string FACEBOOK = "facebook"; - public const string UNITYADS = "unityads"; - public const string APPLOVIN = "applovin"; - public const string VUNGLE = "vungle"; - public const string CHARTBOOST = "chartboost"; public const string ADCOLONY = "adcolony"; public const string ADMOB = "admob"; - public const string IAD = "iad"; - public const string LEADBOLT = "leadbolt"; + public const string APPLOVIN = "applovin"; + public const string CHARTBOOST = "chartboost"; + public const string FACEBOOK = "facebook"; + public const string HYPRMX = "hyprmx"; public const string INMOBI = "inmobi"; - public const string DOMOB = "domob"; + public const string IRONSOURCE = "iron_source"; public const string MOPUB = "mopub"; - public const string FYBER_EXCHANGE = "fyber_exchange"; + public const string TAPJOY = "tapjoy"; + public const string UNITYADS = "unityads"; + public const string VUNGLE = "vungle"; } #endregion @@ -140,8 +123,10 @@ public static class Network { public static void Start(string publisher_id, int options) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID + HeyzapAdsAndroid.SetPluginVersion(Version); HeyzapAdsAndroid.Start(publisher_id, options); #elif UNITY_IPHONE + HeyzapAdsIOS.SetPluginVersion(Version); HeyzapAdsIOS.Start(publisher_id, options); #endif #else @@ -150,28 +135,10 @@ public static void Start(string publisher_id, int options) { HeyzapAds.InitReceiver(); HZInterstitialAd.InitReceiver(); - HZVideoAd.InitReceiver(); - HZIncentivizedAd.InitReceiver(); + HZRewardedAd.InitReceiver(); HZBannerAd.InitReceiver(); - HZOfferWallAd.InitReceiver(); HZDemographics.InitReceiver(); } - - /// - /// Returns the remote data you've set on the Heyzap Dashboards, which will be a JSON dictionary in string format. - /// - public static string GetRemoteData(){ - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - return HeyzapAdsAndroid.GetRemoteData(); - #elif UNITY_IPHONE - return HeyzapAdsIOS.GetRemoteData(); - #endif - #else - UnityEngine.Debug.LogWarning("Call received to retrieve remote data from the Heyzap SDK, but the SDK does not function in the editor. You must use a device/emulator to use the remote data feature."); - return "{}"; - #endif - } /// /// Sets User's consent under GDPR. Fyber will only be able to show targeted advertising if the user consented. Only call this method if the user explicitly gave or denied consent. @@ -193,7 +160,7 @@ public static void SetGdprConsent(Boolean isGdprConsentGiven) /// /// Sets User's consent data under GDPR. Heyzap SDK will use this information to provide optimal targeted advertising without infringing GDPR. /// - /// xA Dictionary of key-value pairs containing GDPR related information + /// A Dictionary of key-value pairs containing GDPR related information static public void SetGdprConsentData(Dictionary gdprConsentData) { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) @@ -240,7 +207,7 @@ static public void ClearGdprConsentData() /// /// Shows the mediation test suite. /// - public static void ShowMediationTestSuite() { + public static void ShowTestSuite() { #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) #if UNITY_ANDROID HeyzapAdsAndroid.ShowMediationTestSuite(); @@ -291,28 +258,6 @@ public static Boolean IsNetworkInitialized(string network) { public static void SetNetworkCallbackListener(NetworkCallbackListener listener) { networkCallbackListener = listener; } - - /// - /// Pauses expensive work, like ad fetches, until ResumeExpensiveWork() is called. Note that calling this method will affect ad availability. - /// - public static void PauseExpensiveWork() { - #if UNITY_IPHONE && !UNITY_EDITOR - HeyzapAdsIOS.PauseExpensiveWork(); - #elif UNITY_ANDROID && !UNITY_EDITOR - HeyzapAdsAndroid.PauseExpensiveWork(); - #endif - } - - /// - /// Unpauses expensive work, like ad fetches. Only relevant after a call to PauseExpensiveWork(). - /// - public static void ResumeExpensiveWork() { - #if UNITY_IPHONE && !UNITY_EDITOR - HeyzapAdsIOS.ResumeExpensiveWork(); - #elif UNITY_ANDROID && !UNITY_EDITOR - HeyzapAdsAndroid.ResumeExpensiveWork(); - #endif - } /// /// Enables verbose debug logging for the Heyzap SDK. For third party logging, . @@ -348,7 +293,7 @@ public static void HideDebugLogs() { /// public static void ShowThirdPartyDebugLogs() { #if UNITY_IPHONE && !UNITY_EDITOR - HeyzapAdsIOS.ShowThirdPartyDebugLogs(); + HeyzapAdsIOS.ShowThirdPartyDebugLogs(); #endif } @@ -358,24 +303,7 @@ public static void ShowThirdPartyDebugLogs() { /// public static void HideThirdPartyDebugLogs() { #if UNITY_IPHONE && !UNITY_EDITOR - HeyzapAdsIOS.HideThirdPartyDebugLogs(); - #endif - } - - /// - /// Set the bundle ID (i.e.: `com.name.of.company.and.app`) on Android and iOS to something other than what you have set in the Unity Editor's Player Settings menu. - /// Note: This method MUST be called BEFORE calling `Start` on the SDK. - /// This method is mostly useful for debugging purposes; for instance, you might use this to use a test account & bundle ID on debug builds. - /// - /// The new bundle ID you want to use. This is how we link this app to your dashboard account on developers.heyzap.com . - public static void SetBundleIdentifier(string bundleID) { - #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IPHONE) - #if UNITY_ANDROID - HeyzapAdsAndroid.SetBundleIdentifier(bundleID); - #elif UNITY_IPHONE - HeyzapAdsIOS.SetBundleIdentifier(bundleID); - #endif - #else + HeyzapAdsIOS.HideThirdPartyDebugLogs(); #endif } @@ -385,7 +313,7 @@ public static void SetBundleIdentifier(string bundleID) { /// The Device ID that FAN prints to the iOS console public static void AddFacebookTestDevice(string device_id) { #if UNITY_IPHONE && !UNITY_EDITOR - HeyzapAdsIOS.AddFacebookTestDevice(device_id); + HeyzapAdsIOS.AddFacebookTestDevice(device_id); #endif } #endregion @@ -402,7 +330,7 @@ protected static void SetNetworkCallback(string network, string callback) { } } - public static void InitReceiver(){ + public static void InitReceiver() { if (_instance == null) { GameObject receiverObject = new GameObject("HeyzapAds"); DontDestroyOnLoad(receiverObject); @@ -410,14 +338,6 @@ public static void InitReceiver(){ } } - public static string TagForString(string tag) { - if (tag == null) { - tag = HeyzapAds.DEFAULT_TAG; - } - - return tag; - } - // Within Unity's .NET framework we don't have a stock solution for converting objets to Json so we need to implement a custom solution static private string GetGdprConsentDataAsJsonString(Dictionary gdprConsentData) { @@ -433,6 +353,8 @@ static private string GetGdprConsentDataAsJsonString(Dictionary #if UNITY_IPHONE && !UNITY_EDITOR public class HeyzapAdsIOS : MonoBehaviour { + [DllImport ("__Internal")] + private static extern void hz_ads_set_plugin_version(string pluginVersion); [DllImport ("__Internal")] private static extern void hz_ads_start_app(string publisher_id, int flags); @@ -440,9 +362,6 @@ public class HeyzapAdsIOS : MonoBehaviour [DllImport ("__Internal")] private static extern void hz_ads_show_mediation_debug_view_controller(); - [DllImport ("__Internal")] - private static extern string hz_ads_get_remote_data(); - [DllImport ("__Internal")] private static extern void hz_ads_set_gdpr_consent(Boolean isGdprConsentGiven); @@ -455,12 +374,6 @@ public class HeyzapAdsIOS : MonoBehaviour [DllImport ("__Internal")] private static extern bool hz_ads_is_network_initialized(string network); - [DllImport ("__Internal")] - private static extern void hz_pause_expensive_work(); - - [DllImport ("__Internal")] - private static extern void hz_resume_expensive_work(); - [DllImport ("__Internal")] private static extern void hz_ads_hide_debug_logs(); @@ -473,12 +386,13 @@ public class HeyzapAdsIOS : MonoBehaviour [DllImport ("__Internal")] private static extern void hz_ads_show_third_party_debug_logs(); - [DllImport ("__Internal")] - private static extern void hz_ads_set_bundle_identifier(string bundleID); - [DllImport ("__Internal")] private static extern void hz_add_facebook_test_device(string device_id); + public static void SetPluginVersion(string pluginVersion) { + hz_ads_set_plugin_version(pluginVersion); + } + public static void Start(string publisher_id, int options=0) { hz_ads_start_app(publisher_id, options); } @@ -495,10 +409,6 @@ public static bool IsNetworkInitialized(string network) { return hz_ads_is_network_initialized(network); } - public static string GetRemoteData(){ - return hz_ads_get_remote_data(); - } - public static void SetGdprConsent(Boolean isGdprConsentGiven) { hz_ads_set_gdpr_consent(isGdprConsentGiven); } @@ -511,14 +421,6 @@ public static void ClearGdprConsentData() { hz_ads_clear_gdpr_consent_data(); } - public static void PauseExpensiveWork() { - hz_pause_expensive_work(); - } - - public static void ResumeExpensiveWork() { - hz_resume_expensive_work(); - } - public static void ShowDebugLogs() { hz_ads_show_debug_logs(); } @@ -535,10 +437,6 @@ public static void HideThirdPartyDebugLogs() { hz_ads_hide_third_party_debug_logs(); } - public static void SetBundleIdentifier(string bundleID) { - hz_ads_set_bundle_identifier(bundleID); - } - public static void AddFacebookTestDevice(string device_id) { hz_add_facebook_test_device(device_id); } @@ -548,6 +446,14 @@ public static void AddFacebookTestDevice(string device_id) { #if UNITY_ANDROID && !UNITY_EDITOR public class HeyzapAdsAndroid : MonoBehaviour { + public static void SetPluginVersion(string pluginVersion) { + if (Application.platform != RuntimePlatform.Android) return; + AndroidJNIHelper.debug = false; + using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { + jc.CallStatic("addCustomParameter", "plugin_version", pluginVersion); + } + } + public static void Start(string publisher_id, int options=0) { if(Application.platform != RuntimePlatform.Android) return; @@ -584,15 +490,6 @@ public static void ShowMediationTestSuite() { } } - public static string GetRemoteData() { - if(Application.platform != RuntimePlatform.Android) return "{}"; - AndroidJNIHelper.debug = false; - - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - return jc.CallStatic("getCustomPublisherData"); - } - } - public static void SetGdprConsent(Boolean isGdprConsentGiven) { if (Application.platform != RuntimePlatform.Android) return; @@ -633,27 +530,6 @@ public static void HideDebugLogs() { jc.CallStatic("hideDebugLogs"); } } - - public static void ResumeExpensiveWork() { - if(Application.platform != RuntimePlatform.Android) return; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("resumeExpensiveWork"); - } - } - - public static void PauseExpensiveWork() { - if(Application.platform != RuntimePlatform.Android) return; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.extensions.unity3d.UnityHelper")) { - jc.CallStatic("pauseExpensiveWork"); - } - } - - public static void SetBundleIdentifier(string bundleID) { - if(Application.platform != RuntimePlatform.Android) return; - using (AndroidJavaClass jc = new AndroidJavaClass("com.heyzap.sdk.ads.HeyzapAds")) { - jc.CallStatic("setBundleId", bundleID); - } - } } #endif #endregion diff --git a/Assets/Scripts/AdManager.cs b/Assets/Scripts/AdManager.cs index b2f84a5e..8b6c39a4 100644 --- a/Assets/Scripts/AdManager.cs +++ b/Assets/Scripts/AdManager.cs @@ -1,40 +1,31 @@ using UnityEngine; using UnityEngine.UI; -using UnityEngine.Assertions.Must; +using UnityEngine.Assertions; using Heyzap; -using System.Collections; using System.Collections.Generic; public class AdManager : MonoBehaviour { [SerializeField] - private Text adTagTextField; + private Text placementTextField; [SerializeField] private GameObject bannerControls; [SerializeField] - private GameObject offerwallControls; - [SerializeField] private GameObject standardControls; [SerializeField] private ScrollingTextArea console; - [SerializeField] - private Toggle offerwallCloseOnFirstClickToggle; - [SerializeField] - private Text offerwallCurrencyIdTextField; private enum AdType { Interstitial, - Video, - Incentivized, - Banner, - Offerwall + Rewarded, + Banner } - private AdType _selectedAdType; + private AdType selectedAdType; private AdType SelectedAdType { - get { return _selectedAdType; } + get { return selectedAdType; } set { - _selectedAdType = value; + selectedAdType = value; this.console.Append("AdType: " + value.ToString()); ShowAdTypeControls(); } @@ -46,12 +37,12 @@ public void UpdateLocation(float latitude, float longitude, float horizAcc, floa //HZDemographics.SetUserLocation(latitude, longitude, horizAcc, vertAcc, alt, timestamp); } - void Awake() { - this.adTagTextField.MustNotBeNull(); - this.bannerControls.MustNotBeNull(); - this.standardControls.MustNotBeNull(); - this.offerwallControls.MustNotBeNull(); - this.console.MustNotBeNull(); + void Awake() + { + Assert.IsNotNull(placementTextField); + Assert.IsNotNull(bannerControls); + Assert.IsNotNull(standardControls); + Assert.IsNotNull(console); } void Start () { @@ -74,8 +65,8 @@ void Start () { HeyzapAds.ShowDebugLogs(); HeyzapAds.Start("ENTER_YOUR_PUBLISHER_ID_HERE", HeyzapAds.FLAG_NO_OPTIONS); - HZBannerAd.SetDisplayListener(delegate(string adState, string adTag) { - this.console.Append("BANNER: " + adState + " Tag : " + adTag); + HZBannerAd.SetDisplayListener(delegate(string adState, string placement) { + this.console.Append("BANNER: " + adState + " Placement : " + placement); if (adState == "loaded") { Rect dimensions = new Rect(); HZBannerAd.GetCurrentBannerDimensions(out dimensions); @@ -83,28 +74,12 @@ void Start () { } }); - HZInterstitialAd.SetDisplayListener(delegate(string adState, string adTag) { - this.console.Append("INTERSTITIAL: " + adState + " Tag : " + adTag); - }); - - HZIncentivizedAd.SetDisplayListener(delegate(string adState, string adTag) { - this.console.Append("INCENTIVIZED: " + adState + " Tag : " + adTag); - }); - - HZVideoAd.SetDisplayListener(delegate(string adState, string adTag) { - this.console.Append("VIDEO: " + adState + " Tag : " + adTag); + HZInterstitialAd.SetDisplayListener(delegate(string adState, string placement) { + this.console.Append("INTERSTITIAL: " + adState + " Placement : " + placement); }); - HZOfferWallAd.SetDisplayListener(delegate(string adState, string adTag) { - this.console.Append("OFFERWALL: " + adState + " Tag : " + adTag); - }); - - HZOfferWallAd.SetVirtualCurrencyResponseListener(delegate(VirtualCurrencyResponse response) { - this.console.Append("OFFERWALL VCS Response: id:" + response.CurrencyID + " name: '" + response.CurrencyName + "' amount : " + response.DeltaOfCurrency + " trans: " + response.LatestTransactionID); - }); - - HZOfferWallAd.SetVirtualCurrencyErrorListener(delegate(string errorMsg) { - this.console.Append("OFFERWALL VCS Error: " + errorMsg); + HZRewardedAd.SetDisplayListener(delegate(string adState, string placement) { + this.console.Append("REWARDED: " + adState + " Placement : " + placement); }); // UI defaults @@ -120,15 +95,9 @@ public void InterstitialSelected(bool selected) { } } - public void VideoSelected(bool selected) { - if (selected) { - this.SelectedAdType = AdType.Video; - } - } - - public void IncentivizedSelected(bool selected) { + public void RewardedSelected(bool selected) { if (selected) { - this.SelectedAdType = AdType.Incentivized; + this.SelectedAdType = AdType.Rewarded; } } @@ -138,92 +107,78 @@ public void BannerSelected(bool selected) { } } - public void OfferwallSelected(bool selected) { - if (selected) { - this.SelectedAdType = AdType.Offerwall; - } - } - public void IsAvailableButton() { - string tag = this.adTag(); + string placementName = this.GetPlacementName(); bool available = false; switch (this.SelectedAdType) { - case AdType.Interstitial: - available = HZInterstitialAd.IsAvailable(tag); - break; - case AdType.Video: - available = HZVideoAd.IsAvailable(tag); - break; - case AdType.Incentivized: - available = HZIncentivizedAd.IsAvailable(tag); - break; - case AdType.Banner: - // Not applicable - break; - case AdType.Offerwall: - available = HZOfferWallAd.IsAvailable(tag); - break; + case AdType.Interstitial: + available = HZInterstitialAd.IsAvailable(placementName); + break; + case AdType.Rewarded: + available = HZRewardedAd.IsAvailable(placementName); + break; + case AdType.Banner: + // Not applicable + break; } string availabilityMessage = available ? "available" : "not available"; - this.console.Append(this.SelectedAdType.ToString() + " with tag: " + tag + " is " + availabilityMessage); + console.Append(this.SelectedAdType.ToString() + " with placement: " + placementName + " is " + availabilityMessage); } public void ShowButton() { - string tag = this.adTag(); - - HZShowOptions showOptions = new HZShowOptions(); - showOptions.Tag = tag; - - HZIncentivizedShowOptions incentivizedOptions = new HZIncentivizedShowOptions(); - incentivizedOptions.Tag = tag; - incentivizedOptions.IncentivizedInfo = "test app incentivized info!"; - - HZBannerShowOptions bannerOptions = new HZBannerShowOptions(); - bannerOptions.Tag = tag; - bannerOptions.Position = this.bannerPosition; - - HZOfferWallShowOptions offerwallOptions = new HZOfferWallShowOptions(); - offerwallOptions.ShouldCloseAfterFirstClick = offerwallCloseOnFirstClickToggle.isOn; - offerwallOptions.Tag = tag; - - this.console.Append("Showing " + this.SelectedAdType.ToString() + " with tag: " + tag); - switch (this.SelectedAdType) { - case AdType.Interstitial: - HZInterstitialAd.ShowWithOptions(showOptions); - break; - case AdType.Video: - HZVideoAd.ShowWithOptions(showOptions); - break; - case AdType.Incentivized: - HZIncentivizedAd.ShowWithOptions(incentivizedOptions); - break; - case AdType.Banner: - HZBannerAd.ShowWithOptions(bannerOptions); - break; - case AdType.Offerwall: - HZOfferWallAd.ShowWithOptions(offerwallOptions); - break; + string placementName = this.GetPlacementName(); + if (placementName == "") { + console.Append("Cannot show without providing a valid placement name"); + } else { + HZShowOptions showOptions = new HZShowOptions + { + Placement = placementName + }; + + HZRewardedShowOptions rewardedOptions = new HZRewardedShowOptions + { + Placement = placementName, + RewardedInfo = "test app rewarded info!" + }; + + HZBannerShowOptions bannerOptions = new HZBannerShowOptions + { + Placement = placementName, + Position = this.bannerPosition + }; + + console.Append("Showing " + this.SelectedAdType.ToString() + " with placement: " + placementName); + switch (this.SelectedAdType) + { + case AdType.Interstitial: + HZInterstitialAd.ShowWithOptions(showOptions); + break; + case AdType.Rewarded: + HZRewardedAd.ShowWithOptions(rewardedOptions); + break; + case AdType.Banner: + HZBannerAd.ShowWithOptions(bannerOptions); + break; + } } } - public void FetchButton() { - string tag = this.adTag(); - this.console.Append("Fetching " + this.SelectedAdType.ToString() + " with tag: " + tag); - switch(this.SelectedAdType) { - case AdType.Interstitial: - HZInterstitialAd.Fetch(tag); - break; - case AdType.Video: - HZVideoAd.Fetch(tag); - break; - case AdType.Incentivized: - HZIncentivizedAd.Fetch(tag); - break; - case AdType.Offerwall: - HZOfferWallAd.Fetch(tag); - break; + public void RequestButton() { + string placementName = this.GetPlacementName(); + if (placementName == "") { + console.Append("Cannot request without providing a valid placement name"); + } else { + console.Append("Requesting " + this.SelectedAdType.ToString() + " with placement : " + placementName); + switch (this.SelectedAdType) { + case AdType.Interstitial: + HZInterstitialAd.Fetch(placementName); + break; + case AdType.Rewarded: + HZRewardedAd.Request(placementName); + break; + } } } @@ -241,10 +196,6 @@ public void DestroyButton() { } } - public void RemoteDataButton() { - this.console.Append("Remote data: " + HeyzapAds.GetRemoteData()); - } - public void DebugLogSwitch(bool on) { if (on) { this.console.Append("Enabling debug logging"); @@ -294,7 +245,6 @@ private void SetGdprData(Dictionary gdprConsentData) private Dictionary GetGdprConsentDataA() { - // return default data a dicitonary var data = new Dictionary(); @@ -306,7 +256,6 @@ private Dictionary GetGdprConsentDataA() private Dictionary GetGdprConsentDataB() { - // return default data a dicitonary var data = new Dictionary(); data["key_B1"] = "value_B1"; @@ -325,46 +274,36 @@ public void BannerPositionBottom(bool selected) { } } - public void VCSRequestButton() { - HZOfferWallAd.RequestDeltaOfCurrency(this.currencyId()); - } - - public void ShowMediationTest() { - this.console.Append("Showing mediation test suite"); - HeyzapAds.ShowMediationTestSuite(); + public void ShowTestSuite() { + this.console.Append("Showing Test Suite"); + HeyzapAds.ShowTestSuite(); } private void ShowAdTypeControls() { if (this.SelectedAdType == AdType.Banner) { this.bannerControls.SetActive(true); this.standardControls.SetActive(false); - this.offerwallControls.SetActive(false); - } else if (this.SelectedAdType == AdType.Offerwall) { - this.bannerControls.SetActive(false); - this.offerwallControls.SetActive(true); - this.standardControls.SetActive(false); } else { this.bannerControls.SetActive(false); - this.offerwallControls.SetActive(false); this.standardControls.SetActive(true); } } - private string adTag() { - string tag = this.adTagTextField.text; - if (tag == null || tag.Trim().Length == 0) { - return "default"; - } else { - return tag; - } - } - - private string currencyId() { - string currencyId = this.offerwallCurrencyIdTextField.text; - if (currencyId == null || tag.Trim().Length == 0) { - return null; + private string GetPlacementName() { + string placementName = this.placementTextField.text; + if (placementName == null || placementName.Trim().Length == 0) { + switch (this.SelectedAdType) + { + case AdType.Interstitial: + return "interstitial"; + case AdType.Rewarded: + return "rewarded"; + case AdType.Banner: + return "banner"; + } + return ""; } else { - return currencyId; + return placementName; } } } diff --git a/Assets/Scripts/ScrollingTextArea.cs b/Assets/Scripts/ScrollingTextArea.cs index 7505e1cf..20266754 100644 --- a/Assets/Scripts/ScrollingTextArea.cs +++ b/Assets/Scripts/ScrollingTextArea.cs @@ -15,7 +15,7 @@ public class ScrollingTextArea : MonoBehaviour { private GUIStyle consoleTextStyle; private GUIStyle consoleBackgroundStyle; void Start () { - consoleBackgroundTexture = new Texture2D(1,1); + consoleBackgroundTexture = new Texture2D(1, 1); for(var i = 0; i < consoleBackgroundTexture.width; i++) { for(var j = 0; j < consoleBackgroundTexture.height; j++) @@ -23,8 +23,10 @@ void Start () { consoleBackgroundTexture.SetPixel(i, j, new Color(0f, 0f, 0f, 0.7f)); } } - consoleTextStyle = new GUIStyle(); - consoleTextStyle.fontSize = 28; + consoleTextStyle = new GUIStyle + { + fontSize = 28 + }; consoleTextStyle.normal.textColor = Color.white; consoleTextStyle.richText = true; consoleBackgroundStyle = new GUIStyle(); From 5f06ee6953f86597c6329925a54ad9d854a41298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20Nun=CC=83o=20Garci=CC=81a?= Date: Sun, 24 Feb 2019 22:48:13 +0100 Subject: [PATCH 3/3] [HZUNITY-73] Updating other unity related files. --- .../Resources/FyberEditorSettings.asset | Bin 4296 -> 4324 bytes Packages/manifest.json | 9 +++++---- ProjectSettings/GraphicsSettings.asset | Bin 4430 -> 4442 bytes ProjectSettings/ProjectSettings.asset | Bin 56663 -> 54072 bytes ProjectSettings/ProjectVersion.txt | 2 +- ProjectSettings/UnityConnectSettings.asset | Bin 4276 -> 4328 bytes ProjectSettings/VFXManager.asset | Bin 0 -> 4148 bytes 7 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 ProjectSettings/VFXManager.asset diff --git a/Assets/Fyber/Editor/Resources/FyberEditorSettings.asset b/Assets/Fyber/Editor/Resources/FyberEditorSettings.asset index da6a5b6af23487aa1f508049a24ac2428569dc94..854a50aeb4282133d87835c648dccf7a53c5e785 100644 GIT binary patch delta 769 zcmds#PcH*u5XNV^+wG#&_4ifvr{#b|s-+2$kP-)VsyGr+(jG_}!I_mb;@V8&+%M2X z;^4;B!NDgG5pie?JmzmkwXZJ4t5+5M4M~IvkB5K2pi)b>Lnn_G0 zlEul&K*~Q1axb&yi8Tt9H|5q`44wJNJut})0@;-(#Z8q<#m(Zd;udN3D-KEqIwbSZ zt+EdtmJ+lhRp>Td-YyTU@*Nn#u1!onP7%2}K5#lU&uDJYBUscR*97a*oWA%f_%4FM zx_>y+GHR#zYmSnHrMO47e2OEoX{kuBSLtF3(;W0VLcd7VTdfbPrTQC6su;HCny=J(-!Hya=lybHO~{Gi|Kr=6mBx>md9UeC@09Czv1W`t ezh3Y;@{Oy7z_cw@Cn#xWNyZ&p%7G;EnAV@j$%)?p literal 4296 zcmeH~J!lj`6vyA(CB|=!-!Xm_DKtei@hgag9Qi;AlGA`zD(l@`Zp~#^cPA!VZDnI4 z2x$Zf2!h0bXpzQ7u&{`opoofCBoGA)vCaAZvpeVQrP0n}2j0!R-^~7J_RYTAS)zs! zqK&VKsF7=~h&m3nceZu39V@icQn_3fDQ2GTp(l%tsVO(hVCF-lAU@g~}GUO@x%vWw>ALG-S2i%vU zHrCn8{>rG2C7BDlouc3sJJ6}uR-!941z1+xJs>lsJ zt|jB-J=e~ku^hV~ebrNxxe@8{_&6ZH=#G{0SQH} z=f)gl!+4MDus^CZr`NVh?y#@lLDc!eQqt>$D1rENd%GzBoRm=kVGJfKoWufI087&prAHq q9DEGw&yMgzXGkh#JA805#hjDOwT8p5Wu~vTHses6^OP9_X6!d!NJL5i diff --git a/Packages/manifest.json b/Packages/manifest.json index 1342d0a7..16819bf7 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,10 +1,11 @@ { "dependencies": { - "com.unity.ads": "2.0.8", - "com.unity.analytics": "2.0.16", - "com.unity.package-manager-ui": "1.9.11", + "com.unity.ads": "2.3.1", + "com.unity.analytics": "3.2.2", + "com.unity.collab-proxy": "1.2.15", + "com.unity.package-manager-ui": "2.0.3", "com.unity.purchasing": "2.0.3", - "com.unity.textmeshpro": "1.2.4", + "com.unity.textmeshpro": "1.3.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.animation": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index d94561e3e9421e7e1d7f16f3203c7bf15abb03a2..c9e0d496d231b3c5c9bbd9ada710ee7e85a62fbf 100644 GIT binary patch delta 62 zcmX@7bW2H&fr0-A1A|}`1CU@~5D);;3`Pcq7J9~d25CkcGFj OHb$UylilP`0xGH3 I$t;3l05!o3X8-^I diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index d2b73bfc552854f841253b188f633c13776c0b1f..21b7a02848b26726538672b2cdfc8afad8c88a18 100644 GIT binary patch literal 54072 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 Z^0A{^hfF$blB_IH&$@2)F-nQF{XdVp36KB) literal 56663 zcmeIbcVJ{y{r7*fyRfiyklvQwmu-|q%49cN0@+R2WD6kRB$;f6O=gCf$rg$Xh=?K< z5Kt5;DyV?cR6vAK1qDT0YQpV6!^X0=kqzA+;ej;exKj-`|I~S7bcl`-OqiU za?d&U+>+TSdhq-xdS*!!MH@xYgV*7AG~ya9;DeJ+ zU3$>jCth&p7B9VU+cT%nz9zS36z#Tu6m7uOSPqDy1~&P?eP~2c6aKq$Y}B}+DQb)Z zq)J{*(Zh)4b{pa~1}`p6c*ppy@t*Nx39)#-6W){a#l`cz@Sbc9LM)z7!+UaM(=E(T zTNE`uiciePc)@rt{0QZ1CHR2ywaIhbwkdiRp7ZdL{t0+-@%(DMCtrsUi}&B`-bc~8 zgt?LUhwzc{>*3}3Jk-M<@sahpK6!)jW16Pm9be?Ezos1dSeKuzu?;<}Q>o{%(UFKf z0WW^WK33io(f<#8re|aPPV;ZV_}pm!N66hP^lxgsDY|`3)c6lRv#gup#fAHY^)>+; zGoPC~)^L0h^0Nsz>wXL4P0{bbw^6<&coa=^@t4E1CpbM@CHUUT*^VT>DO!y9N#LxT zZH$kJ=xNjVZNZzO5&r_^+a-91^6e9Rq4J5wrCoJ_DS8a;^Vdk1{b)b(hKmpSDTc@>8YU0>DaK2;kpBq|_EXl| zfus$_kBiPnef|sU*pFtAV`;)j7w<<0Io5DI-j8IQBOmAL|KISiT^&qGjvnc!#Z5+Ck&INjpg z1NS@2JKwm}!?T*71qmJ@nDOlizN_+%1aDT3V}V;(pDfo=;4Ig|1TQJ?Oz_Vt?@I9N zlrKu~N0ejib&F5;4dtA7aPfQ%9Ke~MrH+p9t(6~@;M0{KO`el@_KSt!NFq8W##!EO zjsF-q7N71Z%8wOn{9NV7CHN)Ek5BOHm47_Jf2KU2;Lj`XCeMxJe=H^}%zqC#7N5_p z!C61Oj*jp>l@}8HAmx1tK3Dm&1V2W3e}b2l7Zdz6w&hW%my zxG6^-_KQJs_X_6~CF9a=uhDeN;9PwD+^oDJ*!aE5PfYNql~)t|W#zR5e@}Tm!MDOh zlKCD=@V%9FO33I|ZPaaZ!5;+!M4`-v3^dEah7XqaF+Ls1m8#bClfrU z{LBRJRQ{<1U#|SD80R=}8aVUwY4V(ui}iWF#-B}&#n=B$%0DC6_(RG+o8W&{eol-t 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 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 75a11587..1b2cd94c 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.2.6f1 +m_EditorVersion: 2018.3.6f1 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index a33c13469f4860e4f52a179ad64385ca6ea1e020..51f2389cdc6cab87893ca9022e3e521c1349ffed 100644 GIT binary patch literal 4328 zcmeH~&vO(-6vyA}1{P2;AgB<2M2&z7yKI6XMzAKPR-r0Xf(a*zvZiKcHv^lQt(n=B z(aZi5oVz+-INac>m zRffcS(jJ+e&4dd=6UJ&zj?Vj`TX|dC+V|)9^P;L{^%>v%eck6 zESE)k=+akCkKB@9%F=saNpAv>aoQ|dLF^rH`Xv|(ZEo4hQ4f=!_hWA~CPE6YvryD<8doLfTuDtzkfLtUi5pYisn{sD4jrv4i_ z*ZN<;r~aF$i}c@OygjOakX)Im|8~wTHQxq&&Q~p@%|4cFz^C!KSmW%u#(WRwylmw2 z9dJFK2_v6J$dyeP`OMZ0>td|$yVSSYr=<47J-8g_doY$P{wLKId7sekfm?DPO&a&e zG1wq)hW>GKluRcZ#}uJWZpp7`(#o(Cup*t4)J6KAFup+lQ}P1+&vIUpzoA&crlJ0M@FM*SIXB18_Yxh{yiS+&`%9f#9=}J8 z|7Qe|U(ESlV?Woy_4q5sex4;)`W0h8&*fa}AHW(=|I#k{pYNhSpX-?V_`MuFSLgrG zAU_LApZCo5j^eVY6aw`ndo#iMDeK%eA z(=-TMiEMqp;V0>h$n()`Z2Mul+V*b6?ab3n^lAnz-DdoCNU1){v6F0m=Xau*azm;s zQS0k&v+2j{!H<+)b~T0;2I&s?VXptq)2#b<$oh|>mhi5N^UK|Bp?&}8UK0s@J+>GKaCv^SMxiGal z!K#4^|FMqCI0NGhj59FKz&Hcr42(1If6D+*Ej*}irfDZxtks-OQ0=--)on*zuiE8N zaL%i`(N=A{Uh{eGON1W|S-k6Y{xf!FI98nwi{%j}{D8@HJ2+}x(9avyXD~|k;jO*F J=~g?&^S1U`Tp zS3ZFF0Isd_38=Ds0T=Go@%-IMNJ|#(ovu1`_ctehPXC>x8ltXkM7uu{(H`!(BN`nZ znJkPJ#+OFuceB~lG-l)Y(`+ z@ADLX&?szUh&&k@-Q(P+%rVb#pdlapfEW|y0d>jmvd#ccp${zz!E@ROj}YMPj5QrR zPhXk!@ioZp02h&`hsl_B>7VE_KI|8VK zYqZWo1lHBZeU{EqaBi{AXE7!^Cg>)Q^^b$=lBb`;e((@n^=*K0mTxD(MX0`=Ot{>a z_&FS8PM@~wpF+M4uI|fea1pBhnS^WfjmHT1bC&xof6jq(``e%M5+^+N=K{Dc^Wo1A zodz&{nhvhkKLpMNfv4ZoLc*m#zjzLP_>`qTjQkA!5%3KC(S+xSYY%(a zMCgw(&(gn~aJBv`;E{fRPJU;gGoIwPi}#wJ^AMcBmyv#l@?K9emi2ck@AXx1q2H3?tJ558wy4%ejaug*B@`7D8pQ1|y% z!ZjM;1O)PCIHbP%J-H386D>M+ur}j5j%5Z5RuI_EvQM>Vk1apA?^dj6SYEZ9V9~2a zQ_f$qmpA9LEF!XJJi}jkWYt{{LMgqJz?>1-t5yok81=iyxL*0CY1ISUb$nUc ze8V$W3_qKXnt7VH;KZmG!_`2n;W1)TKzNqNKV09iwK=R(Lffr{cMG zC7H_s9Ei}o>$>Ddz)9I~2xzsI11$$y4zwI-InZ+8|8M~3fONy*b0rAs z{#3D8=L5u$h4YhNFsp8(QfT1FHC8E@Zmnq4?V|j#XyWW-`8Z(z+qM2$?YUdEO(VcR Ox#F~!?*ATR9<@LEr?SKV diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..99af3a01f05a35b9a68f504645a46c020dbe9c55 GIT binary patch literal 4148 zcmeH_OG*Pl5QeKAYoL1A<>xRcRzk`eP@(gDTIEEBwdxDecU z059ML^a{Fl=?NVF>Iowx2XNB`m8tqt^-uSo5Dj#QW>$!37Ee5gGO6@haygkQW#}gi zLm|M%5}&IShV#dRkN0=kx$mz+^XPRc#11_md4yw?D8Ndnn}E5XXN!UtLBSv(&qXO{ z9Q7h{0y%)>5U4(&kwVS$mS%zGN$9MjAL)JvN$^N#8;o@lNRD2eAxw2O0|qh}xZjyNXkh%_or=KKz^#oW^OUBC|CcaphIiw-e+iR6AN z=7OHUZqf7nG?IgTV19?1dGtdP74oMCZp|%ApKM$C8@YP5(NfZ>xJBt_sd~0oD|)`X zP!R#hdslLA2ZimbiY{{X#?5xCRFZx?m%4MW)sSl2iZt$PbgmJ()U>q