Ver código fonte

Merge remote-tracking branch 'remotes/origin/master' into douYou

hexiaojie 1 ano atrás
pai
commit
52ff6887c2
46 arquivos alterados com 925 adições e 21 exclusões
  1. 12 0
      GameClient/Assets/Editor/ToolsMenu.cs
  2. 3 0
      GameClient/Assets/Game/HotUpdate/Controller/GameController.cs
  3. 16 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ActivityThemeLuckyBoxUI.cs
  4. 71 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComCardImgRes.cs
  5. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComCardImgRes.cs.meta
  6. 72 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComImgCard.cs
  7. 11 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComImgCard.cs.meta
  8. 3 0
      GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/LuckyBox/UI_LuckyBoxWishUI.cs
  9. 243 0
      GameClient/Assets/Game/HotUpdate/Platform/QDAppStoreManager.cs
  10. 3 0
      GameClient/Assets/Game/HotUpdate/Platform/QDAppStoreManager.cs.meta
  11. 74 0
      GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs
  12. 1 1
      GameClient/Assets/Game/HotUpdate/Utils/ResPathUtil.cs
  13. 14 11
      GameClient/Assets/Game/HotUpdate/Views/ActivityMainTips/ActivityZCJBRewardView.cs
  14. 17 1
      GameClient/Assets/Game/HotUpdate/Views/ActivityThemeLuckyBox/ActivityThemeLuckyBoxView.cs
  15. 3 3
      GameClient/Assets/Game/HotUpdate/Views/Common/Controller/LuckyBoxController.cs
  16. 4 3
      GameClient/Assets/Game/HotUpdate/Views/DailyWelfare/DailyWelfareView.cs
  17. 3 0
      GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs
  18. 8 0
      GameClient/Assets/Game/HotUpdate/Views/LuckyBox/LuckyBoxWishView.cs
  19. 2 1
      GameClient/Assets/Game/HotUpdate/Views/MainUI/MainUIView.cs
  20. 2 0
      GameClient/Assets/Game/HotUpdate/Views/Share/ShareView.cs
  21. 1 1
      GameClient/Assets/Game/HotUpdate/Views/Studio/StudioActivityView.cs
  22. 4 0
      GameClient/Assets/Game/Launcher/LauncherConfig.cs
  23. 48 0
      GameClient/Assets/Game/Launcher/Platform/ATTAuth.cs
  24. 3 0
      GameClient/Assets/Game/Launcher/Platform/ATTAuth.cs.meta
  25. 46 0
      GameClient/Assets/Game/Launcher/Platform/QDAppStoreManagerInit.cs
  26. 3 0
      GameClient/Assets/Game/Launcher/Platform/QDAppStoreManagerInit.cs.meta
  27. 7 0
      GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs
  28. BIN
      GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_atlas0!a.png
  29. BIN
      GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_atlas0.png
  30. BIN
      GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_fui.bytes
  31. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0!a.png
  32. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0.png
  33. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_1!a.png
  34. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_1.png
  35. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_3!a.png
  36. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_3.png
  37. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_6!a.png
  38. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_6.png
  39. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_7!a.png
  40. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_7.png
  41. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8!a.png
  42. 120 0
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8!a.png.meta
  43. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8.png
  44. 120 0
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8.png.meta
  45. BIN
      GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_fui.bytes
  46. BIN
      GameClient/Assets/ResIn/UI/RoleInfo/RoleInfo_fui.bytes

+ 12 - 0
GameClient/Assets/Editor/ToolsMenu.cs

@@ -34,6 +34,18 @@ namespace GFGEditor
         {
             
         }
+#elif PT_DouYouDev
+        [MenuItem("PT_DouYouDev/")]
+        public static void VersionTag()
+        {
+            
+        }
+#elif PT_IOS
+        [MenuItem("IOS/")]
+        public static void VersionTag()
+        {
+            
+        }
 #elif PT_DOUYOU
         [MenuItem("DouYou/")]
         public static void VersionTag()

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -303,6 +303,9 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.LoginOutBefore();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.LoginOutBefore();
+                    break;
                 default:
                     break;
             }

+ 16 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ActivityThemeLuckyBoxUI.cs

@@ -9,6 +9,7 @@ namespace UI.ActivityThemeLuckyBox
         public GComponent target;
         public Controller m_c1;
         public GLoader m_loaBg;
+        public UI_ComImgCard m_card;
         public GGraph m_bgEffectHolder;
         public GButton m_btnBack;
         public UI_Button1 m_btnChapter;
@@ -19,6 +20,10 @@ namespace UI.ActivityThemeLuckyBox
         public GTextField m_txtTime_4;
         public GButton m_btnLuckyBox_old;
         public UI_Button1 m_btnLuckyBox;
+        public GImage m_mask;
+        public GLoader m_icon_5;
+        public GTextField m_txtTime_5;
+        public GGraph m_textEffect;
         public Transition m_In_2;
         public Transition m_In_4;
         public const string URL = "ui://ubfk2kobmbf1k";
