diff --git a/.gitignore b/.gitignore index e99b205..6f86ab7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ bin bin_BurstDebugInformation_DoNotShip sdk-intergration/.vscode +sdk-intergration/' diff --git a/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs b/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs new file mode 100644 index 0000000..6ed2afb --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs @@ -0,0 +1,34 @@ +using System.Collections; +using UnityEngine; + +public class AFAdRevenueEvent { + + /** + *Pre-defined keys for non-mandatory dictionary + *Code ISO 3166-1 format + **/ + public const string COUNTRY = "country"; + + /** + *ID of the ad unit for the impression + **/ + public const string AD_UNIT = "ad_unit"; + + /** + *Format of the ad + **/ + public const string AD_TYPE = "ad_type"; + + /** + *ID of the ad placement for the impression + **/ + public const string PLACEMENT = "placement"; + + /** + *Provided by Facebook Audience Network only, and will be reported to publishers + *approved by Facebook Audience Network within the closed beta + **/ + public const string ECPM_PAYLOAD = "ecpm_payload"; + + +} diff --git a/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs.meta b/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs.meta new file mode 100644 index 0000000..cbcfb3e --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/AFAdRevenueEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b73b301ad8b6f4b45809980800a9358a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs b/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs new file mode 100644 index 0000000..1c9baf1 --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs @@ -0,0 +1,178 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Runtime.InteropServices; +using System; + +namespace AppsFlyerSDK +{ + public class AppsFlyerAdRevenue : MonoBehaviour + { + + public static readonly string kAppsFlyerAdRevenueVersion = "6.14.3"; + +#if UNITY_ANDROID && !UNITY_EDITOR + private static AndroidJavaClass appsFlyerAndroid = new AndroidJavaClass("com.appsflyer.unity.afunityadrevenuegenericplugin.AdRevenueUnityWrapper"); +#endif + + public static void start() + { +#if UNITY_IOS && !UNITY_EDITOR + + _start(); + +#elif UNITY_ANDROID && !UNITY_EDITOR + + using(AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { + + using(AndroidJavaObject cls_Activity = cls_UnityPlayer.GetStatic("currentActivity")) { + + AndroidJavaObject cls_Application = cls_Activity.Call("getApplication"); + + appsFlyerAndroid.CallStatic("start", cls_Application); + } + } + +#else + +#endif + } + + + public static void setIsDebug(bool isDebug) + { +#if UNITY_IOS && !UNITY_EDITOR + _setIsDebugAdrevenue(isDebug); +#elif UNITY_ANDROID && !UNITY_EDITOR + +#else + +#endif + } + + public static void logAdRevenue(string monetizationNetwork, + AppsFlyerAdRevenueMediationNetworkType mediationNetwork, + double eventRevenue, + string revenueCurrency, + Dictionary additionalParameters) + { +#if UNITY_IOS && !UNITY_EDITOR + + _logAdRevenue(monetizationNetwork, mediationNetwork, eventRevenue, revenueCurrency, AFMiniJSON.Json.Serialize(additionalParameters)); + +#elif UNITY_ANDROID && !UNITY_EDITOR + + int mediationNetworkAndroid = setMediationNetworkTypeAndroid(mediationNetwork); + if (mediationNetworkAndroid == -1) + { + Debug.Log("Please choose a valid mediationNetwork"); + } else + { + appsFlyerAndroid.CallStatic("logAdRevenue", + monetizationNetwork, + mediationNetworkAndroid, + revenueCurrency, + eventRevenue, + convertDictionaryToJavaMap(additionalParameters)); + + } +#else + +#endif + } + +#if UNITY_IOS && !UNITY_EDITOR + + [DllImport("__Internal")] + private static extern void _start(); + + [DllImport("__Internal")] + private static extern void _setIsDebugAdrevenue(bool isDebug); + + [DllImport("__Internal")] + private static extern void _logAdRevenue(string monetizationNetwork, + AppsFlyerAdRevenueMediationNetworkType mediationNetwork, + double eventRevenue, + string revenueCurrency, + string additionalParameters); + +#elif UNITY_ANDROID && !UNITY_EDITOR + +#else + +#endif + private static int setMediationNetworkTypeAndroid(AppsFlyerAdRevenueMediationNetworkType mediationNetwork) + { + switch (mediationNetwork) + { + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeIronSource: + return 0; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeApplovinMax: + return 1; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeGoogleAdMob: + return 2; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeFyber: + return 3; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeAppodeal: + return 4; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeAdmost: + return 5; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeTopon: + return 6; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeTradplus: + return 7; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeYandex: + return 8; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeChartBoost: + return 9; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeUnity: + return 10; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypeCustomMediation: + return 11; + case AppsFlyerAdRevenueMediationNetworkType.AppsFlyerAdRevenueMediationNetworkTypedirectMonetization: + return 12; + default: + return -1; + } + + } + private static AndroidJavaObject convertDictionaryToJavaMap(Dictionary dictionary) + { + AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap"); + IntPtr putMethod = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jvalue[] val; + if (dictionary != null) + { + foreach (var entry in dictionary) + { + val = AndroidJNIHelper.CreateJNIArgArray(new object[] { entry.Key, entry.Value }); + AndroidJNI.CallObjectMethod(map.GetRawObject(), putMethod, val); + AndroidJNI.DeleteLocalRef(val[0].l); + AndroidJNI.DeleteLocalRef(val[1].l); + } + } + + return map; + } + } + + + public enum AppsFlyerAdRevenueMediationNetworkType + { + AppsFlyerAdRevenueMediationNetworkTypeGoogleAdMob = 1, + AppsFlyerAdRevenueMediationNetworkTypeIronSource = 2, + AppsFlyerAdRevenueMediationNetworkTypeApplovinMax = 3, + AppsFlyerAdRevenueMediationNetworkTypeFyber = 4, + AppsFlyerAdRevenueMediationNetworkTypeAppodeal = 5, + AppsFlyerAdRevenueMediationNetworkTypeAdmost = 6, + AppsFlyerAdRevenueMediationNetworkTypeTopon = 7, + AppsFlyerAdRevenueMediationNetworkTypeTradplus = 8, + AppsFlyerAdRevenueMediationNetworkTypeYandex = 9, + AppsFlyerAdRevenueMediationNetworkTypeChartBoost = 10, + AppsFlyerAdRevenueMediationNetworkTypeUnity = 11, + AppsFlyerAdRevenueMediationNetworkTypeCustomMediation = 12, + AppsFlyerAdRevenueMediationNetworkTypedirectMonetization = 13 + } + + + +} \ No newline at end of file diff --git a/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs.meta b/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs.meta new file mode 100644 index 0000000..af22f2f --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/AppsFlyerAdRevenue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 644005ac4602e4b78ad3a8d4d29e329d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml b/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml new file mode 100644 index 0000000..4a7f376 --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml.meta b/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml.meta new file mode 100644 index 0000000..b48efbb --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6110ce30bf7674268814dc9e0395f8b0 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h new file mode 100644 index 0000000..879168d --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h @@ -0,0 +1,16 @@ +// +// AppsFlyerAdRevenueWrapper.h +// Unity-iPhone +// +// Created by Jonathan Wesfield on 01/12/2019. +// + +#import + +#if __has_include() +#import +#endif + +@interface AppsFlyerAdRevenueWrapper : NSObject + +@end diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h.meta b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h.meta new file mode 100644 index 0000000..c7301b1 --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 7fa891a95d71c459daa1e92ee7a653ab +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm new file mode 100644 index 0000000..c2ff0ec --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm @@ -0,0 +1,51 @@ +// +// AppsFlyerAdRevenueWrapper.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 25/11/2019. +// + +#import "AppsFlyerAdRevenueWrapper.h" + + +@implementation AppsFlyerAdRevenueWrapper + + +extern "C" { + + NSString* stringFromChar(const char *str) { + return str ? [NSString stringWithUTF8String:str] : nil; + } + + NSDictionary* dictionaryFromJson(const char *jsonString) { + if(jsonString){ + NSData *jsonData = [[NSData alloc] initWithBytes:jsonString length:strlen(jsonString)]; + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; + return dictionary; + } + return nil; + } + + + const void _start(int length, int* adRevenueTypes){ + [AppsFlyerAdRevenue start]; + } + const void _setIsDebugAdrevenue(bool isDebug){ + [[AppsFlyerAdRevenue shared] setIsDebug:isDebug]; + } + + const void _logAdRevenue(const char* monetizationNetwork, + int mediationNetwork, + double eventRevenue, + const char* revenueCurrency, + const char* additionalParameters){ + [[AppsFlyerAdRevenue shared] logAdRevenueWithMonetizationNetwork:stringFromChar(monetizationNetwork) + mediationNetwork:(AppsFlyerAdRevenueMediationNetworkType) mediationNetwork + eventRevenue:[NSNumber numberWithDouble:eventRevenue] + revenueCurrency:stringFromChar(revenueCurrency) + additionalParameters:dictionaryFromJson(additionalParameters)]; + + } +} + +@end diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm.meta b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm.meta new file mode 100644 index 0000000..b864f3c --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/AppsFlyerAdRevenueWrapper.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 84d99cf0f930e4c80b4bc1858e042b70 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift new file mode 100644 index 0000000..521d0e4 --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift @@ -0,0 +1 @@ +import Foundation \ No newline at end of file diff --git a/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift.meta b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift.meta new file mode 100644 index 0000000..b24f741 --- /dev/null +++ b/sdk-intergration/Assets/AppsFlyer/Plugins/iOS/SwiftForUnity.swift.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: a631431c30cca4ac2bb4b40fc67e4005 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/sdk-intergration/Assets/Scripts/SDKTest.cs b/sdk-intergration/Assets/Scripts/SDKTest.cs index a5fe50f..8dd0689 100644 --- a/sdk-intergration/Assets/Scripts/SDKTest.cs +++ b/sdk-intergration/Assets/Scripts/SDKTest.cs @@ -46,7 +46,8 @@ public class SDKTest : MonoBehaviour void Init() { TYSdkFacade.Instance.Init(); - MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) => { + MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) => + { Debug.Log($"[MaxSdk::OnSdkInitializedEvent] Init:{sdkConfiguration.IsSuccessfullyInitialized}"); }; MaxSdk.InitializeSdk(); @@ -54,12 +55,27 @@ public class SDKTest : MonoBehaviour AppsFlyer.setIsDebug(true); #if UNITY_IOS - AppsFlyer.initSDK("rSySeWtvKabfbPZE7Lmx7C","6505145935"); + AppsFlyer.initSDK("rSySeWtvKabfbPZE7Lmx7C", "6505145935"); #elif UNITY_ANDROID AppsFlyer.initSDK("rSySeWtvKabfbPZE7Lmx7C", null); #endif AppsFlyer.startSDK(); - //AppsFlyerAdRevenue.start(); + AppsFlyerAdRevenue.start(); + } + + int retryAttempt; + + public void InitializeRewardedAds() + { + // Attach callback + MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent; + MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdLoadFailedEvent; + MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent; + MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent; + MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdRevenuePaidEvent; + MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdHiddenEvent; + MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent; + MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent; } private async void OnLogin(EAccoutType accoutType) @@ -68,7 +84,7 @@ public class SDKTest : MonoBehaviour Debug.LogError($"[AggSdk::OnLogin] accoutType : {accoutType}"); var info = await TYSdkFacade.Instance.Login(accoutType); _messageTxt.text = $"Login: {info.isSuccess}"; - if(info.isSuccess) + if (info.isSuccess) { _messageTxt.text += $"\n{info.msg}"; _messageTxt.text += $"\n{TYSdkFacade.Instance.TYAccountInfo.token}"; @@ -79,7 +95,7 @@ public class SDKTest : MonoBehaviour { TYSdkFacade.Instance.Logout(); } - + public async void OnPayTestBtn() { string prodId = "comarkgameft1chooseone0199"; @@ -87,10 +103,10 @@ public class SDKTest : MonoBehaviour string prodPrice = "2,616"; string prodName = "test:₩2,616"; int count = 1; - + Debug.LogError($"[AggSdk::Pay] prodId : {prodId} prodPrice : {prodPrice} prodName : {prodName} "); PaymentInfo payResult = await TYSdkFacade.Instance.Pay(prodId, prodPrice, prodName, count, pType); - + } public async void OnPayListBtn() @@ -98,19 +114,80 @@ public class SDKTest : MonoBehaviour Debug.LogError("PayList ask"); var result = await TYSdkFacade.Instance.GetSKUList(); } - + public void OnGaBtn() { Debug.LogError("Ga ask"); - using ( var e = GAEvent.TackEvent("idcheckdone") ) + using (var e = GAEvent.TackEvent("idcheckdone")) { e.AddContent("test ga", true); } } - + + const string AD_ID = "427b872c314ad1f3"; + public void OnAppMaxBtn() { - //TYSdkFacade.Instance.PlayAd(); + if (MaxSdk.IsRewardedAdReady(AD_ID)) + { + MaxSdk.ShowRewardedAd(AD_ID); + } + else + { + _messageTxt.text = "AD Not Ready, Load now"; + LoadAd(); + } + } + + private void LoadAd() + { + MaxSdk.LoadRewardedAd("427b872c314ad1f3"); + } + + private void OnRewardedAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) + { + _messageTxt.text = $"Rewarded ad loaded. ID: {adInfo.AdUnitIdentifier}"; + retryAttempt = 0; + } + + private void OnRewardedAdLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) + { + // Rewarded ad failed to load + // AppLovin recommends that you retry with exponentially higher delays, up to a maximum delay (in this case 64 seconds). + + retryAttempt++; + double retryDelay = Math.Pow(2, Math.Min(6, retryAttempt)); + _messageTxt.text = $"Rewarded ad failed to load. ID: {adUnitId}. Reason: {errorInfo.Message}. Attempt: {retryAttempt}. Delay: {retryDelay}s."; + + Invoke("LoadAd", (float)retryDelay); + } + + private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { } + + private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo) + { + // Rewarded ad failed to display. AppLovin recommends that you load the next ad. + _messageTxt.text = $"Rewarded ad failed to display. ID: {adUnitId}. Reason: {errorInfo.Message}"; + LoadAd(); + } + + private void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) { } + + private void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) + { + // Rewarded ad is hidden. Pre-load the next ad + _messageTxt.text = $"Rewarded ad hidden. ID: {adUnitId}."; + LoadAd(); + } + + private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo) + { + _messageTxt.text = $"Rewarded ad received reward. ID: {adUnitId}. Type: {reward}. Amount: {reward.Amount}"; + } + + private void OnRewardedAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo) + { + _messageTxt.text = $"Rewarded ad revenue paid. ID: {adUnitId}."; } /* diff --git a/sdk-intergration/Packages/tysdk/Plugins/iOS/TYSDKInterface.mm b/sdk-intergration/Packages/tysdk/Plugins/iOS/TYSDKInterface.mm index b5b47d3..70bbb9a 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/iOS/TYSDKInterface.mm +++ b/sdk-intergration/Packages/tysdk/Plugins/iOS/TYSDKInterface.mm @@ -159,7 +159,7 @@ extern "C" { else { NSLog(@"TYSdkInterface GetSKUList Faild"); - NSLog(@"SKUList %@", resp.errCode); + NSLog(@"SKUList %ld %@", resp.errCode, resp.errStr); } NSString *result = DicTojsonString(resultDict);