From 295c37ae668072648b3bc1bb40e6bb353f98db8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B4=8B=E5=90=B4?= <617088122@qq.com> Date: Tue, 30 Aug 2022 13:43:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0SDK2.2.6=EF=BC=8C=E6=BF=80?= =?UTF-8?q?=E5=8A=B1=E8=A7=86=E9=A2=91=E6=B7=BB=E5=8A=A0loading=E5=92=8C?= =?UTF-8?q?=E6=97=A0=E5=B9=BF=E5=91=8A=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/GameAnalytics.meta | 8 ++ Assets/Resources/GameAnalytics/Settings.asset | 93 +++++++++++++++++ .../GameAnalytics/Settings.asset.meta | 8 ++ Assets/Scripts/Utils/AdsUtils.cs | 7 +- .../Common/GameInterface/TKGSDKManager.cs | 79 ++++++++++++++- Assets/TKGSDK/Common/internal/ITKGSDK.cs | 49 +++++++++ Assets/TKGSDK/Common/internal/TKGSDKNative.cs | 94 +++++++++++++++++- .../Common/internal/iOS/TGiOSAdmanager.cs | 68 ++++++++++++- .../Config/Scripts/TKGAdPositionName.cs | 2 - Assets/TKGSDK/Config/Scripts/TKGParams.cs | 2 +- Assets/TKGSDK/Demo/ToukaSDKDemo.cs | 5 +- Assets/TKGSDK/Demo/app_icon.png | Bin 0 -> 48817 bytes Assets/TKGSDK/Demo/app_icon.png.meta | 92 +++++++++++++++++ .../Editor/ToukaAdsBuildPostProcessor.cs | 90 +++++++++++------ .../ToukaAnalyticsBuildPostProcessor.cs | 7 +- .../Scripts/SDK/TKGNativeInterface.cs | 41 +++++++- .../Scripts/SDK/TKGNativeInterfaceAndroid.cs | 45 ++++++++- .../Scripts/SDK/TKGNativeInterfaceDefault.cs | 36 +++++++ .../Scripts/SDK/TKGNativeInterfaceIOS.cs | 55 +++++++++- .../NativeSDK/Scripts/SDK/TKGSDKCallback.cs | 13 +++ .../Scripts/SDK/TKGSDKCallbackAndroid.cs | 19 ++++ .../NativeSDK/Scripts/Utils/DplusAgent.cs | 13 +-- .../ThirdPlugins/EasyTouchBundle/Install.meta | 3 +- ProjectSettings/ProjectSettings.asset | 6 +- 24 files changed, 764 insertions(+), 71 deletions(-) create mode 100644 Assets/Resources/GameAnalytics.meta create mode 100644 Assets/Resources/GameAnalytics/Settings.asset create mode 100644 Assets/Resources/GameAnalytics/Settings.asset.meta create mode 100644 Assets/TKGSDK/Demo/app_icon.png create mode 100644 Assets/TKGSDK/Demo/app_icon.png.meta diff --git a/Assets/Resources/GameAnalytics.meta b/Assets/Resources/GameAnalytics.meta new file mode 100644 index 00000000..e73d2d28 --- /dev/null +++ b/Assets/Resources/GameAnalytics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f7b142c5985b40449d22fa1859a2a00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/GameAnalytics/Settings.asset b/Assets/Resources/GameAnalytics/Settings.asset new file mode 100644 index 00000000..2dff9dd1 --- /dev/null +++ b/Assets/Resources/GameAnalytics/Settings.asset @@ -0,0 +1,93 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: Settings + m_EditorClassIdentifier: Assembly-CSharp:GameAnalyticsSDK.Setup:Settings + TotalMessagesSubmitted: 0 + TotalMessagesFailed: 0 + DesignMessagesSubmitted: 0 + DesignMessagesFailed: 0 + QualityMessagesSubmitted: 0 + QualityMessagesFailed: 0 + ErrorMessagesSubmitted: 0 + ErrorMessagesFailed: 0 + BusinessMessagesSubmitted: 0 + BusinessMessagesFailed: 0 + UserMessagesSubmitted: 0 + UserMessagesFailed: 0 + CustomArea: + gameKey: [] + secretKey: [] + Build: [] + SelectedPlatformOrganization: [] + SelectedPlatformStudio: [] + SelectedPlatformGame: [] + SelectedPlatformGameID: + SelectedOrganization: + SelectedStudio: + SelectedGame: + NewVersion: + Changes: + SignUpOpen: 1 + StudioName: + GameName: + OrganizationName: + OrganizationIdentifier: + EmailGA: + IntroScreen: 1 + InfoLogEditor: 1 + InfoLogBuild: 1 + VerboseLogBuild: 0 + UseManualSessionHandling: 0 + SendExampleGameDataToMyGame: 0 + UseIMEI: 0 + InternetConnectivity: 0 + CustomDimensions01: [] + CustomDimensions02: [] + CustomDimensions03: [] + ResourceItemTypes: [] + ResourceCurrencies: [] + LastCreatedGamePlatform: 0 + Platforms: + CurrentInspectorState: 0 + ClosedHints: + DisplayHints: 0 + DisplayHintsScrollState: {x: 0, y: 0} + Logo: {fileID: 0} + UpdateIcon: {fileID: 0} + InfoIcon: {fileID: 0} + DeleteIcon: {fileID: 0} + GameIcon: {fileID: 0} + HomeIcon: {fileID: 0} + InstrumentIcon: {fileID: 0} + QuestionIcon: {fileID: 0} + UserIcon: {fileID: 0} + AmazonIcon: {fileID: 0} + GooglePlayIcon: {fileID: 0} + iosIcon: {fileID: 0} + macIcon: {fileID: 0} + windowsPhoneIcon: {fileID: 0} + UsePlayerSettingsBuildNumber: 0 + SubmitErrors: 1 + NativeErrorReporting: 0 + MaxErrorCount: 10 + SubmitFpsAverage: 1 + SubmitFpsCritical: 1 + IncludeGooglePlay: 1 + FpsCriticalThreshold: 20 + FpsCirticalSubmitInterval: 1 + PlatformFoldOut: + CustomDimensions01FoldOut: 0 + CustomDimensions02FoldOut: 0 + CustomDimensions03FoldOut: 0 + ResourceItemTypesFoldOut: 0 + ResourceCurrenciesFoldOut: 0 diff --git a/Assets/Resources/GameAnalytics/Settings.asset.meta b/Assets/Resources/GameAnalytics/Settings.asset.meta new file mode 100644 index 00000000..7d9bcb43 --- /dev/null +++ b/Assets/Resources/GameAnalytics/Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 10b7e284f13ce41268736687ce969d1c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Utils/AdsUtils.cs b/Assets/Scripts/Utils/AdsUtils.cs index d58100fe..e2b1a36c 100644 --- a/Assets/Scripts/Utils/AdsUtils.cs +++ b/Assets/Scripts/Utils/AdsUtils.cs @@ -71,7 +71,12 @@ public static class AdsUtils TKGSDKManager.Instance.ShowRewardAd(pAdPos, (pResult) => { pSuccessCallback?.Invoke(); - }, UIUtils.ShowNoAdsTip); + }, noUnityTips, true); } + + private static void noUnityTips() + { + + } } \ No newline at end of file diff --git a/Assets/TKGSDK/Common/GameInterface/TKGSDKManager.cs b/Assets/TKGSDK/Common/GameInterface/TKGSDKManager.cs index 41ef8ccb..10abd70c 100644 --- a/Assets/TKGSDK/Common/GameInterface/TKGSDKManager.cs +++ b/Assets/TKGSDK/Common/GameInterface/TKGSDKManager.cs @@ -166,7 +166,7 @@ public class TKGSDKManager : TKGSingleton /// Name of reward ad placement /// true:reward succ, false: reward failed /// Callback of reward ad show fail - public void ShowRewardAd(TKGRVPositionName _adPos, Action _rewardCallback = null, Action _showFailedCallback = null) + public void ShowRewardAd(TKGRVPositionName _adPos, Action _rewardCallback = null, Action _showFailedCallback = null, bool showSDKToast = false) { #if UNITY_EDITOR || NO_AD if (null != _rewardCallback) @@ -182,6 +182,7 @@ public class TKGSDKManager : TKGSingleton } else { + m_sdkInterface.SetShowSDKToast(showSDKToast); m_sdkInterface.ShowRewardAd(_adPos, _rewardCallback, _showFailedCallback); } } @@ -202,7 +203,7 @@ public class TKGSDKManager : TKGSingleton /// public bool IsReadyInterstitialAd() { - + return m_sdkInterface.IsReadyInterstitialAd(); } @@ -517,20 +518,88 @@ public class TKGSDKManager : TKGSingleton { m_sdkInterface.Shake(_shakeType, _intensity); } -#endregion -#region others + /// + /// share txt + /// + /// + public void Share(string shareText) + { + m_sdkInterface.ShareTxt(shareText); + } + + /// + /// regist APNS + /// + public void RegistAPNS() + { + + m_sdkInterface.RegistAPNS(); + } + + /// + /// shake + /// + /// notification identifier + /// The body of the notification. + /// notify after the time interval. format:yyyy-MM-dd HH:mm:ss + /// The application badge number. + /// The title of the notification. + /// The subtitle of the notification. + public void RegistNotification(string notiId, string body, string fireDate, int badge = 1, string title = "", string subTitle = "") + { + + m_sdkInterface.RegistNotification(notiId,body,fireDate,badge,title,subTitle); + } + + /// + /// remove all notification + /// + public void RemoveAllNotifications() + { + + m_sdkInterface.RemoveAllNotifications(); + } + + /// + /// remove notification by notification identifier + /// + /// notification identifier + public void RemoveNotification(string notiId) + { + + m_sdkInterface.RemoveNotification(notiId); + } + #endregion + + #region others + + public void Toast(string text) + { + m_sdkInterface.Toast(text); + } /// /// Set user source listener /// only call first can back source /// - /// true : origin user,false : not origin user + /// true : origin user,false : not origin user 2 public void SetUserSourceListener(Action _userSourceAction) { m_sdkInterface.SetUserSourceListener(_userSourceAction); } + /// + /// Set user source listener + /// only call first can back source + /// with campaginName + /// + /// true : origin user,false : not origin user 2 + public void SetUserSourceListener(Action _userSourceAction) + { + m_sdkInterface.SetUserSourceListener(_userSourceAction); + } + /// /// set common callback /// diff --git a/Assets/TKGSDK/Common/internal/ITKGSDK.cs b/Assets/TKGSDK/Common/internal/ITKGSDK.cs index ad7ff281..ee0b31a5 100644 --- a/Assets/TKGSDK/Common/internal/ITKGSDK.cs +++ b/Assets/TKGSDK/Common/internal/ITKGSDK.cs @@ -76,6 +76,12 @@ namespace Touka /// Callback of reward ad show fail void ShowRewardAd(TKGRVPositionName _adPos, Action _rewardCallback = null, Action _showFailedCallback = null); + /// + /// SetShowSDKToast + /// if use sdk toast set true else set false + + void SetShowSDKToast(bool _useSDKToast); + /// /// Is Ready Reward /// @@ -234,6 +240,8 @@ namespace Touka void OpenPolicyPop(); + void Toast(string _text); + /// /// shake /// @@ -251,6 +259,12 @@ namespace Touka /// void SetUserSourceListener(Action _userSourceAction); + /// + /// Set game focus + /// + /// + void SetUserSourceListener(Action _userSourceActionWithCampaignName); + /// /// common callback /// @@ -263,6 +277,41 @@ namespace Touka /// void SetLogEnable(bool _enable); + /// + /// share txt + /// + /// + void ShareTxt(string _shareTxt); + + /// + /// regist APNS + /// + void RegistAPNS(); + + + /// + /// shake + /// + /// notification identifier + /// The body of the notification. + /// notify after the time interval. format: yyyy-MM-dd HH:mm:ss + /// The application badge number. + /// The title of the notification. + /// The subtitle of the notification. + void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle); + + + /// + /// remove all notification + /// + void RemoveAllNotifications(); + + /// + /// remove notification by notification identifier + /// + /// notification identifier + void RemoveNotification(string notiId); + #endregion } diff --git a/Assets/TKGSDK/Common/internal/TKGSDKNative.cs b/Assets/TKGSDK/Common/internal/TKGSDKNative.cs index 647ccdac..55ff7ad4 100644 --- a/Assets/TKGSDK/Common/internal/TKGSDKNative.cs +++ b/Assets/TKGSDK/Common/internal/TKGSDKNative.cs @@ -147,6 +147,17 @@ namespace Touka TKGNativeInterface.Instance.showRewardAd(_adPos.ToString(), -1); } + public void Toast(string text) { + + TKGNativeInterface.Instance.toast(text); + + } + + public void SetShowSDKToast(bool _useSDKToast) + { + TKGNativeInterface.Instance.SetShowSDKToast(_useSDKToast); + } + /// /// Is Ready Interstitial /// @@ -564,6 +575,19 @@ namespace Touka TKGNativeInterface.Instance.SetUserSourceCallback(new AndroidTKGUserSourceCalllback()); } + /// + /// SetUserSourceListenerWithCampaignName + /// + /// + public void SetUserSourceListener(Action _userSourceAction) + { +#if UNITY_EDITOR + return; +#endif + TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName = _userSourceAction; + TKGNativeInterface.Instance.SetUserSourceCallback(new AndroidTKGUserSourceCalllbackWithCampaignName()); + } + /// /// Set TKG Common callback /// @@ -585,15 +609,77 @@ namespace Touka #if UNITY_EDITOR return; #endif - -#if UNITY_IOS TKGNativeInterface.Instance.SetLogEnable(_enable); -#else + } + /// + /// share txt + /// + public void ShareTxt(string _shareTxt) + { +#if UNITY_EDITOR + return; +#endif + TKGNativeInterface.Instance.ShareTxt(_shareTxt); + } + + /// + /// regist APNS + /// + public void RegistAPNS() + { + +#if UNITY_EDITOR + return; +#else + TKGNativeInterface.Instance.RegistAPNS(); +#endif + + } + + /// + /// shake + /// + /// notification identifier + /// The body of the notification. + /// notify after the time interval. format: yyyy-MM-dd HH:mm:ss + /// The application badge number. + /// The title of the notification. + /// The subtitle of the notification. + public void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle) { + +#if UNITY_EDITOR + return; +#else + TKGNativeInterface.Instance.RegistNotification(notiId,body,fireDate,badge,title,subTitle); #endif } + /// + /// remove all notification + /// + public void RemoveAllNotifications() { + +#if UNITY_EDITOR + return; +#else + TKGNativeInterface.Instance.RemoveAllNotifications(); +#endif + } - #endregion + /// + /// remove notification by notification identifier + /// + /// notification identifier + public void RemoveNotification(string notiId) { + + +#if UNITY_EDITOR + return; +#else + TKGNativeInterface.Instance.RemoveNotification(notiId); +#endif + } +#endregion } } diff --git a/Assets/TKGSDK/Common/internal/iOS/TGiOSAdmanager.cs b/Assets/TKGSDK/Common/internal/iOS/TGiOSAdmanager.cs index 3e165610..8cd5700a 100644 --- a/Assets/TKGSDK/Common/internal/iOS/TGiOSAdmanager.cs +++ b/Assets/TKGSDK/Common/internal/iOS/TGiOSAdmanager.cs @@ -74,12 +74,37 @@ public class TGiOSAdManager : MonoBehaviour } + // 通知 + public void registAPNS() + { + TKG_RegistAPNS(); + } + + public void registNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle) + { + TKG_RegistNotification(notiId,body,fireDate,badge,title,subTitle); + } + + public void removeNotification(string notiId) + { + TKG_RemoveNotification(notiId); + } + + public void removeAllNotifications() + { + TKG_RemoveAllNotification(); + } // 震动 public void shake(int mType, float mIntensity = 1) { TKG_Shake(mType,mIntensity); } + public void share(string _shareText) + { + TKG_Share(_shareText); + } + // ads public void RemoveAllAds() @@ -141,6 +166,11 @@ public class TGiOSAdManager : MonoBehaviour TKG_ShowRewardVideo(adPos); } + public void ShowSDKToast(bool _show) + { + TKG_ShowSDKToast(_show); + } + // native public void LoadNative(float width, float height) { @@ -187,6 +217,10 @@ public class TGiOSAdManager : MonoBehaviour TKG_OpenMoreGame(); } + public void Toast(string content) + { + TKG_Toast(content); + } // 在线参数 public int GetConfigInt(string key, int defaultValue) @@ -357,21 +391,30 @@ public class TGiOSAdManager : MonoBehaviour // user source [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TKG_UsersourceDelegate(bool isOrganic,string source); + public delegate void TKG_UsersourceDelegate(bool isOrganic,string source,string campaignName); [AOT.MonoPInvokeCallback(typeof(TKG_UsersourceDelegate))] - static void userSourceHandle(bool isOrganic, string source) + static void userSourceHandle(bool isOrganic, string source,string campaignName) { if (TKGSDKCallback.mTKGUserSourceCallback != null) { TKGSDKCallback.mTKGUserSourceCallback(isOrganic,source); TKGSDKCallback.mTKGUserSourceCallback = null; } + + if (TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName != null) + { + TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName(isOrganic,source, campaignName); + TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName = null; + } } // dll [DllImport("__Internal")] private static extern void TKG_Shake(int mType, float mIntensity); + [DllImport("__Internal")] + private static extern void TKG_Share(string text); + [DllImport("__Internal")] private static extern void TKG_InitSDK(); @@ -414,6 +457,9 @@ public class TGiOSAdManager : MonoBehaviour [DllImport("__Internal")] private static extern void TKG_OpenMoreGame(); + [DllImport("__Internal")] + private static extern void TKG_Toast(string str); + // ads [DllImport("__Internal")] private static extern void TKG_LoadBanner(); @@ -445,6 +491,9 @@ public class TGiOSAdManager : MonoBehaviour [DllImport("__Internal")] private static extern void TKG_ShowRewardVideo(string adPos); + [DllImport("__Internal")] + private static extern void TKG_ShowSDKToast(bool _show); + [DllImport("__Internal")] private static extern void TKG_LoadNative(float width, float height); @@ -518,7 +567,20 @@ public class TGiOSAdManager : MonoBehaviour // 设置unity版本 [DllImport("__Internal")] - private static extern bool TKG_SetUnityVersion(string version); + private static extern void TKG_SetUnityVersion(string version); + + // 通知 + [DllImport("__Internal")] + private static extern void TKG_RegistAPNS(); + + [DllImport("__Internal")] + private static extern void TKG_RemoveAllNotification(); + + [DllImport("__Internal")] + private static extern void TKG_RemoveNotification(string notiId); + + [DllImport("__Internal")] + private static extern void TKG_RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle); // ============================ old sdk todo ======================== diff --git a/Assets/TKGSDK/Config/Scripts/TKGAdPositionName.cs b/Assets/TKGSDK/Config/Scripts/TKGAdPositionName.cs index 9084037d..8211b630 100644 --- a/Assets/TKGSDK/Config/Scripts/TKGAdPositionName.cs +++ b/Assets/TKGSDK/Config/Scripts/TKGAdPositionName.cs @@ -39,6 +39,4 @@ public enum TKGRVPositionName Get_Monster, Get_Coin, Get_AutoMerge, - - } \ No newline at end of file diff --git a/Assets/TKGSDK/Config/Scripts/TKGParams.cs b/Assets/TKGSDK/Config/Scripts/TKGParams.cs index 675fafa8..b0dba034 100644 --- a/Assets/TKGSDK/Config/Scripts/TKGParams.cs +++ b/Assets/TKGSDK/Config/Scripts/TKGParams.cs @@ -15,7 +15,7 @@ public static class TKGParams { TKGParamKey.RemoveAdsShowCount.ToString(), 4 }, // int value // { TKGParamKey.LevelList.ToString(), "1,78,72,70,64,65,4,66" }, // string value { TKGParamKey.HasBlock.ToString(), 0 }, // bool value // 1:true 0:false - { TKGParamKey.UserGroup.ToString(), "Default" }, + { TKGParamKey.UserGroup.ToString(), "Default" }, { TKGParamKey.RemoveAdsShow.ToString(), 2 }, { TKGParamKey.RemoveAds.ToString(), 4 }, { TKGParamKey.LevelInterSwitch.ToString(), 3 }, diff --git a/Assets/TKGSDK/Demo/ToukaSDKDemo.cs b/Assets/TKGSDK/Demo/ToukaSDKDemo.cs index cb1102e8..7a7cc48d 100644 --- a/Assets/TKGSDK/Demo/ToukaSDKDemo.cs +++ b/Assets/TKGSDK/Demo/ToukaSDKDemo.cs @@ -79,7 +79,7 @@ namespace Touka public void OnButton_ShowRewardAd() { Debug.Log("[ToukaSDKDemo] OnButton_ShowRewardAd click"); - TKGSDKManager.Instance.ShowRewardAd(TKGRVPositionName.RV_GetDoubleCoin, RewardResult, RvShowFailed); + TKGSDKManager.Instance.ShowRewardAd(TKGRVPositionName.RV_GetDoubleCoin, RewardResult, RvShowFailed,true); } /// @@ -102,6 +102,7 @@ namespace Touka public void OnButton_IsReadyIV() { + Debug.Log("[ToukaSDKDemo] OnButton_IsReadyIV click"); bool isReadyIV = TKGSDKManager.Instance.IsReadyInterstitialAd(); Debug.Log("[ToukaSDKDemo] isReadyIV : " + isReadyIV); @@ -217,7 +218,7 @@ namespace Touka public void OnButton_OpenMoreGame() { Debug.Log("[ToukaSDKDemo] OnButton_OpenMoreGame click"); - TKGSDKManager.Instance.OpenMoreGame(); + //TKGSDKManager.Instance.OpenMoreGame(); } public void OnButton_ReviewBtn() diff --git a/Assets/TKGSDK/Demo/app_icon.png b/Assets/TKGSDK/Demo/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa36c47d025da2a716f4645ed980378c767ef4a GIT binary patch literal 48817 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")) - { - - SplashScreenController.WriteBelow("#include \"SplashScreen.h\"", "#import "); - SplashScreenController.WriteBelow("void HideSplashScreen()\n{", "[[TONativeSplashHelper helper]showSplashInLaunch];"); - - } -#endif - -#if USE_SPLASH - - ToukaClassHelper SplashScreenControllers = new ToukaClassHelper(_path + "/Classes/UI/SplashScreen.mm"); - - if (!SplashScreenControllers.HasBolow("#import ")) - { - - SplashScreenControllers.WriteBelow("#include \"SplashScreen.h\"", "#import "); - SplashScreenControllers.WriteBelow("void HideSplashScreen()\n{", "[[TKGSplashManager manager]showSplashInLaunch];"); - - } - - ToukaClassHelper UnityAppController = new ToukaClassHelper(_path + "/Classes/UnityAppController.mm"); - if (!UnityAppController.HasBolow("[[TKGSplashManager manager] showSplashInEnterForground];")) + if (!SplashScreenController.HasBolow("#import ")) { - UnityAppController.WriteBelow("#import \"UnityAppController.h\"", "\n#import "); - UnityAppController.WriteBelow("UnityPause(0);", "\n[[TKGSplashManager manager] showSplashInEnterForground];"); + + SplashScreenController.WriteBelow("#include \"SplashScreen.h\"", "#import "); + SplashScreenController.WriteBelow("void HideSplashScreen()\n{", "[[TONativeSplashHelper helper]showSplashInLaunch];"); + } - - #endif + } #endif } diff --git a/Assets/TKGSDK/Editor/ToukaAnalyticsBuildPostProcessor.cs b/Assets/TKGSDK/Editor/ToukaAnalyticsBuildPostProcessor.cs index 4d09d37b..3afb4224 100644 --- a/Assets/TKGSDK/Editor/ToukaAnalyticsBuildPostProcessor.cs +++ b/Assets/TKGSDK/Editor/ToukaAnalyticsBuildPostProcessor.cs @@ -148,7 +148,9 @@ public class ToukaAnalyticsBuildPostProcessor proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC"); proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO"); - proj.SetBuildProperty(target, "GCC_C_LANGUAGE_STANDARD", "gnu11"); + proj.SetBuildProperty(target, "GCC_C_LANGUAGE_STANDARD", "gnu99"); + proj.SetBuildProperty(target, "GCC_ENABLE_OBJC_EXCEPTIONS","YES"); + proj.SetBuildProperty(target, "EXCLUDED_ARCHS", "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8 EXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))"); File.WriteAllText(projPath, proj.WriteToString()); @@ -174,11 +176,14 @@ public class ToukaAnalyticsBuildPostProcessor plist.ReadFromFile(plistPath); #if !AppStore_GB plist.root.SetString("NSLocationAlwaysUsageDescription", "为了更好的体验游戏"); + plist.root.SetString("NSCameraUsageDescription", "为了更好的体验游戏"); plist.root.SetString("NSLocationWhenInUseUsageDescription", "为了更好的体验游戏"); plist.root.SetString("NSUserTrackingUsageDescription", "该标识符将用于向您投放个性化广告"); plist.root.SetString("NSPhotoLibraryUsageDescription", "为了更好的体验游戏,请允许APP保存图片到您的相册"); + #else plist.root.SetString ("NSLocationAlwaysUsageDescription", "for better experience the game"); + plist.root.SetString("NSCameraUsageDescription", "for better experience the game"); plist.root.SetString ("NSLocationWhenInUseUsageDescription", "for better experience the game"); plist.root.SetString("NSUserTrackingUsageDescription", "This identifier will be used to deliver personalized ads to you."); plist.root.SetString("NSPhotoLibraryUsageDescription", "In order to experience the game better, please allow the APP to save pictures to your album."); diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterface.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterface.cs index fe9a948d..37859160 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterface.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterface.cs @@ -11,7 +11,7 @@ namespace Touka { private static TKGNativeInterface _instance; - private string UnitySDKVersion = "2.2.1"; + private string UnitySDKVersion = "2.2.6"; public static TKGNativeInterface Instance { @@ -109,6 +109,8 @@ namespace Touka /// public abstract void showRewardAd(string _adPos, int _itemCount = -1); + + public abstract void SetShowSDKToast(bool _useSDKToast); /// /// Show Reward Ad /// @@ -394,6 +396,38 @@ namespace Touka /// public abstract void SetLogEnable(bool _enable); + /// + /// share txt + /// + /// + public abstract void ShareTxt(string _shareTxt); + + /// + /// regist APNS + /// + public abstract void RegistAPNS(); + + /// + /// shake + /// + /// notification identifier + /// The body of the notification. + /// notify after the time interval. format: yyyy-MM-dd HH:mm:ss + /// The application badge number. + /// The title of the notification. + /// The subtitle of the notification. + public abstract void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle); + + /// + /// remove all notification + /// + public abstract void RemoveAllNotifications(); + + /// + /// remove notification by notification identifier + /// + /// notification identifier + public abstract void RemoveNotification(string notiId); #endregion #region other callback @@ -408,6 +442,11 @@ namespace Touka /// public abstract void SetUserSourceCallback(AndroidTKGUserSourceCalllback _userSourceCallback); + /// + /// set user source callback with CampaignName + /// + public abstract void SetUserSourceCallback(AndroidTKGUserSourceCalllbackWithCampaignName _userSourceCallback); + #endregion } } \ No newline at end of file diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceAndroid.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceAndroid.cs index 6502d2e3..f14ced62 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceAndroid.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceAndroid.cs @@ -205,6 +205,13 @@ namespace Touka #endif } + public override void SetShowSDKToast(bool _useSDKToast) + { +#if UNITY_ANDROID +#endif + + } + public override void ShowNativeAd(RectTransform pRect, Camera pCam = null, string pAdPos = "") { #if UNITY_ANDROID @@ -579,9 +586,8 @@ namespace Touka /// public override void SetLogEnable(bool _enable) { - SDKCall("setLogEnable", _enable); + SDKCall("setEnableLog", _enable); } - #endregion #region Others (Uncommon) @@ -662,6 +668,35 @@ namespace Touka SDKCall("pushMsg"); } + // + /// share txt + /// + /// + public override void ShareTxt(string _shareTxt) + { + SDKCall("localShareTxt", _shareTxt); + } + + public override void RegistAPNS() + { + + } + + public override void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle) + { + + } + + public override void RemoveNotification(string notiId) + { + + } + + public override void RemoveAllNotifications() + { + + } + #endregion #region common callback @@ -676,6 +711,12 @@ namespace Touka SDKCall("getUserSource", _userSourceCallback); } + + public override void SetUserSourceCallback(AndroidTKGUserSourceCalllbackWithCampaignName _userSourceCallback) + { + SDKCall("getUserSource", _userSourceCallback); + } + #endregion } diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceDefault.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceDefault.cs index e5b57065..0faea728 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceDefault.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceDefault.cs @@ -499,6 +499,11 @@ namespace Touka } + public override void SetUserSourceCallback(AndroidTKGUserSourceCalllbackWithCampaignName _userSourceCallback) + { + + } + public override void RemoveNativeAd() { } @@ -513,6 +518,37 @@ namespace Touka } + public override void ShareTxt(string _shareTxt) + { + + } + + + public override void RegistAPNS() + { + + } + + public override void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle) + { + + } + + public override void RemoveNotification(string notiId) + { + + } + + public override void RemoveAllNotifications() + { + + } + + public override void SetShowSDKToast(bool _useSDKToast) + { + + } + #endregion } diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceIOS.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceIOS.cs index fa11704e..f3b58d5e 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceIOS.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGNativeInterfaceIOS.cs @@ -87,7 +87,7 @@ namespace Touka #endif } - #region Ads Show +#region Ads Show /// /// Show banner Ad @@ -159,6 +159,13 @@ namespace Touka #endif } + public override void SetShowSDKToast(bool _useSDKToast) + { +#if !UNITY_EDITOR + TGiOSAdManager.Instance.ShowSDKToast(_useSDKToast); +#endif + } + /// /// Show FullScreen Ad(is RV without reward callback) /// @@ -495,7 +502,42 @@ namespace Touka TGiOSAdManager.Instance.OpenMoreGame(); #endif } + // + /// share txt + /// + /// + public override void ShareTxt(string _shareTxt) + { + TGiOSAdManager.Instance.share(_shareTxt); + } + public override void RegistAPNS() + { +#if !UNITY_EDITOR + TGiOSAdManager.Instance.registAPNS(); +#endif + } + + public override void RegistNotification(string notiId, string body, string fireDate, int badge, string title, string subTitle) + { +#if !UNITY_EDITOR + TGiOSAdManager.Instance.registNotification(notiId,body,fireDate,badge,title,subTitle); +#endif + } + + public override void RemoveNotification(string notiId) + { +#if !UNITY_EDITOR + TGiOSAdManager.Instance.removeNotification(notiId); +#endif + } + + public override void RemoveAllNotifications() + { +#if !UNITY_EDITOR + TGiOSAdManager.Instance.removeAllNotifications(); +#endif + } #endregion #region Others (Uncommon) @@ -564,7 +606,9 @@ namespace Touka /// public override void toast(string _content) { - +#if !UNITY_EDITOR + TGiOSAdManager.Instance.Toast(_content); +#endif } /// @@ -589,7 +633,12 @@ namespace Touka } - + public override void SetUserSourceCallback(AndroidTKGUserSourceCalllbackWithCampaignName _userSourceCallback) + { + + } + + #endregion diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallback.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallback.cs index e981a741..084d9d7b 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallback.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallback.cs @@ -18,6 +18,9 @@ namespace Touka // tkg user source public static Action mTKGUserSourceCallback = null; + // tkg user source + public static Action mTKGUserSourceCallbackWithCampaignName = null; + // tkg common callback public static Action mTKGCommonCallback = null; @@ -86,6 +89,16 @@ namespace Touka mTKGUserSourceCallback = _userSourceCallbackAction; } + + /// + /// set user source callback with CampaignName + /// + /// + public static void SetTKGUserSourceCallback(Action _userSourceCallbackWithCampaignNameAction) + { + mTKGUserSourceCallbackWithCampaignName = _userSourceCallbackWithCampaignNameAction; + } + public static void SetRewardClickCallback(Action _rewardClickAction) { mRewardClickCallback = _rewardClickAction; diff --git a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallbackAndroid.cs b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallbackAndroid.cs index d1152d9e..e927178f 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallbackAndroid.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/SDK/TKGSDKCallbackAndroid.cs @@ -336,6 +336,25 @@ namespace Touka } } + + /// + /// tkg callback + /// + public class AndroidTKGUserSourceCalllbackWithCampaignName : AndroidJavaProxy + { + public AndroidTKGUserSourceCalllbackWithCampaignName() : base("com.touka.tkg.idal.UserSourceCallbackWithType") { } + + public void onResult(bool _isOrganic, string _userSource,string campaignName) + { + TKGDebugger.LogDebug("TKGCallback onCall, isOrganic : " + _isOrganic + " , userSource : " + _userSource + " , campaignName : " + campaignName); + if(TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName != null) + { + TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName.Invoke(_isOrganic, _userSource,campaignName); + TKGSDKCallback.mTKGUserSourceCallbackWithCampaignName = null; + } + } + } + /* Loom.QueueOnMainThread((pObj) => { diff --git a/Assets/TKGSDK/NativeSDK/Scripts/Utils/DplusAgent.cs b/Assets/TKGSDK/NativeSDK/Scripts/Utils/DplusAgent.cs index f4abb407..8cb746ab 100644 --- a/Assets/TKGSDK/NativeSDK/Scripts/Utils/DplusAgent.cs +++ b/Assets/TKGSDK/NativeSDK/Scripts/Utils/DplusAgent.cs @@ -225,18 +225,7 @@ namespace Touka } #if UNITY_IPHONE - [DllImport("__Internal")] - private static extern void _EventObject(string eventID, string jsonStr); - [DllImport("__Internal")] - private static extern void _RegisterSuperProperty(string jsonStr); - [DllImport("__Internal")] - private static extern void _UnregisterSuperProperty(string propertyName); - [DllImport("__Internal")] - private static extern string _GetSuperProperties(); - [DllImport("__Internal")] - private static extern void _ClearSuperProperties(); - [DllImport("__Internal")] - private static extern void _SetFirstLaunchEvent(string[] propertyName,int len); + #endif diff --git a/Assets/ThirdPlugins/EasyTouchBundle/Install.meta b/Assets/ThirdPlugins/EasyTouchBundle/Install.meta index beb20e73..2dbb760d 100644 --- a/Assets/ThirdPlugins/EasyTouchBundle/Install.meta +++ b/Assets/ThirdPlugins/EasyTouchBundle/Install.meta @@ -1,9 +1,8 @@ fileFormatVersion: 2 guid: 9d20c22a55c184e4999fe7185f147b03 folderAsset: yes -timeCreated: 1451904390 -licenseType: Store DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 47cc6088..209e47d0 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -18,10 +18,10 @@ PlayerSettings: cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 + m_ShowUnitySplashLogo: 0 m_SplashScreenOverlayOpacity: 1 - m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 + m_SplashScreenAnimation: 0 + m_SplashScreenLogoStyle: 0 m_SplashScreenDrawMode: 0 m_SplashScreenBackgroundAnimationZoom: 1 m_SplashScreenLogoAnimationZoom: 1