@@ -70,6 +75,7 @@ namespace UI.ActivityThemeLuckyBox
         {
             m_c1 = comp.GetController("c1");
             m_loaBg = (GLoader)comp.GetChild("loaBg");
+            m_card = (UI_ComImgCard)UI_ComImgCard.Create(comp.GetChild("card"));
             m_bgEffectHolder = (GGraph)comp.GetChild("bgEffectHolder");
             m_btnBack = (GButton)comp.GetChild("btnBack");
             m_btnChapter = (UI_Button1)UI_Button1.Create(comp.GetChild("btnChapter"));
@@ -80,6 +86,10 @@ namespace UI.ActivityThemeLuckyBox
             m_txtTime_4 = (GTextField)comp.GetChild("txtTime_4");
             m_btnLuckyBox_old = (GButton)comp.GetChild("btnLuckyBox_old");
             m_btnLuckyBox = (UI_Button1)UI_Button1.Create(comp.GetChild("btnLuckyBox"));
+            m_mask = (GImage)comp.GetChild("mask");
+            m_icon_5 = (GLoader)comp.GetChild("icon_5");
+            m_txtTime_5 = (GTextField)comp.GetChild("txtTime_5");
+            m_textEffect = (GGraph)comp.GetChild("textEffect");
             m_In_2 = comp.GetTransition("In_2");
             m_In_4 = comp.GetTransition("In_4");
         }
@@ -87,6 +97,8 @@ namespace UI.ActivityThemeLuckyBox
         {
             m_c1 = null;
             m_loaBg = null;
+            m_card.Dispose();
+            m_card = null;
             m_bgEffectHolder = null;
             m_btnBack = null;
             m_btnChapter.Dispose();
@@ -101,6 +113,10 @@ namespace UI.ActivityThemeLuckyBox
             m_btnLuckyBox_old = null;
             m_btnLuckyBox.Dispose();
             m_btnLuckyBox = null;
+            m_mask = null;
+            m_icon_5 = null;
+            m_txtTime_5 = null;
+            m_textEffect = null;
             m_In_2 = null;
             m_In_4 = null;
             if(disposeTarget && target != null)

+ 71 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComCardImgRes.cs

@@ -0,0 +1,71 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.ActivityThemeLuckyBox
+{
+    public partial class UI_ComCardImgRes
+    {
+        public GComponent target;
+        public GLoader m_loaCard;
+        public const string URL = "ui://ubfk2kobt88a1f";
+        public const string PACKAGE_NAME = "ActivityThemeLuckyBox";
+        public const string RES_NAME = "ComCardImgRes";
+        private static UI_ComCardImgRes _proxy;
+
+        public static UI_ComCardImgRes Create(GObject gObject = null)
+        {
+            var ui = new UI_ComCardImgRes();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_ComCardImgRes Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_ComCardImgRes();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_loaCard = (GLoader)comp.GetChild("loaCard");
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_loaCard = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComCardImgRes.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 97f61ea4f23e5104ea9801575eb3589b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 72 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComImgCard.cs

@@ -0,0 +1,72 @@
+/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
+
+using FairyGUI;
+
+namespace UI.ActivityThemeLuckyBox
+{
+    public partial class UI_ComImgCard
+    {
+        public GComponent target;
+        public UI_ComCardImgRes m_ComCardImgRes;
+        public const string URL = "ui://ubfk2kobt88a1e";
+        public const string PACKAGE_NAME = "ActivityThemeLuckyBox";
+        public const string RES_NAME = "ComImgCard";
+        private static UI_ComImgCard _proxy;
+
+        public static UI_ComImgCard Create(GObject gObject = null)
+        {
+            var ui = new UI_ComImgCard();
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static UI_ComImgCard Proxy(GObject gObject = null)
+        {
+            if(_proxy == null)
+            {
+                _proxy = new UI_ComImgCard();
+            }
+            var ui = _proxy;
+            if(gObject == null)
+            	ui.target =  (GComponent)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);
+            else
+            	ui.target =  (GComponent)gObject;
+            ui.Init(ui.target);
+            return ui;
+        }
+
+        public static void ProxyEnd()
+        {
+            if (_proxy != null)
+            {
+                _proxy.Dispose();
+            }
+        }
+
+        public static void ClearProxy()
+        {
+            ProxyEnd();
+            _proxy = null;
+        }
+
+        private void Init(GComponent comp)
+        {
+            m_ComCardImgRes = (UI_ComCardImgRes)UI_ComCardImgRes.Create(comp.GetChild("ComCardImgRes"));
+        }
+        public void Dispose(bool disposeTarget = false)
+        {
+            m_ComCardImgRes.Dispose();
+            m_ComCardImgRes = null;
+            if(disposeTarget && target != null)
+            {
+                target.RemoveFromParent();
+                target.Dispose();
+            }
+            target = null;
+        }
+    }
+}

+ 11 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ActivityThemeLuckyBox/UI_ComImgCard.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0757ac9f49a9cc04e98c20b342fbf9a6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 3 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/LuckyBox/UI_LuckyBoxWishUI.cs

@@ -8,6 +8,7 @@ namespace UI.LuckyBox
     {
         public GComponent target;
         public Controller m_showType;
+        public GLoader m_bg;
         public GButton m_btnWish1;
         public GButton m_btnWish2;
         public GButton m_btnRule;
@@ -63,6 +64,7 @@ namespace UI.LuckyBox
         private void Init(GComponent comp)
         {
             m_showType = comp.GetController("showType");
+            m_bg = (GLoader)comp.GetChild("bg");
             m_btnWish1 = (GButton)comp.GetChild("btnWish1");
             m_btnWish2 = (GButton)comp.GetChild("btnWish2");
             m_btnRule = (GButton)comp.GetChild("btnRule");
@@ -74,6 +76,7 @@ namespace UI.LuckyBox
         public void Dispose(bool disposeTarget = false)
         {
             m_showType = null;
+            m_bg = null;
             m_btnWish1 = null;
             m_btnWish2 = null;
             m_btnRule = null;

+ 243 - 0
GameClient/Assets/Game/HotUpdate/Platform/QDAppStoreManager.cs

@@ -0,0 +1,243 @@
+#if !UNITY_EDITOR && UNITY_IOS
+using UnityEngine.Purchasing;
+using UnityEngine;
+using ET;
+
+namespace GFGGame
+{
+    public class QDAppStoreManager
+    {
+        public static void Init()
+        {
+            IAPManager.Instance.InitializePurchasing();
+//#if !UNITY_EDITOR
+//            ReYunSDKManager.Instance.Init();
+//#endif
+        }
+
+        public static void Pay(int buyID, int count, string orderID, long Price)
+        {
+            IAPManager.Instance.Pay(IAPManager.Instance.GetIosProductId(buyID), count, orderID, Price);
+        }
+
+        public static void OnCreateRole()
+        {
+//#if !UNITY_EDITOR
+//            var accountInfoComponent = GameGlobal.zoneScene.GetComponent<AccountInfoComponent>();
+//            ReYunSDKManager.Instance.Register(accountInfoComponent.Account);
+//#endif
+        }
+
+        public static void OnEnterGame()
+        {
+            IAPManager.Instance.CheckOrderToDo();
+
+//#if !UNITY_EDITOR
+//            var accountInfoComponent = GameGlobal.zoneScene.GetComponent<AccountInfoComponent>();
+//            ReYunSDKManager.Instance.Login(accountInfoComponent.Account);
+//#endif
+        }
+    }
+
+    public class IAPManager : SingletonBase<IAPManager>, IStoreListener
+    {
+        IStoreController m_StoreController; // The Unity Purchasing system.
+        private IAppleExtensions m_AppleExtensions;
+        private bool canMakePayments;
+        private string OrderId;
+
+        private string OrderIdLocal
+        {
+            get
+            {
+                return PlayerPrefs.GetString(OrderIdLocalkey, null);
+            }
+            set
+            {
+                PlayerPrefs.SetString(OrderIdLocalkey, value);
+            }
+        }
+        private string TransactionId
+        {
+            get
+            {
+                return PlayerPrefs.GetString(TransactionIdLocalkey, null);
+            }
+            set
+            {
+                PlayerPrefs.SetString(TransactionIdLocalkey, value);
+            }
+        }
+
+        private string OrderIdLocalkey
+        {
+            get { return RoleDataManager.roleId + "OrderId"; }
+        }
+
+        private string TransactionIdLocalkey
+        {
+            get { return RoleDataManager.roleId + "transactionID"; }
+        }
+
+        public void CheckOrderToDo()
+        {
+            if (!string.IsNullOrEmpty(this.OrderIdLocal) && !string.IsNullOrEmpty(this.TransactionId))
+            {
+                IOSRechargeSProxy.IosVerifyOrder(OrderIdLocal, this.TransactionId).Coroutine();
+            }
+        }
+
+        public void Pay(string buyID, int count, string orderID, long Price)
+        {
+            Debug.Log($"Pay {buyID}");
+            if(!canMakePayments)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("应用内购 (IAP) 可能在设备设置中受到限制,请开启后再试。");
+                return;
+            }
+
+            if(!string.IsNullOrEmpty(this.OrderIdLocal))
+            {
+                PromptController.Instance.ShowFloatTextPrompt("有未完成的订单,请稍后再试!");
+                CheckOrderToDo();
+                return;
+
+            }
+            if(!string.IsNullOrEmpty(this.OrderId))
+            {
+                PromptController.Instance.ShowFloatTextPrompt("有未完成的订单,请稍后再试!");
+                return;
+            }
+            ViewManager.Show<ModalStatusView>("");
+            this.OrderId = orderID;
+            m_StoreController.InitiatePurchase(buyID);
+        }
+
+        public void OnServerSuccess(string OrderId, string TransactionId)
+        {
+            this.OrderId = null;
+            this.OrderIdLocal = null;
+            this.TransactionId = null;
+            PlayerPrefs.DeleteKey(OrderIdLocalkey);
+            PlayerPrefs.DeleteKey(TransactionIdLocalkey);
+        }
+
+        public void InitializePurchasing()
+        {
+            Debug.Log("InitializePurchasing");
+
+            var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
+            canMakePayments = builder.Configure<IAppleConfiguration>().canMakePayments;
+            builder.Configure<IAppleConfiguration>().SetApplePromotionalPurchaseInterceptorCallback(OnPromotionalPurchase);
+            var dataArray = ShopCfgArray.Instance.dataArray;
+            foreach(var shopCfg in dataArray)
+            {
+                if(shopCfg.costType == CostType.RMB)
+                {
+                    builder.AddProduct(GetIosProductId(shopCfg.id), ProductType.Consumable);
+                }
+            }
+
+            UnityPurchasing.Initialize(this, builder);
+        }
+
+        public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
+        {
+            Debug.Log("In-App Purchasing successfully initialized");
+            m_StoreController = controller;
+            m_AppleExtensions = extensions.GetExtension<IAppleExtensions>();
+
+            // 在 Apple 平台上,我们需要处理由 Apple 的"购买前先询问"功能导致的延期购买。
+            //在非 Apple 平台上,这将不起作用;永远不会调用 OnDeferred。
+            m_AppleExtensions.RegisterPurchaseDeferredListener(OnDeferred);
+        }
+
+        public void OnInitializeFailed(InitializationFailureReason error)
+        {
+            Debug.Log($"In-App Purchasing initialize failed: {error}");
+        }
+
+        public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason)
+        {
+            Debug.Log($"Purchase failed - Product: '{product.definition.id}', PurchaseFailureReason: {failureReason}");
+
+            this.OrderId = null;
+            ViewManager.Hide<ModalStatusView>();
+            
+            switch (failureReason)
+            {
+                case PurchaseFailureReason.PurchasingUnavailable:
+                    PromptController.Instance.ShowFloatTextPrompt("应用内购 (IAP) 可能在设备设置中受到限制,请开启后再试。");
+                    break;
+                case PurchaseFailureReason.ExistingPurchasePending:
+                    PromptController.Instance.ShowFloatTextPrompt("现购待定,请稍后再试。");
+                    break;
+                case PurchaseFailureReason.ProductUnavailable:
+                    PromptController.Instance.ShowFloatTextPrompt("该商品不可购买,请稍后再试。");
+                    break;
+                case PurchaseFailureReason.SignatureInvalid:
+                    PromptController.Instance.ShowFloatTextPrompt("验证失败,请稍后再试。");
+                    break;
+                case PurchaseFailureReason.UserCancelled:
+                    
+                    break;
+                case PurchaseFailureReason.PaymentDeclined:
+                    PromptController.Instance.ShowFloatTextPrompt("此次购买被拒绝,请稍后再试。");
+                    break;
+                case PurchaseFailureReason.DuplicateTransaction:
+                    PromptController.Instance.ShowFloatTextPrompt("重复的交易,请稍后再试。");
+                    break;
+                default:
+                    PromptController.Instance.ShowFloatTextPrompt("购买失败,请稍后再试!");
+                    break;
+            }
+        }
+
+        public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
+        {
+            ViewManager.Hide<ModalStatusView>();
+            //Retrieve the purchased product
+            var product = args.purchasedProduct;
+            Debug.Log($"Purchase Complete - Product: {product.definition.id}");
+            this.OrderIdLocal = this.OrderId;
+            this.TransactionId = product.transactionID;
+            GameGlobal.maxShowOrderTime = 300000;
+            IOSRechargeSProxy.IosVerifyOrder(OrderIdLocal, product.transactionID).Coroutine();
+
+            //We return Complete, informing IAP that the processing on our side is done and the transaction can be closed.
+            return PurchaseProcessingResult.Complete;
+        }
+
+        /// &lt;summary>
+        /// 特定于 iOS。
+        /// 未成年人要求购买并提交给家长批准时,
+        /// 此函数将作为 Apple 的"购买前先询问"功能的一部分
+        /// 接受调用。
+        ///
+        /// 购买被批准或拒绝时,将触发正常的购买
+        /// 事件。
+        /// &lt;/summary>
+        /// &lt;param name="item">Item.&lt;/param>
+        private void OnDeferred(Product item)
+        {
+            Debug.Log("Purchase deferred: " + item.definition.id);
+            PromptController.Instance.ShowFloatTextPrompt("未成年人购买需要经过家长批准才能继续!");
+        }
+
+        private void OnPromotionalPurchase(Product item)
+        {
+            Debug.Log("Attempted promotional purchase: " + item.definition.id);
+            // 已检测到推荐性购买。
+            // 通过呈现家长控制门等方式处理此事件。
+            //此处,仅出于演示目的,我们将等待五秒钟
+            // 再继续购买。
+            //StartCoroutine(ContinuePromotionalPurchases());
+        }
+
+        public string GetIosProductId(int cfgId)
+        {
+            return "wsj" + cfgId;
+        }
+    }
+}
+#endif

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Platform/QDAppStoreManager.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f80db6686bd24e3d9d1dad9298372a45
+timeCreated: 1722951514

+ 74 - 0
GameClient/Assets/Game/HotUpdate/Platform/QDManager.cs

@@ -20,6 +20,15 @@ namespace GFGGame
                     QDDouYouManager.Instance.Init();
                     QDShareManager.Instance.Init();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.Init();
+                    QDShareManager.Instance.Init();
+                    break;
+                case (int)ChannelID.AppStore:
+#if !UNITY_EDITOR && UNITY_IOS
+                    QDAppStoreManager.Init();
+#endif
+                    break;
                 default:
                     break;
             }
@@ -42,6 +51,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.Login();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.Login();
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接douyou ios的sdk登录
+                    break;
                 default:
                     break;
             }
@@ -57,6 +72,9 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.OnCreateRole();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.OnCreateRole();
+                    break;
                 default:
                     break;
             }
@@ -72,6 +90,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.OnEnterGame();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.OnEnterGame();
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }
@@ -88,6 +112,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.OnQuitToLoginView();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.OnQuitToLoginView();
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }
@@ -103,6 +133,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.Pay(buyID, count, orderID, price);
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.Pay(buyID, count, orderID, price);
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }
@@ -126,6 +162,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.Logout();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.Logout();
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }
@@ -141,6 +183,12 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.Exit();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.Exit();
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }
@@ -176,6 +224,32 @@ namespace GFGGame
                         roleInfo.Id.ToString(), lvl.ToString(), roleInfo.Name, roleInfo.ServerId.ToString(),
                         serverName);
                     break;
+                case (int)ChannelID.DouYouDev:
+                    //改名上报给sdk
+                    var zoneSceneDev = GameGlobal.zoneScene;
+                    if (zoneSceneDev == null) return;
+
+                    if (zoneSceneDev.GetComponent<RoleInfosComponent>() == null ||
+                        zoneSceneDev.GetComponent<RoleInfosComponent>().IsDisposed) return;
+
+                    var roleInfoDev = zoneSceneDev.GetComponent<RoleInfosComponent>().GetCurrentRole();
+                    if (roleInfoDev == null) return;
+
+                    if (GameGlobal.myNumericComponent == null) return;
+                    int lvlDev = GameGlobal.myNumericComponent.GetAsInt(NumericType.Lvl);
+
+                    if (zoneSceneDev.GetComponent<ServerInfosComponent>() == null) return;
+                    if (zoneSceneDev.GetComponent<ServerInfosComponent>().recentlyServerInfo == null) return;
+
+                    string serverNameDev =
+                        zoneSceneDev.GetComponent<ServerInfosComponent>().recentlyServerInfo.ServerName;
+                    QDDouYouManagerInit.Instance.ReportRole((int)reportType,
+                        roleInfoDev.Id.ToString(), lvlDev.ToString(), roleInfoDev.Name, roleInfoDev.ServerId.ToString(),
+                        serverNameDev);
+                    break;
+                case (int)ChannelID.AppStore:
+                    //TODO 接入douYou sdk 
+                    break;
                 default:
                     break;
             }

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Utils/ResPathUtil.cs

@@ -223,7 +223,7 @@ namespace GFGGame
         {
             return $"{ANIMATION_DIR_PATH}/Card/{res}/{res}.{extName}";
         }
-        public static string GetActivityPath(string res, string extName = "jpg")
+        public static string GetActivityPath(string res, string extName = "png")
         {
             return $"{TEXTURE_DIR_PATH}/Activity/Activity/{res}.{extName}";
         }

+ 14 - 11
GameClient/Assets/Game/HotUpdate/Views/ActivityMainTips/ActivityZCJBRewardView.cs

@@ -11,6 +11,7 @@ namespace GFGGame
     public class ActivityZCJBRewardView : BaseWindow
     {
         private UI_ActivityZCJBRewardUI _ui;
+        private List<ActivityDressCfg> zcjbCfgList = new List<ActivityDressCfg>();
         private int lastGotIndex;
         public override void Dispose()
         {
@@ -37,7 +38,9 @@ namespace GFGGame
         {
             base.OnShown();
             UpdateList();
-            _ui.m_List.numItems = ActivityDressCfgArray.Instance.dataArray.Length;
+            int activityId = ActivityDataManager.Instance.GetCurOpenActiveByType(17);
+            zcjbCfgList = ActivityDressCfgArray.Instance.GetCfgsByactivityId(activityId);
+            _ui.m_List.numItems = zcjbCfgList.Count;
             _ui.m_List.ScrollToView(Mathf.Max(0, ActivityDataManager.Instance.ActivityZCJBList.Count - 1), false, true);
         }
         protected override void OnHide()
@@ -48,10 +51,10 @@ namespace GFGGame
         private void RenderRewardList(int index, GObject obj)
         {
             UI_ActivityRewardItemUI item = UI_ActivityRewardItemUI.Proxy(obj);
-            ItemCfg costItem = ItemCfgArray.Instance.GetCfg(ActivityDressCfgArray.Instance.dataArray[index].comsumeArr[0][0]);
+            ItemCfg costItem = ItemCfgArray.Instance.GetCfg(zcjbCfgList[index].comsumeArr[0][0]);
             ItemData numItem;
             long num;
-            if (BagDataManager.Instance.GetBagData().TryGetValue(ActivityDressCfgArray.Instance.dataArray[index].comsumeArr[0][0], out numItem))
+            if (BagDataManager.Instance.GetBagData().TryGetValue(zcjbCfgList[index].comsumeArr[0][0], out numItem))
             {
                 num = numItem.num;
             }
@@ -73,7 +76,7 @@ namespace GFGGame
             }
             if(index == ActivityDataManager.Instance.ActivityZCJBList.Count)
             {
-                if(num >= ActivityDressCfgArray.Instance.dataArray[index].comsumeArr[0][1])
+                if(num >= zcjbCfgList[index].comsumeArr[0][1])
                 {
                     item.m_RewardBtn.m_c1.selectedIndex = 1;
                     RedDotController.Instance.SetComRedDot(item.m_RewardBtn.target, true);
@@ -85,7 +88,7 @@ namespace GFGGame
                 }
             }
             //
-            item.m_rewardName.text = "使用" + costItem.name + "*"+ ActivityDressCfgArray.Instance.dataArray[index].comsumeArr[0][1] + "兑换";
+            item.m_rewardName.text = "使用" + costItem.name + "*"+ zcjbCfgList[index].comsumeArr[0][1] + "兑换";
             if (item.m_RewardBtn.target.data == null)
             {
                 item.m_RewardBtn.target.onClick.Add(OnClickRewardBtn);
@@ -95,11 +98,11 @@ namespace GFGGame
             {
                 item.m_List.itemRenderer = RenderRewardItemList;
             }
-            item.m_List.data = ActivityDressCfgArray.Instance.dataArray[index].bonusArr;
-            item.m_List.numItems = ActivityDressCfgArray.Instance.dataArray[index].bonusArr.Length;
+            item.m_List.data = zcjbCfgList[index].bonusArr;
+            item.m_List.numItems = zcjbCfgList[index].bonusArr.Length;
 
             //最后一档特殊处理
-            //if(index == ActivityDressCfgArray.Instance.dataArray.Length - 1)
+            //if(index == zcjbCfgList.Length - 1)
             //{
             //    item.m_rewardNum.visible = true;
             //    int numChange = GameGlobal.myNumericComponent.GetAsInt(NumericType.ActivityDressLastGearRewrdNum);
@@ -126,7 +129,7 @@ namespace GFGGame
                 GetSuitItemController.TryShow(0);
                 EventAgent.DispatchEvent(ConstMessage.RED_CHANGE);
                 UI_ActivityRewardItemUI.ProxyEnd();
-                _ui.m_List.numItems = ActivityDressCfgArray.Instance.dataArray.Length;
+                _ui.m_List.numItems = zcjbCfgList.Count;
                 UpdateList();
             }
             else if (item.m_RewardBtn.m_c1.selectedIndex == 0)
@@ -149,7 +152,7 @@ namespace GFGGame
         {
             ItemData numItem;
             long num;
-            if (BagDataManager.Instance.GetBagData().TryGetValue(ActivityDressCfgArray.Instance.dataArray[0].comsumeArr[0][0], out numItem))
+            if (BagDataManager.Instance.GetBagData().TryGetValue(zcjbCfgList[0].comsumeArr[0][0], out numItem))
             {
                 num = numItem.num;
             }
@@ -157,7 +160,7 @@ namespace GFGGame
             {
                 num = 0;
             }
-            ItemCfg item = ItemCfgArray.Instance.GetCfg(ActivityDressCfgArray.Instance.dataArray[0].comsumeArr[0][0]);
+            ItemCfg item = ItemCfgArray.Instance.GetCfg(zcjbCfgList[0].comsumeArr[0][0]);
             _ui.m_num.text = item.name+ ":" + num;
         }
 

+ 17 - 1
GameClient/Assets/Game/HotUpdate/Views/ActivityThemeLuckyBox/ActivityThemeLuckyBoxView.cs

@@ -64,7 +64,16 @@ namespace GFGGame
 
             _activityCfg = ActivityOpenCfgArray.Instance.GetCfg(_activityId);
             _ui.m_loaBg.url = ResPathUtil.GetBgImgPath(_activityCfg.res);
-
+            if(_activityId == 5)
+            {
+                _ui.m_card.target.visible = true;
+                _ui.m_card.m_ComCardImgRes.m_loaCard.url = ResPathUtil.GetBgImgPath("bg_jfyl");
+            }
+            else
+            {
+                _ui.m_card.target.visible = false;
+            }
+            
             UpdateEffect();
             UpdateRedDot();
             UpdateTime();
@@ -209,6 +218,13 @@ namespace GFGGame
                 _effectUIDic.Add("L", EffectUIPool.CreateEffectUI(_ui.m_btnLuckyBox.m_effectHolder, "ui_Activity", "SYJH_icon_tx_L"));
                 _effectUIDic.Add("R", EffectUIPool.CreateEffectUI(_ui.m_btnChapter.m_effectHolder, "ui_Activity", "SYJH_icon_tx_R"));
             }
+            else if (_activityId == 5)
+            {
+                _effectUIDic.Add("All_tx", EffectUIPool.CreateEffectUI(_ui.m_bgEffectHolder, "ui_Activity/JFYL_All_tx", "JFYL_All_tx"));
+                _effectUIDic.Add("L", EffectUIPool.CreateEffectUI(_ui.m_btnLuckyBox.m_effectHolder, "ui_Activity/JFYL_Button_L", "JFYL_Button_L"));
+                _effectUIDic.Add("R", EffectUIPool.CreateEffectUI(_ui.m_btnChapter.m_effectHolder, "ui_Activity/JFYL_Button_R", "JFYL_Button_R"));
+                _effectUIDic.Add("textEff", EffectUIPool.CreateEffectUI(_ui.m_textEffect, "ui_Activity/JFYL_Text", "JFYL_Text"));
+            }
         }
         private void PreloadSuitModel()
         {

+ 3 - 3
GameClient/Assets/Game/HotUpdate/Views/Common/Controller/LuckyBoxController.cs

@@ -130,7 +130,7 @@ namespace GFGGame
                         modelInfos[_index] = new ModelInfo();
                         _dressUpObjUIs[_index].UpdateWrapper(comRes.m_holder);
                         comRes.m_holder.SetPosition(_luckyBoxCfg.posArr[_modelIndex][0], _luckyBoxCfg.posArr[_modelIndex][1], 1);
-                        _dressUpObjUIs[_index].ResetSceneObj(scale, false, false, null, false);
+                        _dressUpObjUIs[_index].ResetSceneObj(scale, false, true, null, false);
                         _dressUpObjUIs[_index].dressUpObj.PutOnSuitCfg(_luckyBoxCfg.suitIdArr[_modelIndex], true, new int[] { ConstDressUpItemType.BEI_JING }, false, false);
                         Timers.inst.StartCoroutine(DelayShowModel(direction));
                     }
@@ -230,7 +230,7 @@ namespace GFGGame
         private void ShowModel()
         {
             ChangeModelAlphaAnim(_index, 0, 1);
-            Transform obj = _dressUpObjUIs[_index].sceneObject.transform.Find("Role");
+            Transform obj = _dressUpObjUIs[_index].sceneObject.transform;
             if(obj != null)
             {
                 obj.gameObject.SetActive(true);
@@ -241,7 +241,7 @@ namespace GFGGame
         {
             InitModel(_index);
             ChangeModelAlphaAnim(_index, 1, 0);
-            Transform obj = _dressUpObjUIs[_index].sceneObject.transform.Find("Role");
+            Transform obj = _dressUpObjUIs[_index].sceneObject.transform;
             if(obj != null)
             {
                 obj.gameObject.SetActive(false);

+ 4 - 3
GameClient/Assets/Game/HotUpdate/Views/DailyWelfare/DailyWelfareView.cs

@@ -126,8 +126,9 @@ namespace GFGGame
             item.m_loaTitle.visible = true;
             if (ActivityDataManager.Instance.actLimitChargeId > 0)
             {
-                item.m_loaIcon.url = "ui://DailyWelfare/hdbn_xslc_" + openCfg.res;
-                item.m_loaTitle.url = "ui://DailyWelfare/hdbn_wz_xslc_" + openCfg.res;
+                string path  = "xslc_" + openCfg.res;
+                item.m_loaIcon.url = ResPathUtil.GetActivityPath(path);//"ui://DailyWelfare/hdbn_xslc_" + openCfg.res;
+                //item.m_loaTitle.url = "ui://DailyWelfare/hdbn_wz_xslc_" + openCfg.res;
                 item.m_loaTitle.visible = false;
             }
             else if (openCfg.id == 501)
@@ -163,7 +164,7 @@ namespace GFGGame
             GObject gObject = context.sender as GObject;
             int id = (int)gObject.data;
             ActivityOpenCfg cfg = ActivityOpenCfgArray.Instance.GetCfg(id);
-            if (id == 501 || id == 502 || cfg.type == 10)
+            if (id == 501 || id == 502 || cfg.type == 10 || cfg.type == 2)
             {
                 ViewManager.Show<NewLimitChargeView>(new object[] { gObject.data });
                 return;

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Views/Login/LoginView.cs

@@ -208,6 +208,9 @@ namespace GFGGame
                 case (int)ChannelID.DouYou:
                     QDDouYouManager.Instance.LoginOutBefore();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManager.Instance.LoginOutBefore();
+                    break;
                 default:
                     break;
             }

+ 8 - 0
GameClient/Assets/Game/HotUpdate/Views/LuckyBox/LuckyBoxWishView.cs

@@ -53,9 +53,17 @@ namespace GFGGame
             base.OnShown();
             _actLimitTsy = (int)this.viewData;
             if (_actLimitTsy == ConstLimitTimeActivityType.ActLimitStlyc)
+            {
                 _ui.m_showType.selectedIndex = 1;
+            }
+            else if(_actLimitTsy == 1)
+            {
+                _ui.m_showType.selectedIndex = 2;
+            }
             else
+            {
                 _ui.m_showType.selectedIndex = 0;
+            }
 
             int activityId = ActivityDataManager.Instance.GetCurOpenActiveByType(_actLimitTsy);
             ActivityOpenCfg activityOpenCfg = ActivityOpenCfgArray.Instance.GetCfg(activityId);

+ 2 - 1
GameClient/Assets/Game/HotUpdate/Views/MainUI/MainUIView.cs

@@ -747,7 +747,8 @@ namespace GFGGame
                 }
                 ActivityOpenCfg activityOpenCfg = ActivityOpenCfgArray.Instance.GetCfg(actLuckyBoxId);
                 _ui.m_btnActivityLuckyBox.target.title = activityOpenCfg.themeName;
-                _ui.m_btnActivityLuckyBox.target.icon = "ui://Main/zjm_icon_" + activityOpenCfg.res.Split('_')[1];
+                string path = "zjm_icon_" + activityOpenCfg.res.Split('_')[1];
+                _ui.m_btnActivityLuckyBox.target.icon = ResPathUtil.GetActivityPath(path,"png"); //"ui://Main/zjm_icon_" + activityOpenCfg.res.Split('_')[1];
                 //long time = TimeUtil.DateTimeToTimestamp(activityOpenCfg.endTime) - TimeHelper.ServerNow();
                 //_ui.m_btnActivityLuckyBox.m_txtTime.text = time > TimeUtil.SECOND_PER_DAY * 1000 ? TimeUtil.FormattingTimeTo_DDHHmm(time) : TimeUtil.FormattingTimeTo_HHmmss(time);
             }

+ 2 - 0
GameClient/Assets/Game/HotUpdate/Views/Share/ShareView.cs

@@ -83,7 +83,9 @@ namespace GFGGame
         private void BtnOnClickShareQQPlatform()
         {
             ShareDataManager.Instance.CaptureCameraToImage(false);
+#if UNITY_ANDROID
             ShareSDKFun(PlatformType.QQPlatform);
+#endif
         }
         private void BtnOnClickShareDouYin()
         {

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Views/Studio/StudioActivityView.cs

@@ -117,7 +117,7 @@ namespace GFGGame
                 item.m_loaItem.visible = false;
                 item.m_loaIcon.visible = true;
                 item.m_flow.visible = false;
-                item.m_loaIcon.url = string.Format("ui://Studio/{0}", _studioCfg.res);
+                item.m_loaIcon.url = ResPathUtil.GetActivityPath(_studioCfg.res,"png");
             }
             item.m_grpLock.visible = index > 0 && !InstanceZonesDataManager.CheckLevelPass(_storyLevelCfgs[index - 1].id);
             item.m_comFlower.target.visible = false;//.m_c1.selectedIndex = InstanceZonesDataManager.GetStarCountHistory(_storyLevelCfgs[index].id);

+ 4 - 0
GameClient/Assets/Game/Launcher/LauncherConfig.cs

@@ -72,6 +72,10 @@ namespace GFGGame
             netType = EnumNetType.LOCAL;
             cfgName = "cfg_dev";
             ChannelId = (int)ChannelID.Test;
+#elif PT_DouYouDev
+            netType = EnumNetType.LOCAL;
+            cfgName = "cfg_douYouDev";
+            ChannelId = (int)ChannelID.DouYouDev;
 #elif PT_TAPTAP
             netType = EnumNetType.PUBLIC;
             cfgName = "cfg_taptap";

+ 48 - 0
GameClient/Assets/Game/Launcher/Platform/ATTAuth.cs

@@ -0,0 +1,48 @@
+using System;
+using UnityEngine;
+
+namespace GFGGame.Launcher
+{
+    public class ATTAuth : MonoBehaviour
+    {
+        [System.Runtime.InteropServices.DllImport("__Internal")]
+        private static extern void _RequestTrackingAuthorizationWithCompletionHandler();
+
+        [System.Runtime.InteropServices.DllImport("__Internal")]
+        private static extern int _GetAppTrackingAuthorizationStatus();
+
+        private static Action<int> getAuthorizationStatusAction;
+
+        /// <summary>
+        /// 请求ATT授权窗口
+        /// </summary>
+        /// <param name="getResult"></param>
+        public static void RequestTrackingAuthorizationWithCompletionHandler(Action<int> getResult)
+        {
+            //-1:"ios版本低于14"
+            //0: "ATT 授权状态待定";
+            //1: "ATT 授权状态受限";
+            //2: "ATT 已拒绝";
+            //3: "ATT 已授权";
+            Debug.Log("RequestTrackingAuthorizationWithCompletionHandler");
+            getAuthorizationStatusAction = getResult;
+            _RequestTrackingAuthorizationWithCompletionHandler();
+        }
+
+        /// <summary>
+        /// 获取当前ATT授权状态
+        /// </summary>
+        /// <returns></returns>
+        public static int GetAppTrackingAuthorizationStatus()
+        {
+            return _GetAppTrackingAuthorizationStatus();
+        }
+
+        public void GetAuthorizationStatus(string status)
+        {
+            getAuthorizationStatusAction?.Invoke(int.Parse(status));
+        }
+
+    }
+}
+

+ 3 - 0
GameClient/Assets/Game/Launcher/Platform/ATTAuth.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 27ce48eca6084671b666830d26548e8c
+timeCreated: 1722951344

+ 46 - 0
GameClient/Assets/Game/Launcher/Platform/QDAppStoreManagerInit.cs

@@ -0,0 +1,46 @@
+using UnityEngine;
+using UniFramework.Event;
+
+namespace GFGGame.Launcher
+{
+
+    public static class QDAppStoreManagerInit
+    {
+        public static int AppTrackingAuthorizationStatus;
+        private const string ATTStatusLocalKey = "ATTStatusLocalKey";
+
+        public static void InitPlatform()
+        {
+#if !UNITY_EDITOR && UNITY_IOS
+            AppTrackingAuthorizationStatus = ATTAuth.GetAppTrackingAuthorizationStatus();
+            if (AppTrackingAuthorizationStatus == 0)
+            {
+                bool requested = LocalCache.GetBool(ATTStatusLocalKey, false);
+                if(!requested)
+                {
+                    AddIOSMethod();
+                    ATTAuth.RequestTrackingAuthorizationWithCompletionHandler((status) =>
+                    {
+                        Debug.Log("ATT status :" + status);
+                        AppTrackingAuthorizationStatus = status;
+                    });
+                }
+            }
+#endif
+            UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true});
+        }
+
+
+        private static void AddIOSMethod()
+        {
+            string objName = "IOSMethod";
+            var obj = GameObject.Find(objName);
+            if(obj == null)
+            {
+                obj = new GameObject(objName);
+                GameObject.DontDestroyOnLoad(obj);
+            }
+            obj.AddComponent<ATTAuth>();
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/Game/Launcher/Platform/QDAppStoreManagerInit.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b1262b0f94484df486b817b6c864e73f
+timeCreated: 1722951338

+ 7 - 0
GameClient/Assets/Game/Launcher/Platform/QDManagerInit.cs

@@ -13,6 +13,13 @@ namespace GFGGame.Launcher
                     QDDouYouManagerInit.Instance.InitSDK(LauncherConfig.douYouAdId);
                     QDShareManagerInit.Instance.InitSDK();
                     break;
+                case (int)ChannelID.DouYouDev:
+                    QDDouYouManagerInit.Instance.InitSDK(LauncherConfig.douYouAdId);
+                    QDShareManagerInit.Instance.InitSDK();
+                    break;
+                case (int)ChannelID.AppStore:
+                    QDAppStoreManagerInit.InitPlatform();
+                    break;
                 default:
                     UniEvent.SendMessage(new LauncherEvent.InitPlatformResult() { success = true });
                     QDShareManagerInit.Instance.InitSDK();

BIN
GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_atlas0!a.png


BIN
GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_atlas0.png


BIN
GameClient/Assets/ResIn/UI/ActivityThemeLuckyBox/ActivityThemeLuckyBox_fui.bytes


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0!a.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_1!a.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_1.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_3!a.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_3.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_6!a.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_6.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_7!a.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_7.png


BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8!a.png


+ 120 - 0
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8!a.png.meta

@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 9f28c29f9407c1344932c40e14aeb496
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 50
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 1
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 50
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 1
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8.png


+ 120 - 0
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_atlas0_8.png.meta

@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 87b44ee28f2a8e743b1bb0ee4f6b44ef
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 11
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 50
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 1
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: 50
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 1
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
GameClient/Assets/ResIn/UI/LuckyBox/LuckyBox_fui.bytes


BIN
GameClient/Assets/ResIn/UI/RoleInfo/RoleInfo_fui.bytes